From e5c3c3c57a2343e1c4d7b8fbc658edcd78f1a292 Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 2 Feb 2022 14:42:23 +0100 Subject: [PATCH 01/38] Removed community_server folder, removed reference to community_server. --- .github/workflows/publish.yml | 48 +- .github/workflows/test.yml | 93 - community_server/.gitignore | 10 - community_server/.gitmodules | 3 - community_server/Dockerfile | 30 - community_server/README.md | 51 - community_server/bin/cake | 75 - community_server/bin/cake.bat | 27 - community_server/bin/cake.php | 12 - community_server/composer.json | 58 - community_server/composer.lock | 5577 ------ community_server/config/app.default.php | 407 - community_server/config/bootstrap.php | 212 - community_server/config/bootstrap_cli.php | 28 - community_server/config/horizontal_form.php | 46 - community_server/config/nginx/fastcgi.conf | 25 - community_server/config/nginx/mime.types | 88 - community_server/config/nginx/nginx.conf | 86 - community_server/config/paths.php | 89 - .../config/php-fpm/php-ini-overrides.ini | 2 - community_server/config/requirements.php | 39 - .../config/ripple_control_group_form.php | 25 - community_server/config/routes.php | 160 - community_server/config/schema/i18n.sql | 18 - community_server/config/schema/sessions.sql | 15 - community_server/copy_to_www.sh | 38 - community_server/docu/community-server.api.md | 132 - community_server/index.php | 16 - community_server/npm-debug.log | 6001 ------- community_server/parse_proto.sh | 20 - community_server/phpunit.xml.dist | 41 - community_server/plugins/empty | 0 community_server/src/Application.php | 117 - community_server/src/Console/Installer.php | 246 - .../src/Controller/AddressTypesController.php | 106 - .../src/Controller/AdminErrorsController.php | 111 - .../src/Controller/AppController.php | 386 - .../src/Controller/AppRequestsController.php | 465 - .../Controller/BlockchainTypesController.php | 106 - .../CommunityProfilesController.php | 106 - .../Component/GradidoNumberComponent.php | 33 - .../Component/JsonRequestClientComponent.php | 184 - .../JsonRpcRequestClientComponent.php | 83 - .../src/Controller/DashboardController.php | 78 - .../src/Controller/ElopageBuysController.php | 165 - .../Controller/ElopageWebhookController.php | 51 - .../src/Controller/ErrorController.php | 70 - .../JsonRequestHandlerController.php | 559 - .../Controller/OperatorTypesController.php | 106 - .../src/Controller/OperatorsController.php | 236 - .../src/Controller/PagesController.php | 86 - .../src/Controller/ProfileController.php | 206 - .../src/Controller/RolesController.php | 108 - .../src/Controller/ServerUsersController.php | 132 - .../Controller/StateBalancesController.php | 399 - .../src/Controller/StateCreatedController.php | 113 - .../src/Controller/StateErrorsController.php | 173 - .../StateGroupAddressesController.php | 113 - .../StateGroupRelationshipsController.php | 115 - .../src/Controller/StateGroupsController.php | 111 - .../StateRelationshipTypesController.php | 106 - .../Controller/StateUserRolesController.php | 185 - .../StateUserTransactionsController.php | 291 - .../src/Controller/StateUsersController.php | 616 - .../TransactionCreationsController.php | 681 - .../TransactionGroupAddaddressController.php | 113 - .../TransactionGroupAllowtradesController.php | 113 - .../TransactionGroupCreatesController.php | 113 - .../TransactionSendCoinsController.php | 469 - .../TransactionSignaturesController.php | 111 - .../Controller/TransactionTypesController.php | 106 - .../src/Controller/TransactionsController.php | 450 - .../src/Controller/UsersController.php | 167 - community_server/src/Form/AssignRoleForm.php | 30 - community_server/src/Form/CreationForm.php | 73 - .../src/Form/DecodeTransaction.php | 8 - community_server/src/Form/ProfileForm.php | 52 - community_server/src/Form/TransferForm.php | 82 - community_server/src/Form/TransferRawForm.php | 73 - community_server/src/Form/UserSearchForm.php | 58 - community_server/src/Locale/cake.pot | 29 - community_server/src/Locale/de_DE/default.mo | Bin 923 -> 0 bytes community_server/src/Locale/de_DE/default.po | 3097 ---- community_server/src/Locale/default.pot | 3566 ---- community_server/src/Model/Behavior/empty | 0 .../src/Model/Entity/AddressType.php | 33 - .../src/Model/Entity/AdminError.php | 41 - .../src/Model/Entity/BlockchainType.php | 30 - .../src/Model/Entity/CommunityProfile.php | 30 - .../src/Model/Entity/ElopageBuy.php | 57 - .../src/Model/Entity/Operator.php | 32 - .../src/Model/Entity/OperatorType.php | 31 - community_server/src/Model/Entity/Role.php | 26 - .../src/Model/Entity/ServerUser.php | 57 - .../src/Model/Entity/StateBalance.php | 89 - .../src/Model/Entity/StateCreated.php | 41 - .../src/Model/Entity/StateError.php | 37 - .../src/Model/Entity/StateGroup.php | 43 - .../src/Model/Entity/StateGroupAddress.php | 35 - .../Model/Entity/StateGroupRelationship.php | 37 - .../Model/Entity/StateRelationshipType.php | 28 - .../src/Model/Entity/StateUser.php | 58 - .../src/Model/Entity/StateUserRole.php | 30 - .../src/Model/Entity/StateUserTransaction.php | 37 - .../src/Model/Entity/Transaction.php | 53 - .../src/Model/Entity/TransactionCreation.php | 39 - .../Entity/TransactionGroupAddaddres.php | 37 - .../Entity/TransactionGroupAllowtrade.php | 35 - .../Model/Entity/TransactionGroupCreate.php | 37 - .../src/Model/Entity/TransactionSendCoin.php | 43 - .../src/Model/Entity/TransactionSignature.php | 33 - .../src/Model/Entity/TransactionType.php | 31 - community_server/src/Model/Entity/User.php | 58 - .../GPBMetadata/Gradido/BasicTypes.php | 39 - .../GPBMetadata/Gradido/GradidoCreation.php | 30 - .../Gradido/GradidoTransaction.php | 29 - .../GPBMetadata/Gradido/GradidoTransfer.php | 41 - .../Gradido/GroupFriendsUpdate.php | 30 - .../GPBMetadata/Gradido/GroupMemberUpdate.php | 36 - .../GPBMetadata/Gradido/ManageNodeBody.php | 32 - .../Gradido/ManageNodeGroupAdd.php | 30 - .../GPBMetadata/Gradido/ManageNodeRequest.php | 36 - .../GPBMetadata/Gradido/TransactionBody.php | 46 - .../Proto/Gradido/CrossGroupTransfer.php | 146 - .../Proto/Gradido/GradidoCreation.php | 102 - .../Proto/Gradido/GradidoTransaction.php | 116 - .../Proto/Gradido/GradidoTransfer.php | 109 - .../Proto/Gradido/GroupFriendsUpdate.php | 92 - .../Gradido/GroupFriendsUpdate/Action.php | 51 - .../Gradido/GroupFriendsUpdate_Action.php | 16 - .../Proto/Gradido/GroupMemberUpdate.php | 146 - .../GroupMemberUpdate/MemberUpdateType.php | 56 - .../GroupMemberUpdate_MemberUpdateType.php | 16 - .../Model/Messages/Proto/Gradido/HederaID.php | 135 - .../src/Model/Messages/Proto/Gradido/Key.php | 96 - .../Messages/Proto/Gradido/LocalTransfer.php | 85 - .../Messages/Proto/Gradido/ManageNodeBody.php | 90 - .../Proto/Gradido/ManageNodeGroupAdd.php | 119 - .../Proto/Gradido/ManageNodeRequest.php | 92 - .../Proto/Gradido/ManageNodeResponse.php | 85 - .../Gradido/ManageNodeResponse/ErrorCode.php | 61 - .../Gradido/ManageNodeResponse_ErrorCode.php | 16 - .../Messages/Proto/Gradido/SignatureMap.php | 65 - .../Messages/Proto/Gradido/SignaturePair.php | 123 - .../Messages/Proto/Gradido/Timestamp.php | 101 - .../Proto/Gradido/TimestampSeconds.php | 67 - .../Proto/Gradido/TransactionBody.php | 220 - .../Messages/Proto/Gradido/TransferAmount.php | 85 - .../src/Model/Navigation/NaviBreakLine.php | 16 - .../src/Model/Navigation/NaviEntry.php | 89 - .../Navigation/NaviEntryAbsoluteLink.php | 92 - .../src/Model/Navigation/NaviEntryBase.php | 31 - .../Model/Navigation/NaviEntryExternLink.php | 26 - .../src/Model/Navigation/NaviEntrySub.php | 105 - .../src/Model/Navigation/NaviHierarchy.php | 49 - .../Model/Navigation/NaviHierarchyEntry.php | 53 - .../src/Model/Navigation/TitleOnly.php | 37 - .../src/Model/Table/AddressTypesTable.php | 74 - .../src/Model/Table/AdminErrorsTable.php | 107 - community_server/src/Model/Table/AppTable.php | 41 - .../src/Model/Table/BlockchainTypesTable.php | 94 - .../Model/Table/CommunityProfilesTable.php | 81 - .../src/Model/Table/ElopageBuysTable.php | 116 - .../src/Model/Table/OperatorTypesTable.php | 70 - .../src/Model/Table/OperatorsTable.php | 93 - .../src/Model/Table/RolesTable.php | 72 - .../src/Model/Table/ServerUsersTable.php | 101 - .../src/Model/Table/StateBalancesTable.php | 325 - .../src/Model/Table/StateCreatedTable.php | 96 - .../src/Model/Table/StateErrorsTable.php | 88 - .../Model/Table/StateGroupAddressesTable.php | 85 - .../Table/StateGroupRelationshipsTable.php | 85 - .../src/Model/Table/StateGroupsTable.php | 102 - .../Table/StateRelationshipTypesTable.php | 63 - .../src/Model/Table/StateUserRolesTable.php | 86 - .../Table/StateUserTransactionsTable.php | 85 - .../src/Model/Table/StateUsersTable.php | 136 - .../Model/Table/TransactionCreationsTable.php | 89 - .../Table/TransactionGroupAddaddressTable.php | 88 - .../TransactionGroupAllowtradesTable.php | 83 - .../Table/TransactionGroupCreatesTable.php | 89 - .../Model/Table/TransactionSendCoinsTable.php | 102 - .../Table/TransactionSignaturesTable.php | 81 - .../src/Model/Table/TransactionTypesTable.php | 120 - .../src/Model/Table/TransactionsTable.php | 469 - .../src/Model/Table/UsersTable.php | 130 - .../src/Model/Transactions/Record.php | 575 - .../src/Model/Transactions/SignatureMap.php | 68 - .../src/Model/Transactions/Transaction.php | 289 - .../Model/Transactions/TransactionBase.php | 166 - .../Model/Transactions/TransactionBody.php | 194 - .../Transactions/TransactionCreation.php | 249 - .../Transactions/TransactionTransfer.php | 249 - .../Model/Validation/GenericValidation.php | 35 - .../Validation/TransactionValidation.php | 49 - community_server/src/Shell/ConsoleShell.php | 81 - .../src/Template/AddressTypes/add.ctp | 28 - .../src/Template/AddressTypes/edit.ctp | 34 - .../src/Template/AddressTypes/index.ctp | 53 - .../src/Template/AddressTypes/view.ctp | 92 - .../src/Template/AdminErrors/add.ctp | 30 - .../src/Template/AdminErrors/edit.ctp | 36 - .../src/Template/AdminErrors/index.ctp | 58 - .../src/Template/AdminErrors/view.ctp | 54 - .../src/Template/AppRequests/get_balance.ctp | 15 - .../AppRequests/list_transactions.ctp | 31 - .../src/Template/BlockchainTypes/add.ctp | 25 - .../src/Template/BlockchainTypes/edit.ctp | 31 - .../src/Template/BlockchainTypes/index.ctp | 51 - .../src/Template/BlockchainTypes/view.ctp | 36 - community_server/src/Template/Cell/empty | 1 - .../src/Template/CommunityProfiles/add.ctp | 24 - .../src/Template/CommunityProfiles/edit.ctp | 30 - .../src/Template/CommunityProfiles/index.ctp | 49 - .../src/Template/CommunityProfiles/view.ctp | 32 - .../Template/Dashboard/error_http_request.ctp | 14 - .../src/Template/Dashboard/index.ctp | 143 - .../src/Template/Dashboard/server_index.ctp | 36 - .../src/Template/Element/Flash/default.ctp | 13 - .../src/Template/Element/Flash/error.ctp | 10 - .../src/Template/Element/Flash/success.ctp | 10 - .../src/Template/Element/centToFloat.ctp | 22 - .../src/Template/Element/navi.ctp | 38 - .../src/Template/Element/navi_center.ctp | 7 - .../src/Template/Element/navi_header.ctp | 45 - .../src/Template/Element/navi_notify.ctp | 44 - .../src/Template/Element/printEuro.ctp | 24 - .../src/Template/Element/printGDT.ctp | 24 - .../src/Template/Element/printGradido.ctp | 19 - .../src/Template/Element/user_menu.ctp | 43 - .../src/Template/ElopageBuys/add.ctp | 33 - .../src/Template/ElopageBuys/edit.ctp | 39 - .../src/Template/ElopageBuys/index.ctp | 67 - .../src/Template/ElopageBuys/statistics.ctp | 35 - .../src/Template/ElopageBuys/view.ctp | 68 - .../src/Template/Email/html/default.ctp | 20 - .../src/Template/Email/text/default.ctp | 16 - .../Email/text/notification_creation.ctp | 19 - .../text/notification_transaction_failed.ctp | 50 - .../Email/text/notification_transfer.ctp | 26 - .../src/Template/Error/error400.ctp | 38 - .../src/Template/Error/error500.ctp | 43 - .../Template/Layout/Email/html/default.ctp | 24 - .../Template/Layout/Email/text/default.ctp | 16 - community_server/src/Template/Layout/ajax.ctp | 16 - .../src/Template/Layout/default.ctp | 53 - .../src/Template/Layout/error.ctp | 47 - .../src/Template/Layout/frontend.ctp | 113 - .../src/Template/Layout/rss/default.ctp | 11 - .../src/Template/OperatorTypes/add.ctp | 26 - .../src/Template/OperatorTypes/edit.ctp | 32 - .../src/Template/OperatorTypes/index.ctp | 51 - .../src/Template/OperatorTypes/view.ctp | 61 - .../src/Template/Operators/add.ctp | 26 - .../src/Template/Operators/edit.ctp | 32 - .../src/Template/Operators/index.ctp | 56 - .../src/Template/Operators/view.ctp | 40 - .../src/Template/Pages/cake_home.ctp | 276 - .../src/Template/Pages/gradido.ctp | 14 - community_server/src/Template/Pages/home.ctp | 19 - community_server/src/Template/Pages/js.ctp | 41 - .../src/Template/Pages/visitor.ctp | 16 - .../src/Template/Profile/edit.ctp | 41 - .../src/Template/Profile/index.ctp | 82 - community_server/src/Template/Roles/add.ctp | 23 - community_server/src/Template/Roles/edit.ctp | 29 - community_server/src/Template/Roles/index.ctp | 47 - community_server/src/Template/Roles/view.ctp | 28 - .../src/Template/ServerUsers/add.ctp | 26 - .../src/Template/ServerUsers/edit.ctp | 34 - .../src/Template/ServerUsers/index.ctp | 59 - .../src/Template/ServerUsers/login.ctp | 22 - .../src/Template/ServerUsers/view.ctp | 56 - .../src/Template/StateBalances/add.ctp | 27 - .../src/Template/StateBalances/edit.ctp | 33 - .../src/Template/StateBalances/index.ctp | 54 - .../src/Template/StateBalances/overview.ctp | 166 - .../Template/StateBalances/overview_gdt.ctp | 123 - .../src/Template/StateBalances/view.ctp | 39 - .../src/Template/StateCreated/add.ctp | 31 - .../src/Template/StateCreated/edit.ctp | 37 - .../src/Template/StateCreated/index.ctp | 61 - .../src/Template/StateCreated/view.ctp | 52 - .../src/Template/StateErrors/add.ctp | 29 - .../src/Template/StateErrors/edit.ctp | 35 - .../src/Template/StateErrors/index.ctp | 55 - .../Template/StateErrors/show_for_user.ctp | 51 - .../src/Template/StateErrors/view.ctp | 44 - .../src/Template/StateGroupAddresses/add.ctp | 28 - .../src/Template/StateGroupAddresses/edit.ctp | 34 - .../Template/StateGroupAddresses/index.ctp | 55 - .../src/Template/StateGroupAddresses/view.ctp | 36 - .../Template/StateGroupRelationships/add.ctp | 25 - .../Template/StateGroupRelationships/edit.ctp | 31 - .../StateGroupRelationships/index.ctp | 51 - .../Template/StateGroupRelationships/view.ctp | 36 - .../src/Template/StateGroups/add.ctp | 32 - .../src/Template/StateGroups/edit.ctp | 38 - .../src/Template/StateGroups/index.ctp | 57 - .../src/Template/StateGroups/view.ctp | 152 - .../Template/StateRelationshipTypes/add.ctp | 24 - .../Template/StateRelationshipTypes/edit.ctp | 30 - .../Template/StateRelationshipTypes/index.ctp | 49 - .../Template/StateRelationshipTypes/view.ctp | 32 - .../Template/StateUserRoles/assign_role.ctp | 49 - .../src/Template/StateUserRoles/index.ctp | 69 - .../src/Template/StateUserRoles/search.ctp | 53 - .../Template/StateUserTransactions/add.ctp | 31 - .../Template/StateUserTransactions/edit.ctp | 37 - .../Template/StateUserTransactions/index.ctp | 57 - .../Template/StateUserTransactions/view.ctp | 42 - .../src/Template/StateUsers/add.ctp | 34 - .../src/Template/StateUsers/edit.ctp | 39 - .../src/Template/StateUsers/index.ctp | 69 - .../Template/StateUsers/list_ident_hashes.ctp | 29 - .../src/Template/StateUsers/search.ctp | 79 - .../src/Template/StateUsers/view.ctp | 143 - .../src/Template/TransactionCreations/add.ctp | 29 - .../Template/TransactionCreations/create.ctp | 31 - .../TransactionCreations/create_multi.ctp | 229 - .../Template/TransactionCreations/edit.ctp | 35 - .../Template/TransactionCreations/index.ctp | 58 - .../Template/TransactionCreations/view.ctp | 40 - .../TransactionGroupAddaddress/add.ctp | 28 - .../TransactionGroupAddaddress/edit.ctp | 34 - .../TransactionGroupAddaddress/index.ctp | 55 - .../TransactionGroupAddaddress/view.ctp | 36 - .../TransactionGroupAllowtrades/add.ctp | 27 - .../TransactionGroupAllowtrades/edit.ctp | 33 - .../TransactionGroupAllowtrades/index.ctp | 53 - .../TransactionGroupAllowtrades/view.ctp | 38 - .../Template/TransactionGroupCreates/add.ctp | 29 - .../Template/TransactionGroupCreates/edit.ctp | 35 - .../TransactionGroupCreates/index.ctp | 55 - .../Template/TransactionGroupCreates/view.ctp | 40 - .../src/Template/TransactionSendCoins/add.ctp | 30 - .../Template/TransactionSendCoins/create.ctp | 40 - .../TransactionSendCoins/create_raw.ctp | 55 - .../Template/TransactionSendCoins/edit.ctp | 36 - .../Template/TransactionSendCoins/index.ctp | 57 - .../Template/TransactionSendCoins/view.ctp | 44 - .../Template/TransactionSignatures/add.ctp | 25 - .../Template/TransactionSignatures/edit.ctp | 31 - .../Template/TransactionSignatures/index.ctp | 49 - .../Template/TransactionSignatures/view.ctp | 30 - .../src/Template/TransactionTypes/add.ctp | 26 - .../src/Template/TransactionTypes/edit.ctp | 32 - .../src/Template/TransactionTypes/index.ctp | 51 - .../src/Template/TransactionTypes/view.ctp | 63 - .../src/Template/Transactions/add.ctp | 44 - .../src/Template/Transactions/decode.ctp | 36 - .../src/Template/Transactions/edit.ctp | 49 - .../src/Template/Transactions/index.ctp | 58 - .../Transactions/manual_transaction.ctp | 63 - .../Template/Transactions/send_to_node.ctp | 106 - ...nchronize_with_state_user_transactions.ctp | 46 - .../src/Template/Transactions/view.ctp | 259 - community_server/src/Template/Users/add.ctp | 28 - community_server/src/Template/Users/edit.ctp | 34 - community_server/src/Template/Users/index.ctp | 59 - .../src/Template/Users/statistics.ctp | 98 - community_server/src/Template/Users/view.ctp | 52 - community_server/src/View/AjaxView.php | 49 - community_server/src/View/AppView.php | 40 - community_server/src/View/Cell/empty | 0 community_server/src/View/Helper/empty | 0 community_server/testJson.sh | 5 - .../tests/Fixture/AddressTypesFixture.php | 46 - .../tests/Fixture/AdminErrorsFixture.php | 56 - .../tests/Fixture/BaseTestFixture.php | 36 - .../Fixture/CommunityProfilesFixture.php | 51 - .../tests/Fixture/ElopageBuysFixture.php | 64 - .../tests/Fixture/OperatorTypesFixture.php | 46 - .../tests/Fixture/OperatorsFixture.php | 49 - .../tests/Fixture/RolesFixture.php | 45 - .../tests/Fixture/ServerUsersFixture.php | 58 - .../tests/Fixture/StateBalancesFixture.php | 46 - .../tests/Fixture/StateCreatedFixture.php | 63 - .../tests/Fixture/StateErrorsFixture.php | 50 - .../Fixture/StateGroupAddressesFixture.php | 49 - .../StateGroupRelationshipsFixture.php | 48 - .../tests/Fixture/StateGroupsFixture.php | 50 - .../Fixture/StateRelationshipTypesFixture.php | 46 - .../Fixture/StateUserTransactionsFixture.php | 59 - .../tests/Fixture/StateUsersFixture.php | 54 - .../Fixture/TransactionCreationsFixture.php | 44 - .../TransactionGroupAddaddressFixture.php | 54 - .../TransactionGroupAllowtradesFixture.php | 48 - .../TransactionGroupCreatesFixture.php | 50 - .../Fixture/TransactionSendCoinsFixture.php | 54 - .../Fixture/TransactionSignaturesFixture.php | 51 - .../tests/Fixture/TransactionTypesFixture.php | 51 - .../tests/Fixture/TransactionsFixture.php | 55 - .../tests/Fixture/UsersFixture.php | 61 - .../tests/TestCase/ApplicationTest.php | 83 - .../Controller/AddressTypesControllerTest.php | 77 - .../Controller/AdminErrorsControllerTest.php | 76 - .../AppRequestControllerTest.php.old | 345 - .../CommunityProfilesControllerTest.php | 75 - .../Component/GradidoNumberComponentTest.php | 95 - .../JsonRequestClientComponentTest.php | 72 - .../Controller/DashboardControllerTest.php | 45 - .../JsonRequestHandlerControllerTest.php | 176 - .../Controller/PagesControllerTest.php | 101 - .../Controller/ProfilesControllerTest.php | 76 - .../Controller/RolesControllerTest.php | 75 - .../StateBalancesControllerTest.php | 179 - .../Controller/StateErrorsControllerTest.php | 77 - .../StateUserTransactionsControllerTest.php | 78 - .../TransactionCreationsControllerTest.php | 97 - .../tests/TestCase/Model/Behavior/empty | 0 .../Model/Table/AddressTypesTableTest.php | 74 - .../Model/Table/AdminErrorsTableTest.php | 83 - .../Table/CommunityProfilesTableTest.php | 72 - .../TestCase/Model/Table/RolesTableTest.php | 82 - .../Model/Table/StateBalancesTableTest.php | 124 - .../Model/Table/StateErrorsTableTest.php | 84 - .../Table/StateUserTransactionsTableTest.php | 85 - .../Model/Table/StateUsersTableTest.php | 97 - .../Transactions/TransactionCreationTest.php | 41 - .../tests/TestCase/View/Helper/empty | 0 community_server/tests/bootstrap.php | 12 - community_server/tests/data/smallest.png | Bin 67 -> 0 bytes community_server/tests/data/verysmall.jpg | 1 - community_server/tests/testApi.sh | 4 - community_server/webroot/.htaccess | 5 - community_server/webroot/css/fonts_local.css | 79 - community_server/webroot/css/grd_styles.css | 1821 -- .../webroot/css/loginServer/style.css | 14488 --------------- community_server/webroot/css/main.css | 25 - .../webroot/css/materialdesignicons.min.css | 2 - community_server/webroot/css/normalize.css | 349 - .../webroot/css/rippleUI/style.css | 14705 ---------------- community_server/webroot/css/styles.css | 347 - community_server/webroot/favicon.ico | Bin 5694 -> 0 bytes community_server/webroot/favicon.png | Bin 7955 -> 0 bytes .../webroot/font/cakedingbats-webfont.eot | Bin 75538 -> 0 bytes .../webroot/font/cakedingbats-webfont.svg | 78 - .../webroot/font/cakedingbats-webfont.ttf | Bin 75412 -> 0 bytes .../webroot/font/cakedingbats-webfont.woff | Bin 43484 -> 0 bytes .../webroot/font/cakedingbats-webfont.woff2 | Bin 35456 -> 0 bytes .../Material-Icons-Outline.eot | Bin 220322 -> 0 bytes .../Material-Icons-Outline.ttf | Bin 189152 -> 0 bytes .../Material-Icons-Outline.woff | Bin 130986 -> 0 bytes .../Material-Icons-Outline.woff2 | Bin 67204 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Black.ttf | Bin 171480 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Bold.ttf | Bin 170760 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Light.ttf | Bin 170420 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Medium.ttf | Bin 172064 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Regular.ttf | Bin 171676 -> 0 bytes .../webroot/fonts/Roboto/Roboto-Thin.ttf | Bin 171904 -> 0 bytes .../fonts/materialdesignicons-webfont.eot | Bin 531696 -> 0 bytes .../fonts/materialdesignicons-webfont.svg | 1 - .../fonts/materialdesignicons-webfont.ttf | Bin 531476 -> 0 bytes .../fonts/materialdesignicons-webfont.woff | Bin 256404 -> 0 bytes .../fonts/materialdesignicons-webfont.woff2 | Bin 188316 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-300.eot | Bin 15891 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-300.svg | 332 - .../webroot/fonts/open-sans-v18-latin-300.ttf | Bin 28208 -> 0 bytes .../fonts/open-sans-v18-latin-300.woff | Bin 18668 -> 0 bytes .../fonts/open-sans-v18-latin-300.woff2 | Bin 14932 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-600.eot | Bin 15952 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-600.svg | 336 - .../webroot/fonts/open-sans-v18-latin-600.ttf | Bin 28100 -> 0 bytes .../fonts/open-sans-v18-latin-600.woff | Bin 18696 -> 0 bytes .../fonts/open-sans-v18-latin-600.woff2 | Bin 14880 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-700.eot | Bin 16045 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-700.svg | 334 - .../webroot/fonts/open-sans-v18-latin-700.ttf | Bin 28848 -> 0 bytes .../fonts/open-sans-v18-latin-700.woff | Bin 18900 -> 0 bytes .../fonts/open-sans-v18-latin-700.woff2 | Bin 15056 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-800.eot | Bin 16123 -> 0 bytes .../webroot/fonts/open-sans-v18-latin-800.svg | 336 - .../webroot/fonts/open-sans-v18-latin-800.ttf | Bin 28820 -> 0 bytes .../fonts/open-sans-v18-latin-800.woff | Bin 19072 -> 0 bytes .../fonts/open-sans-v18-latin-800.woff2 | Bin 15088 -> 0 bytes .../fonts/open-sans-v18-latin-regular.eot | Bin 15404 -> 0 bytes .../fonts/open-sans-v18-latin-regular.svg | 336 - .../fonts/open-sans-v18-latin-regular.ttf | Bin 27088 -> 0 bytes .../fonts/open-sans-v18-latin-regular.woff | Bin 18100 -> 0 bytes .../fonts/open-sans-v18-latin-regular.woff2 | Bin 14380 -> 0 bytes community_server/webroot/img/50x50.png | Bin 182 -> 0 bytes community_server/webroot/img/cake-logo.png | Bin 2683 -> 0 bytes community_server/webroot/img/cake.icon.png | Bin 943 -> 0 bytes community_server/webroot/img/cake.logo.svg | 41 - community_server/webroot/img/cake.power.gif | Bin 201 -> 0 bytes .../webroot/img/gradido_logo_web.png | Bin 22236 -> 0 bytes .../webroot/img/gradido_logo_web.webp | Bin 13480 -> 0 bytes community_server/webroot/img/logo_half.png | Bin 6832 -> 0 bytes community_server/webroot/img/logo_half.webp | Bin 2490 -> 0 bytes community_server/webroot/img/logo_schrift.png | Bin 22236 -> 0 bytes .../webroot/img/logo_schrift.webp | Bin 13480 -> 0 bytes community_server/webroot/index.php | 41 - community_server/webroot/js/basic.js | 116 - community_server/webroot/js/core.js | 1 - .../webroot/js/ensurePassphrase.js | 1927 -- .../webroot/js/ensurePassphrase.min.js | 1 - community_server/webroot/js/popper.min.js | 6 - community_server/webroot/js/tabs.js | 27 - .../webroot/js/time_calculations.js | 68 - .../webroot/js/tippy-bundle.umd.min.js | 2 - community_server/webroot/js/userSearch.js | 9185 ---------- community_server/webroot/js/userSearch.min.js | 1 - community_server/webroot/js/vendor.addons.js | 1 - .../transaktion-bestaetigen-login.html | 129 - community_server/websrc/gulpfile.js | 58 - community_server/websrc/package.json | 36 - .../websrc/src/less/01-layout.less | 113 - .../websrc/src/less/02-colors.less | 160 - .../websrc/src/less/03-typography.less | 32 - .../websrc/src/less/05-screen.less | 174 - .../websrc/src/less/06-messages.less | 89 - community_server/websrc/src/less/07-user.less | 134 - community_server/websrc/src/less/08-navi.less | 451 - .../websrc/src/less/09-notification.less | 160 - .../websrc/src/less/10-center.less | 224 - .../src/less/12-center-form-single.less | 164 - .../websrc/src/less/15-facts.less | 62 - community_server/websrc/src/less/20-list.less | 239 - community_server/websrc/src/less/21-tabs.less | 45 - community_server/websrc/src/less/30-form.less | 238 - configs/community_server/app.php | 431 - docker-compose.override.yml | 17 - docker-compose.test.yml | 18 - docker-compose.yml | 19 - php-fpm/Dockerfile | 9 - 526 files changed, 1 insertion(+), 97999 deletions(-) delete mode 100644 community_server/.gitignore delete mode 100644 community_server/.gitmodules delete mode 100644 community_server/Dockerfile delete mode 100644 community_server/README.md delete mode 100755 community_server/bin/cake delete mode 100644 community_server/bin/cake.bat delete mode 100644 community_server/bin/cake.php delete mode 100644 community_server/composer.json delete mode 100644 community_server/composer.lock delete mode 100644 community_server/config/app.default.php delete mode 100644 community_server/config/bootstrap.php delete mode 100644 community_server/config/bootstrap_cli.php delete mode 100644 community_server/config/horizontal_form.php delete mode 100644 community_server/config/nginx/fastcgi.conf delete mode 100644 community_server/config/nginx/mime.types delete mode 100644 community_server/config/nginx/nginx.conf delete mode 100644 community_server/config/paths.php delete mode 100644 community_server/config/php-fpm/php-ini-overrides.ini delete mode 100644 community_server/config/requirements.php delete mode 100644 community_server/config/ripple_control_group_form.php delete mode 100644 community_server/config/routes.php delete mode 100644 community_server/config/schema/i18n.sql delete mode 100644 community_server/config/schema/sessions.sql delete mode 100755 community_server/copy_to_www.sh delete mode 100644 community_server/docu/community-server.api.md delete mode 100644 community_server/index.php delete mode 100644 community_server/npm-debug.log delete mode 100755 community_server/parse_proto.sh delete mode 100644 community_server/phpunit.xml.dist delete mode 100644 community_server/plugins/empty delete mode 100644 community_server/src/Application.php delete mode 100644 community_server/src/Console/Installer.php delete mode 100644 community_server/src/Controller/AddressTypesController.php delete mode 100644 community_server/src/Controller/AdminErrorsController.php delete mode 100644 community_server/src/Controller/AppController.php delete mode 100644 community_server/src/Controller/AppRequestsController.php delete mode 100644 community_server/src/Controller/BlockchainTypesController.php delete mode 100644 community_server/src/Controller/CommunityProfilesController.php delete mode 100644 community_server/src/Controller/Component/GradidoNumberComponent.php delete mode 100644 community_server/src/Controller/Component/JsonRequestClientComponent.php delete mode 100644 community_server/src/Controller/Component/JsonRpcRequestClientComponent.php delete mode 100644 community_server/src/Controller/DashboardController.php delete mode 100644 community_server/src/Controller/ElopageBuysController.php delete mode 100644 community_server/src/Controller/ElopageWebhookController.php delete mode 100644 community_server/src/Controller/ErrorController.php delete mode 100644 community_server/src/Controller/JsonRequestHandlerController.php delete mode 100644 community_server/src/Controller/OperatorTypesController.php delete mode 100644 community_server/src/Controller/OperatorsController.php delete mode 100644 community_server/src/Controller/PagesController.php delete mode 100644 community_server/src/Controller/ProfileController.php delete mode 100644 community_server/src/Controller/RolesController.php delete mode 100644 community_server/src/Controller/ServerUsersController.php delete mode 100644 community_server/src/Controller/StateBalancesController.php delete mode 100644 community_server/src/Controller/StateCreatedController.php delete mode 100644 community_server/src/Controller/StateErrorsController.php delete mode 100644 community_server/src/Controller/StateGroupAddressesController.php delete mode 100644 community_server/src/Controller/StateGroupRelationshipsController.php delete mode 100644 community_server/src/Controller/StateGroupsController.php delete mode 100644 community_server/src/Controller/StateRelationshipTypesController.php delete mode 100644 community_server/src/Controller/StateUserRolesController.php delete mode 100644 community_server/src/Controller/StateUserTransactionsController.php delete mode 100644 community_server/src/Controller/StateUsersController.php delete mode 100644 community_server/src/Controller/TransactionCreationsController.php delete mode 100644 community_server/src/Controller/TransactionGroupAddaddressController.php delete mode 100644 community_server/src/Controller/TransactionGroupAllowtradesController.php delete mode 100644 community_server/src/Controller/TransactionGroupCreatesController.php delete mode 100644 community_server/src/Controller/TransactionSendCoinsController.php delete mode 100644 community_server/src/Controller/TransactionSignaturesController.php delete mode 100644 community_server/src/Controller/TransactionTypesController.php delete mode 100644 community_server/src/Controller/TransactionsController.php delete mode 100644 community_server/src/Controller/UsersController.php delete mode 100644 community_server/src/Form/AssignRoleForm.php delete mode 100644 community_server/src/Form/CreationForm.php delete mode 100644 community_server/src/Form/DecodeTransaction.php delete mode 100644 community_server/src/Form/ProfileForm.php delete mode 100644 community_server/src/Form/TransferForm.php delete mode 100644 community_server/src/Form/TransferRawForm.php delete mode 100644 community_server/src/Form/UserSearchForm.php delete mode 100644 community_server/src/Locale/cake.pot delete mode 100644 community_server/src/Locale/de_DE/default.mo delete mode 100644 community_server/src/Locale/de_DE/default.po delete mode 100644 community_server/src/Locale/default.pot delete mode 100644 community_server/src/Model/Behavior/empty delete mode 100644 community_server/src/Model/Entity/AddressType.php delete mode 100644 community_server/src/Model/Entity/AdminError.php delete mode 100644 community_server/src/Model/Entity/BlockchainType.php delete mode 100644 community_server/src/Model/Entity/CommunityProfile.php delete mode 100644 community_server/src/Model/Entity/ElopageBuy.php delete mode 100644 community_server/src/Model/Entity/Operator.php delete mode 100644 community_server/src/Model/Entity/OperatorType.php delete mode 100644 community_server/src/Model/Entity/Role.php delete mode 100644 community_server/src/Model/Entity/ServerUser.php delete mode 100644 community_server/src/Model/Entity/StateBalance.php delete mode 100644 community_server/src/Model/Entity/StateCreated.php delete mode 100644 community_server/src/Model/Entity/StateError.php delete mode 100644 community_server/src/Model/Entity/StateGroup.php delete mode 100644 community_server/src/Model/Entity/StateGroupAddress.php delete mode 100644 community_server/src/Model/Entity/StateGroupRelationship.php delete mode 100644 community_server/src/Model/Entity/StateRelationshipType.php delete mode 100644 community_server/src/Model/Entity/StateUser.php delete mode 100644 community_server/src/Model/Entity/StateUserRole.php delete mode 100644 community_server/src/Model/Entity/StateUserTransaction.php delete mode 100644 community_server/src/Model/Entity/Transaction.php delete mode 100644 community_server/src/Model/Entity/TransactionCreation.php delete mode 100644 community_server/src/Model/Entity/TransactionGroupAddaddres.php delete mode 100644 community_server/src/Model/Entity/TransactionGroupAllowtrade.php delete mode 100644 community_server/src/Model/Entity/TransactionGroupCreate.php delete mode 100644 community_server/src/Model/Entity/TransactionSendCoin.php delete mode 100644 community_server/src/Model/Entity/TransactionSignature.php delete mode 100644 community_server/src/Model/Entity/TransactionType.php delete mode 100644 community_server/src/Model/Entity/User.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php delete mode 100644 community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/HederaID.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/Key.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/SignatureMap.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/Timestamp.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php delete mode 100644 community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php delete mode 100644 community_server/src/Model/Navigation/NaviBreakLine.php delete mode 100644 community_server/src/Model/Navigation/NaviEntry.php delete mode 100644 community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php delete mode 100644 community_server/src/Model/Navigation/NaviEntryBase.php delete mode 100644 community_server/src/Model/Navigation/NaviEntryExternLink.php delete mode 100644 community_server/src/Model/Navigation/NaviEntrySub.php delete mode 100644 community_server/src/Model/Navigation/NaviHierarchy.php delete mode 100644 community_server/src/Model/Navigation/NaviHierarchyEntry.php delete mode 100644 community_server/src/Model/Navigation/TitleOnly.php delete mode 100644 community_server/src/Model/Table/AddressTypesTable.php delete mode 100644 community_server/src/Model/Table/AdminErrorsTable.php delete mode 100644 community_server/src/Model/Table/AppTable.php delete mode 100644 community_server/src/Model/Table/BlockchainTypesTable.php delete mode 100644 community_server/src/Model/Table/CommunityProfilesTable.php delete mode 100644 community_server/src/Model/Table/ElopageBuysTable.php delete mode 100644 community_server/src/Model/Table/OperatorTypesTable.php delete mode 100644 community_server/src/Model/Table/OperatorsTable.php delete mode 100644 community_server/src/Model/Table/RolesTable.php delete mode 100644 community_server/src/Model/Table/ServerUsersTable.php delete mode 100644 community_server/src/Model/Table/StateBalancesTable.php delete mode 100644 community_server/src/Model/Table/StateCreatedTable.php delete mode 100644 community_server/src/Model/Table/StateErrorsTable.php delete mode 100644 community_server/src/Model/Table/StateGroupAddressesTable.php delete mode 100644 community_server/src/Model/Table/StateGroupRelationshipsTable.php delete mode 100644 community_server/src/Model/Table/StateGroupsTable.php delete mode 100644 community_server/src/Model/Table/StateRelationshipTypesTable.php delete mode 100644 community_server/src/Model/Table/StateUserRolesTable.php delete mode 100644 community_server/src/Model/Table/StateUserTransactionsTable.php delete mode 100644 community_server/src/Model/Table/StateUsersTable.php delete mode 100644 community_server/src/Model/Table/TransactionCreationsTable.php delete mode 100644 community_server/src/Model/Table/TransactionGroupAddaddressTable.php delete mode 100644 community_server/src/Model/Table/TransactionGroupAllowtradesTable.php delete mode 100644 community_server/src/Model/Table/TransactionGroupCreatesTable.php delete mode 100644 community_server/src/Model/Table/TransactionSendCoinsTable.php delete mode 100644 community_server/src/Model/Table/TransactionSignaturesTable.php delete mode 100644 community_server/src/Model/Table/TransactionTypesTable.php delete mode 100644 community_server/src/Model/Table/TransactionsTable.php delete mode 100644 community_server/src/Model/Table/UsersTable.php delete mode 100644 community_server/src/Model/Transactions/Record.php delete mode 100644 community_server/src/Model/Transactions/SignatureMap.php delete mode 100644 community_server/src/Model/Transactions/Transaction.php delete mode 100644 community_server/src/Model/Transactions/TransactionBase.php delete mode 100644 community_server/src/Model/Transactions/TransactionBody.php delete mode 100644 community_server/src/Model/Transactions/TransactionCreation.php delete mode 100644 community_server/src/Model/Transactions/TransactionTransfer.php delete mode 100644 community_server/src/Model/Validation/GenericValidation.php delete mode 100644 community_server/src/Model/Validation/TransactionValidation.php delete mode 100644 community_server/src/Shell/ConsoleShell.php delete mode 100644 community_server/src/Template/AddressTypes/add.ctp delete mode 100644 community_server/src/Template/AddressTypes/edit.ctp delete mode 100644 community_server/src/Template/AddressTypes/index.ctp delete mode 100644 community_server/src/Template/AddressTypes/view.ctp delete mode 100644 community_server/src/Template/AdminErrors/add.ctp delete mode 100644 community_server/src/Template/AdminErrors/edit.ctp delete mode 100644 community_server/src/Template/AdminErrors/index.ctp delete mode 100644 community_server/src/Template/AdminErrors/view.ctp delete mode 100644 community_server/src/Template/AppRequests/get_balance.ctp delete mode 100644 community_server/src/Template/AppRequests/list_transactions.ctp delete mode 100644 community_server/src/Template/BlockchainTypes/add.ctp delete mode 100644 community_server/src/Template/BlockchainTypes/edit.ctp delete mode 100644 community_server/src/Template/BlockchainTypes/index.ctp delete mode 100644 community_server/src/Template/BlockchainTypes/view.ctp delete mode 100644 community_server/src/Template/Cell/empty delete mode 100644 community_server/src/Template/CommunityProfiles/add.ctp delete mode 100644 community_server/src/Template/CommunityProfiles/edit.ctp delete mode 100644 community_server/src/Template/CommunityProfiles/index.ctp delete mode 100644 community_server/src/Template/CommunityProfiles/view.ctp delete mode 100644 community_server/src/Template/Dashboard/error_http_request.ctp delete mode 100644 community_server/src/Template/Dashboard/index.ctp delete mode 100644 community_server/src/Template/Dashboard/server_index.ctp delete mode 100644 community_server/src/Template/Element/Flash/default.ctp delete mode 100644 community_server/src/Template/Element/Flash/error.ctp delete mode 100644 community_server/src/Template/Element/Flash/success.ctp delete mode 100644 community_server/src/Template/Element/centToFloat.ctp delete mode 100644 community_server/src/Template/Element/navi.ctp delete mode 100644 community_server/src/Template/Element/navi_center.ctp delete mode 100644 community_server/src/Template/Element/navi_header.ctp delete mode 100644 community_server/src/Template/Element/navi_notify.ctp delete mode 100644 community_server/src/Template/Element/printEuro.ctp delete mode 100644 community_server/src/Template/Element/printGDT.ctp delete mode 100644 community_server/src/Template/Element/printGradido.ctp delete mode 100644 community_server/src/Template/Element/user_menu.ctp delete mode 100644 community_server/src/Template/ElopageBuys/add.ctp delete mode 100644 community_server/src/Template/ElopageBuys/edit.ctp delete mode 100644 community_server/src/Template/ElopageBuys/index.ctp delete mode 100644 community_server/src/Template/ElopageBuys/statistics.ctp delete mode 100644 community_server/src/Template/ElopageBuys/view.ctp delete mode 100644 community_server/src/Template/Email/html/default.ctp delete mode 100644 community_server/src/Template/Email/text/default.ctp delete mode 100644 community_server/src/Template/Email/text/notification_creation.ctp delete mode 100644 community_server/src/Template/Email/text/notification_transaction_failed.ctp delete mode 100644 community_server/src/Template/Email/text/notification_transfer.ctp delete mode 100644 community_server/src/Template/Error/error400.ctp delete mode 100644 community_server/src/Template/Error/error500.ctp delete mode 100644 community_server/src/Template/Layout/Email/html/default.ctp delete mode 100644 community_server/src/Template/Layout/Email/text/default.ctp delete mode 100644 community_server/src/Template/Layout/ajax.ctp delete mode 100644 community_server/src/Template/Layout/default.ctp delete mode 100644 community_server/src/Template/Layout/error.ctp delete mode 100644 community_server/src/Template/Layout/frontend.ctp delete mode 100644 community_server/src/Template/Layout/rss/default.ctp delete mode 100644 community_server/src/Template/OperatorTypes/add.ctp delete mode 100644 community_server/src/Template/OperatorTypes/edit.ctp delete mode 100644 community_server/src/Template/OperatorTypes/index.ctp delete mode 100644 community_server/src/Template/OperatorTypes/view.ctp delete mode 100644 community_server/src/Template/Operators/add.ctp delete mode 100644 community_server/src/Template/Operators/edit.ctp delete mode 100644 community_server/src/Template/Operators/index.ctp delete mode 100644 community_server/src/Template/Operators/view.ctp delete mode 100644 community_server/src/Template/Pages/cake_home.ctp delete mode 100644 community_server/src/Template/Pages/gradido.ctp delete mode 100644 community_server/src/Template/Pages/home.ctp delete mode 100644 community_server/src/Template/Pages/js.ctp delete mode 100644 community_server/src/Template/Pages/visitor.ctp delete mode 100644 community_server/src/Template/Profile/edit.ctp delete mode 100644 community_server/src/Template/Profile/index.ctp delete mode 100644 community_server/src/Template/Roles/add.ctp delete mode 100644 community_server/src/Template/Roles/edit.ctp delete mode 100644 community_server/src/Template/Roles/index.ctp delete mode 100644 community_server/src/Template/Roles/view.ctp delete mode 100644 community_server/src/Template/ServerUsers/add.ctp delete mode 100644 community_server/src/Template/ServerUsers/edit.ctp delete mode 100644 community_server/src/Template/ServerUsers/index.ctp delete mode 100644 community_server/src/Template/ServerUsers/login.ctp delete mode 100644 community_server/src/Template/ServerUsers/view.ctp delete mode 100644 community_server/src/Template/StateBalances/add.ctp delete mode 100644 community_server/src/Template/StateBalances/edit.ctp delete mode 100644 community_server/src/Template/StateBalances/index.ctp delete mode 100644 community_server/src/Template/StateBalances/overview.ctp delete mode 100644 community_server/src/Template/StateBalances/overview_gdt.ctp delete mode 100644 community_server/src/Template/StateBalances/view.ctp delete mode 100644 community_server/src/Template/StateCreated/add.ctp delete mode 100644 community_server/src/Template/StateCreated/edit.ctp delete mode 100644 community_server/src/Template/StateCreated/index.ctp delete mode 100644 community_server/src/Template/StateCreated/view.ctp delete mode 100644 community_server/src/Template/StateErrors/add.ctp delete mode 100644 community_server/src/Template/StateErrors/edit.ctp delete mode 100644 community_server/src/Template/StateErrors/index.ctp delete mode 100644 community_server/src/Template/StateErrors/show_for_user.ctp delete mode 100644 community_server/src/Template/StateErrors/view.ctp delete mode 100644 community_server/src/Template/StateGroupAddresses/add.ctp delete mode 100644 community_server/src/Template/StateGroupAddresses/edit.ctp delete mode 100644 community_server/src/Template/StateGroupAddresses/index.ctp delete mode 100644 community_server/src/Template/StateGroupAddresses/view.ctp delete mode 100644 community_server/src/Template/StateGroupRelationships/add.ctp delete mode 100644 community_server/src/Template/StateGroupRelationships/edit.ctp delete mode 100644 community_server/src/Template/StateGroupRelationships/index.ctp delete mode 100644 community_server/src/Template/StateGroupRelationships/view.ctp delete mode 100644 community_server/src/Template/StateGroups/add.ctp delete mode 100644 community_server/src/Template/StateGroups/edit.ctp delete mode 100644 community_server/src/Template/StateGroups/index.ctp delete mode 100644 community_server/src/Template/StateGroups/view.ctp delete mode 100644 community_server/src/Template/StateRelationshipTypes/add.ctp delete mode 100644 community_server/src/Template/StateRelationshipTypes/edit.ctp delete mode 100644 community_server/src/Template/StateRelationshipTypes/index.ctp delete mode 100644 community_server/src/Template/StateRelationshipTypes/view.ctp delete mode 100644 community_server/src/Template/StateUserRoles/assign_role.ctp delete mode 100644 community_server/src/Template/StateUserRoles/index.ctp delete mode 100644 community_server/src/Template/StateUserRoles/search.ctp delete mode 100644 community_server/src/Template/StateUserTransactions/add.ctp delete mode 100644 community_server/src/Template/StateUserTransactions/edit.ctp delete mode 100644 community_server/src/Template/StateUserTransactions/index.ctp delete mode 100644 community_server/src/Template/StateUserTransactions/view.ctp delete mode 100644 community_server/src/Template/StateUsers/add.ctp delete mode 100644 community_server/src/Template/StateUsers/edit.ctp delete mode 100644 community_server/src/Template/StateUsers/index.ctp delete mode 100644 community_server/src/Template/StateUsers/list_ident_hashes.ctp delete mode 100644 community_server/src/Template/StateUsers/search.ctp delete mode 100644 community_server/src/Template/StateUsers/view.ctp delete mode 100644 community_server/src/Template/TransactionCreations/add.ctp delete mode 100644 community_server/src/Template/TransactionCreations/create.ctp delete mode 100644 community_server/src/Template/TransactionCreations/create_multi.ctp delete mode 100644 community_server/src/Template/TransactionCreations/edit.ctp delete mode 100644 community_server/src/Template/TransactionCreations/index.ctp delete mode 100644 community_server/src/Template/TransactionCreations/view.ctp delete mode 100644 community_server/src/Template/TransactionGroupAddaddress/add.ctp delete mode 100644 community_server/src/Template/TransactionGroupAddaddress/edit.ctp delete mode 100644 community_server/src/Template/TransactionGroupAddaddress/index.ctp delete mode 100644 community_server/src/Template/TransactionGroupAddaddress/view.ctp delete mode 100644 community_server/src/Template/TransactionGroupAllowtrades/add.ctp delete mode 100644 community_server/src/Template/TransactionGroupAllowtrades/edit.ctp delete mode 100644 community_server/src/Template/TransactionGroupAllowtrades/index.ctp delete mode 100644 community_server/src/Template/TransactionGroupAllowtrades/view.ctp delete mode 100644 community_server/src/Template/TransactionGroupCreates/add.ctp delete mode 100644 community_server/src/Template/TransactionGroupCreates/edit.ctp delete mode 100644 community_server/src/Template/TransactionGroupCreates/index.ctp delete mode 100644 community_server/src/Template/TransactionGroupCreates/view.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/add.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/create.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/create_raw.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/edit.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/index.ctp delete mode 100644 community_server/src/Template/TransactionSendCoins/view.ctp delete mode 100644 community_server/src/Template/TransactionSignatures/add.ctp delete mode 100644 community_server/src/Template/TransactionSignatures/edit.ctp delete mode 100644 community_server/src/Template/TransactionSignatures/index.ctp delete mode 100644 community_server/src/Template/TransactionSignatures/view.ctp delete mode 100644 community_server/src/Template/TransactionTypes/add.ctp delete mode 100644 community_server/src/Template/TransactionTypes/edit.ctp delete mode 100644 community_server/src/Template/TransactionTypes/index.ctp delete mode 100644 community_server/src/Template/TransactionTypes/view.ctp delete mode 100644 community_server/src/Template/Transactions/add.ctp delete mode 100644 community_server/src/Template/Transactions/decode.ctp delete mode 100644 community_server/src/Template/Transactions/edit.ctp delete mode 100644 community_server/src/Template/Transactions/index.ctp delete mode 100644 community_server/src/Template/Transactions/manual_transaction.ctp delete mode 100644 community_server/src/Template/Transactions/send_to_node.ctp delete mode 100644 community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp delete mode 100644 community_server/src/Template/Transactions/view.ctp delete mode 100644 community_server/src/Template/Users/add.ctp delete mode 100644 community_server/src/Template/Users/edit.ctp delete mode 100644 community_server/src/Template/Users/index.ctp delete mode 100644 community_server/src/Template/Users/statistics.ctp delete mode 100644 community_server/src/Template/Users/view.ctp delete mode 100644 community_server/src/View/AjaxView.php delete mode 100644 community_server/src/View/AppView.php delete mode 100644 community_server/src/View/Cell/empty delete mode 100644 community_server/src/View/Helper/empty delete mode 100755 community_server/testJson.sh delete mode 100644 community_server/tests/Fixture/AddressTypesFixture.php delete mode 100644 community_server/tests/Fixture/AdminErrorsFixture.php delete mode 100644 community_server/tests/Fixture/BaseTestFixture.php delete mode 100644 community_server/tests/Fixture/CommunityProfilesFixture.php delete mode 100644 community_server/tests/Fixture/ElopageBuysFixture.php delete mode 100644 community_server/tests/Fixture/OperatorTypesFixture.php delete mode 100644 community_server/tests/Fixture/OperatorsFixture.php delete mode 100644 community_server/tests/Fixture/RolesFixture.php delete mode 100644 community_server/tests/Fixture/ServerUsersFixture.php delete mode 100644 community_server/tests/Fixture/StateBalancesFixture.php delete mode 100644 community_server/tests/Fixture/StateCreatedFixture.php delete mode 100644 community_server/tests/Fixture/StateErrorsFixture.php delete mode 100644 community_server/tests/Fixture/StateGroupAddressesFixture.php delete mode 100644 community_server/tests/Fixture/StateGroupRelationshipsFixture.php delete mode 100644 community_server/tests/Fixture/StateGroupsFixture.php delete mode 100644 community_server/tests/Fixture/StateRelationshipTypesFixture.php delete mode 100644 community_server/tests/Fixture/StateUserTransactionsFixture.php delete mode 100644 community_server/tests/Fixture/StateUsersFixture.php delete mode 100644 community_server/tests/Fixture/TransactionCreationsFixture.php delete mode 100644 community_server/tests/Fixture/TransactionGroupAddaddressFixture.php delete mode 100644 community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php delete mode 100644 community_server/tests/Fixture/TransactionGroupCreatesFixture.php delete mode 100644 community_server/tests/Fixture/TransactionSendCoinsFixture.php delete mode 100644 community_server/tests/Fixture/TransactionSignaturesFixture.php delete mode 100644 community_server/tests/Fixture/TransactionTypesFixture.php delete mode 100644 community_server/tests/Fixture/TransactionsFixture.php delete mode 100644 community_server/tests/Fixture/UsersFixture.php delete mode 100644 community_server/tests/TestCase/ApplicationTest.php delete mode 100644 community_server/tests/TestCase/Controller/AddressTypesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old delete mode 100644 community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php delete mode 100644 community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php delete mode 100644 community_server/tests/TestCase/Controller/DashboardControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/PagesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/ProfilesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/RolesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/StateBalancesControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/StateErrorsControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php delete mode 100644 community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php delete mode 100644 community_server/tests/TestCase/Model/Behavior/empty delete mode 100644 community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/RolesTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Table/StateUsersTableTest.php delete mode 100644 community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php delete mode 100644 community_server/tests/TestCase/View/Helper/empty delete mode 100644 community_server/tests/bootstrap.php delete mode 100644 community_server/tests/data/smallest.png delete mode 100644 community_server/tests/data/verysmall.jpg delete mode 100755 community_server/tests/testApi.sh delete mode 100644 community_server/webroot/.htaccess delete mode 100644 community_server/webroot/css/fonts_local.css delete mode 100644 community_server/webroot/css/grd_styles.css delete mode 100644 community_server/webroot/css/loginServer/style.css delete mode 100644 community_server/webroot/css/main.css delete mode 100644 community_server/webroot/css/materialdesignicons.min.css delete mode 100644 community_server/webroot/css/normalize.css delete mode 100644 community_server/webroot/css/rippleUI/style.css delete mode 100644 community_server/webroot/css/styles.css delete mode 100644 community_server/webroot/favicon.ico delete mode 100644 community_server/webroot/favicon.png delete mode 100644 community_server/webroot/font/cakedingbats-webfont.eot delete mode 100644 community_server/webroot/font/cakedingbats-webfont.svg delete mode 100644 community_server/webroot/font/cakedingbats-webfont.ttf delete mode 100644 community_server/webroot/font/cakedingbats-webfont.woff delete mode 100644 community_server/webroot/font/cakedingbats-webfont.woff2 delete mode 100644 community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.eot delete mode 100644 community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf delete mode 100644 community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff delete mode 100644 community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2 delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Black.ttf delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Bold.ttf delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Light.ttf delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Medium.ttf delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Regular.ttf delete mode 100644 community_server/webroot/fonts/Roboto/Roboto-Thin.ttf delete mode 100644 community_server/webroot/fonts/materialdesignicons-webfont.eot delete mode 100644 community_server/webroot/fonts/materialdesignicons-webfont.svg delete mode 100644 community_server/webroot/fonts/materialdesignicons-webfont.ttf delete mode 100644 community_server/webroot/fonts/materialdesignicons-webfont.woff delete mode 100644 community_server/webroot/fonts/materialdesignicons-webfont.woff2 delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-300.eot delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-300.svg delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-300.ttf delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-300.woff delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-300.woff2 delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-600.eot delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-600.svg delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-600.ttf delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-600.woff delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-600.woff2 delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-700.eot delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-700.svg delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-700.ttf delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-700.woff delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-700.woff2 delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-800.eot delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-800.svg delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-800.ttf delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-800.woff delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-800.woff2 delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-regular.eot delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-regular.svg delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-regular.ttf delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-regular.woff delete mode 100644 community_server/webroot/fonts/open-sans-v18-latin-regular.woff2 delete mode 100644 community_server/webroot/img/50x50.png delete mode 100644 community_server/webroot/img/cake-logo.png delete mode 100644 community_server/webroot/img/cake.icon.png delete mode 100644 community_server/webroot/img/cake.logo.svg delete mode 100644 community_server/webroot/img/cake.power.gif delete mode 100644 community_server/webroot/img/gradido_logo_web.png delete mode 100644 community_server/webroot/img/gradido_logo_web.webp delete mode 100644 community_server/webroot/img/logo_half.png delete mode 100644 community_server/webroot/img/logo_half.webp delete mode 100644 community_server/webroot/img/logo_schrift.png delete mode 100644 community_server/webroot/img/logo_schrift.webp delete mode 100644 community_server/webroot/index.php delete mode 100644 community_server/webroot/js/basic.js delete mode 100644 community_server/webroot/js/core.js delete mode 100644 community_server/webroot/js/ensurePassphrase.js delete mode 100644 community_server/webroot/js/ensurePassphrase.min.js delete mode 100644 community_server/webroot/js/popper.min.js delete mode 100644 community_server/webroot/js/tabs.js delete mode 100644 community_server/webroot/js/time_calculations.js delete mode 100644 community_server/webroot/js/tippy-bundle.umd.min.js delete mode 100644 community_server/webroot/js/userSearch.js delete mode 100644 community_server/webroot/js/userSearch.min.js delete mode 100644 community_server/webroot/js/vendor.addons.js delete mode 100644 community_server/webroot/transaktion-bestaetigen-login.html delete mode 100644 community_server/websrc/gulpfile.js delete mode 100644 community_server/websrc/package.json delete mode 100644 community_server/websrc/src/less/01-layout.less delete mode 100644 community_server/websrc/src/less/02-colors.less delete mode 100644 community_server/websrc/src/less/03-typography.less delete mode 100644 community_server/websrc/src/less/05-screen.less delete mode 100644 community_server/websrc/src/less/06-messages.less delete mode 100644 community_server/websrc/src/less/07-user.less delete mode 100644 community_server/websrc/src/less/08-navi.less delete mode 100644 community_server/websrc/src/less/09-notification.less delete mode 100644 community_server/websrc/src/less/10-center.less delete mode 100644 community_server/websrc/src/less/12-center-form-single.less delete mode 100644 community_server/websrc/src/less/15-facts.less delete mode 100644 community_server/websrc/src/less/20-list.less delete mode 100644 community_server/websrc/src/less/21-tabs.less delete mode 100644 community_server/websrc/src/less/30-form.less delete mode 100644 configs/community_server/app.php delete mode 100644 php-fpm/Dockerfile diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9f34c7f5e..ff372f061 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -106,43 +106,6 @@ jobs: name: docker-database-production_up path: /tmp/database_up.tar - ############################################################################## - # JOB: DOCKER BUILD PRODUCTION COMMUNITY SERVER ############################## - ############################################################################## - build_production_community_server: - name: Docker Build Production - Community Server - runs-on: ubuntu-latest - #needs: [nothing] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}.${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # COMMUNITY SERVER ####################################################### - ########################################################################## - - name: Community Server | Build `production` image - run: | - docker build -t "gradido/community_server:latest" -t "gradido/community_server:production" -t "gradido/community_server:${VERSION}" -t "gradido/community_server:${BUILD_VERSION}" -f ./community_server/Dockerfile ./ - docker save "gradido/community_server" > /tmp/community_server.tar - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: docker-community-server-production - path: /tmp/community_server.tar - ############################################################################## # JOB: DOCKER BUILD PRODUCTION MARIADB ####################################### ############################################################################## @@ -223,7 +186,7 @@ jobs: upload_to_dockerhub: name: Upload to Dockerhub runs-on: ubuntu-latest - needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_community_server, build_production_mariadb, build_production_nginx] + needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_mariadb, build_production_nginx] env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} @@ -257,13 +220,6 @@ jobs: path: /tmp - name: Load Docker Image run: docker load < /tmp/database_up.tar - - name: Download Docker Image (Community Server) - uses: actions/download-artifact@v2 - with: - name: docker-community-server-production - path: /tmp - - name: Load Docker Image - run: docker load < /tmp/community_server.tar - name: Download Docker Image (MariaDB) uses: actions/download-artifact@v2 with: @@ -289,8 +245,6 @@ jobs: run: docker push --all-tags gradido/backend - name: Push database run: docker push --all-tags gradido/database - - name: Push community_server - run: docker push --all-tags gradido/community_server - name: Push MariaDB run: docker push --all-tags gradido/mariadb - name: Push Nginx diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e3a140658..f1fb929d7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -107,32 +107,6 @@ jobs: name: docker-database-test_up path: /tmp/database_up.tar - ############################################################################## - # JOB: DOCKER BUILD TEST COMMUNITY SERVER #################################### - ############################################################################## - build_test_community_server: - name: Docker Build Test - Community Server - runs-on: ubuntu-latest - #needs: [nothing] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # BUILD COMMUNITY SERVER DOCKER IMAGE #################################### - ########################################################################## - - name: community server | Build `test` image - run: | - docker build -t "gradido/community_server:test" -f ./community_server/Dockerfile ./ - docker save "gradido/community_server:test" > /tmp/community_server.tar - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: docker-community-server-test - path: /tmp/community_server.tar - ############################################################################## # JOB: DOCKER BUILD TEST MARIADB ############################################# ############################################################################## @@ -509,73 +483,6 @@ jobs: min_coverage: 38 token: ${{ github.token }} - ############################################################################## - # JOB: UNIT TEST COMMUNITY-SERVER ########################################### - ############################################################################## - unit_test_community_server: - name: Unit tests - Community Server - runs-on: ubuntu-latest - needs: [build_test_community_server] - services: - mariadb: - image: gradido/mariadb:test - env: - MARIADB_ALLOW_EMPTY_PASSWORD: 1 - MARIADB_USER: root - options: --health-cmd="mysqladmin ping" - --health-interval=5s - --health-timeout=5s - --health-retries=3 - steps: - - name: get mariadb container id - run: echo "::set-output name=id::$(docker container ls | grep mariadb | awk '{ print $1 }')" - id: mariadb_container - - name: get automatic created network - run: echo "::set-output name=id::$(docker network ls | grep github_network | awk '{ print $1 }')" - id: network - - name: Start database migration - run: docker run --network ${{ steps.network.outputs.id }} --name=database --env NODE_ENV=production --env DB_HOST=mariadb --env DB_DATABASE=gradido_community_test -d gradido/database:production_up - - name: get database migration container id - run: echo "::set-output name=id::$(docker container ls | grep database | awk '{ print $1 }')" - id: database_container - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # DOWNLOAD DOCKER IMAGE ################################################## - ########################################################################## - - name: Download Docker Image (Community-Server) - uses: actions/download-artifact@v2 - with: - name: docker-community-server-test - path: /tmp - - name: Load Docker Image - run: docker load < /tmp/community_server.tar - - name: check mariadb - run: docker logs ${{ steps.mariadb_container.outputs.id }} - - name: check migration - run: docker logs ${{ steps.database_container.outputs.id }} - ########################################################################## - # UNIT TESTS BACKEND COMMUNITY-SERVER ####################################### - ########################################################################## - - name: community server | Unit tests - run: | - docker run --network ${{ steps.network.outputs.id }} -v ~/coverage:/var/www/cakephp/webroot/coverage gradido/community_server:test - cp -r ~/coverage ./coverage - ######################################################################### - # COVERAGE CHECK BACKEND COMMUNITY-SERVER #################################### - ########################################################################## - - name: backend community | Coverage check - uses: einhornimmond/coverage-check-action@master - with: - report_name: Coverage Backend Community - type: phpunit - result_path: ./coverage/coverage.info - min_coverage: 10 - token: ${{ github.token }} - ########################################################################## # DATABASE MIGRATION TEST UP + RESET ##################################### ########################################################################## 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 - -[![Build Status](https://img.shields.io/travis/cakephp/app/master.svg?style=flat-square)](https://travis-ci.org/cakephp/app) -[![Total Downloads](https://img.shields.io/packagist/dt/cakephp/app.svg?style=flat-square)](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 "" | $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}}
' -]; -/* - -
-
- -
-
- -
-
- - -
- - -
- - */ 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' => '
    {{content}}
', - '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/plugins/empty b/community_server/plugins/empty deleted file mode 100644 index e69de29bb..000000000 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 c739334c8a502ea34a4788a856e998492fd3a9eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 923 zcmZ{i-D(p-6vtOvzXDZI1kr*=1W{yaKD?+~BZg*MqG=nFv=nb-+&xXE-JJ=ulVI=q z5PIh$_z2$l0zQH0J9sPjpQLUm=)j-foH=LCIkRWKUtjzfU|oThp#)ljK0|)}fbKv) zp=;1@=mE5JE(q>|PeJeRgWf*^Z-6J@CGZ1SgFZp`VShUx1Xsad;4N@rAqWUu27UcH z=<~b*Z-R&5ZSVv{ifNx0K$yi^#Lm~c3?XfB5h|99V>8x{Vlz^lkTck2*;p%g927pw z(s5GQ**JA-lrlM$aZW~4Y6eP+ob7~d5vGmvz9Jv}+kfURXHumkW2Yw5k~7<9nxAPy zM|_+I9cvCbcA}MtJ+`?rI;2i_=T)@cr@g4#Ywc{8Iy<7v6Xl(viHspt%hie~uZl{A zDz&io>~XnTE|=OeccO2l&Qs}(4GAZDFqQ)reU@2B?Z)=zZeuf|=h0T9)qdG%HoH-; z_o9dkDdD%xsI=AEist=PR?4MyqaACcKOUjJ -# -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 .= ""; - } - $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 .= ""; - } - $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 .= ""; - } - $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 = ""; - 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 .= ""; - } - $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 @@ - - -
    - Form->create($addressType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($addressType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($addressType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $addressType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $addressType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $addressType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $addressType->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    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 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    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 @@ - - -
    - Form->create($adminError) ?> -
    - - 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'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($adminError) ?> -
    - - 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'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -
    -
    -
    Paginator->sort('id') ?>
    -
    Paginator->sort('state_user_id') ?>
    -
    Paginator->sort('controller') ?>
    -
    Paginator->sort('action') ?>
    -
    Paginator->sort('state') ?>
    -
    Paginator->sort('msg') ?>
    -
    Paginator->sort('details') ?>
    -
    Paginator->sort('created') ?>
    -
    -
    - -
    -
    Number->format($adminError->id) ?>
    -
    has('state_user') ? $this->Html->link($adminError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $adminError->state_user->id]) : '' ?>
    -
    controller) ?>
    -
    action) ?>
    -
    state) ?>
    -
    msg) ?>
    -
    details) ?>
    -
    created) ?>
    -
    - Html->link(__('View'), ['action' => 'view', $adminError->id]) ?> -   - Html->link(__('Edit'), ['action' => 'edit', $adminError->id]) ?> -   - Form->postLink(__('Delete'), ['action' => 'delete', $adminError->id], ['confirm' => __('Are you sure you want to delete # {0}?', $adminError->id)]) ?> -
    -
    - -
    -
    - -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($adminError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $adminError->state_user->id]) : '' ?>
    controller) ?>
    action) ?>
    state) ?>
    msg) ?>
    details) ?>
    Number->format($adminError->id) ?>
    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]); -} -?> \ 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]); - } - } -} - -?> \ 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 @@ - - -
    - Form->create($blockchainType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - echo $this->Form->control('symbol'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($blockchainType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - echo $this->Form->control('symbol'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>Paginator->sort('symbol') ?>
    Number->format($blockchainType->id) ?>name) ?>text) ?>symbol) ?> - Html->link(__('View'), ['action' => 'view', $blockchainType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $blockchainType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $blockchainType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $blockchainType->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    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 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    symbol) ?>
    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 @@ - - -
    - Form->create($communityProfile) ?> -
    - - Form->control('state_user_id'); - echo $this->Form->control('profile_desc'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($communityProfile) ?> -
    - - Form->control('state_user_id'); - echo $this->Form->control('profile_desc'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('profile_desc') ?>
    Number->format($communityProfile->id) ?>Number->format($communityProfile->state_user_id) ?>profile_desc) ?> - Html->link(__('View'), ['action' => 'view', $communityProfile->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $communityProfile->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $communityProfile->id], ['confirm' => __('Are you sure you want to delete # {0}?', $communityProfile->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - -
    profile_desc) ?>
    Number->format($communityProfile->id) ?>
    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')); -?> - -
    - -
    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'] . '!

    ' -); -?> - - ms - -
    -

    Gradido ...

    -
    -
    - account_balance_wallet - Html->link( - __('Kontoübersicht'), - ['controller' => 'StateBalances', 'action' => 'overview'], - ['class' => 'action-button-link'] - );?> -
    -
    - account_balance - Html->link( - __('Überweisung'), - ['controller' => 'TransactionSendCoins', 'action' => 'create'], - ['class' => 'action-button-link'] - ); ?> -
    -
    -
    - - -
    -

    -

    Gradido ...

    -
    -
    - redeem - Html->link( - __('viele schöpfen'), - ['controller' => 'TransactionCreations', 'action' => 'createMulti'], - ['class' => 'action-button-link'] - );?> -
    -
    -
    -
    - Statistik -
    -
    - cached - Html->link( - __('Anmeldungen'), - ['controller' => 'Users', 'action' => 'statistics'], - ['class' => 'info-item-link'] - );?> -
    - -
    - error_outline - Html->link( - __('Fehler') . ' (' . $adminErrorCount . ')', - ['controller' => 'AdminErrors'], ['class' => 'info-item-link']); - ?> -
    - -
    -
    - - -
    -

    Benutzer ...

    -
    -
    - search - Html->link( - __('suchen'), - ['controller' => 'StateUsers', 'action' => 'search'], - ['class' => 'info-item-link'] - ); ?> -
    -
    - how_to_reg - - - -
    -
    - enhanced_encryption - - - -
    -
    -
    -
    -

    Login Server ...

    -
    -
    - groups - - - -
    -
    - servers - - - -
    -
    - topics - - - -
    -
    -
    -
    - hedera_accounts - - - -
    -
    - 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 - Html->link( - __('viele schöpfen'), - ['controller' => 'TransactionCreations', 'action' => 'createMulti'], - ['class' => 'action-button-link'] - );?> -
    -
    -
    -
    - error_outline - 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 @@ - - - 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 @@ - - - \ 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 @@ - - - - \ 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) : ?> - Html->link( - 'announcement' - . 'ss', - ['controller' => 'StateErrors', 'action' => 'ShowForUser'], - ['class' => 'nav-link', 'escape' => false, 'title' => "$errorCount " . __('Fehler')]) ?> - - 0) : ?> - " href="account/checkTransactions"> - verified_user - - () - - - 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'; -} - -?> -Number->format(intval($number) / 100.0, ['precision' => 2]) . ' €';?> - - - 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'; -} - -?> -Number->format(intval($number) / 100.0, ['precision' => 2]) . ' GDT';?> - - - 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 @@ - -Number->format(intval($number) / 10000.0, ['precision' => 2]) . ' GDD';?> - - - 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')); -} -?> -
    - - account_circle -
    - - \ 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 @@ - - -
    - Form->create($elopageBuy) ?> -
    - - 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'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($elopageBuy) ?> -
    - - 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'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('elopage_user_id') ?>Paginator->sort('affiliate_program_id') ?>Paginator->sort('publisher_id') ?>Paginator->sort('order_id') ?>Paginator->sort('product_id') ?>Paginator->sort('product_price') ?>Paginator->sort('payer_email') ?>Paginator->sort('publisher_email') ?>Paginator->sort('payed') ?>Paginator->sort('success_date') ?>Paginator->sort('event') ?>
    Number->format($elopageBuy->id) ?>Number->format($elopageBuy->elopage_user_id) ?>Number->format($elopageBuy->affiliate_program_id) ?>Number->format($elopageBuy->publisher_id) ?>Number->format($elopageBuy->order_id) ?>Number->format($elopageBuy->product_id) ?>Number->format($elopageBuy->product_price) ?>payer_email) ?>publisher_email) ?>payed) ?>success_date) ?>event) ?> - Html->link(__('View'), ['action' => 'view', $elopageBuy->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $elopageBuy->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $elopageBuy->id], ['confirm' => __('Are you sure you want to delete # {0}?', $elopageBuy->id)]) ?> -
    -
    - -

    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 "
    "; -}*/ -?> -
    -
    -
    -
    -
    -
    -
    -

    count()?>

    - - 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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    payer_email) ?>
    publisher_email) ?>
    event) ?>
    Number->format($elopageBuy->id) ?>
    Number->format($elopageBuy->elopage_user_id) ?>
    Number->format($elopageBuy->affiliate_program_id) ?>
    Number->format($elopageBuy->publisher_id) ?>
    Number->format($elopageBuy->order_id) ?>
    Number->format($elopageBuy->product_id) ?>
    Number->format($elopageBuy->product_price) ?>
    success_date) ?>
    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')); -?> first_name ?> last_name ?>, - -element('printGradido', ['number' => $gdd_cent, 'raw' => true])) ?> -Gradido Akademie schreibt: - - - - - - -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(); - -?> first_name ?> last_name ?>, - - - - -element('printGradido', ['number' => $specific_transaction->getAmount(), 'raw' => true]), - $specific_transaction->getReceiverUser()->getEmailWithName()) ?> - -getTargetDate()->format('d.m.Y') ?> - -element('printGradido', ['number' => $specific_transaction->getAmount(), 'raw' => true]), - $specific_transaction->getReceiverUser()->getEmailWithName()) ?> - - - - - -getErrors(); - foreach($errors as $error) { - //echo "\t".json_encode($error); - echo "\n\t".$error[array_keys($error)[0]]."\n"; - } -}?> - - - - - - -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(); -?> , - -element('printGradido', ['number' => $gdd_cent, 'raw' => true]), $senderNamesEmail) ?> - - - - - - - -email ?> - - - -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: - queryString) ?> -

    - -params)) : ?> - SQL Query Params: - params) ?> - -element('auto_table_warning') ?> -end(); -endif; -?> -

    -

    - : - '{$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: - queryString) ?> -

    - -params)) : ?> - SQL Query Params: - params) ?> - - - Error in: - getFile()), $error->getLine()) ?> - -element('auto_table_warning'); - - if (extension_loaded('xdebug')) : - xdebug_print_function_stack(); - endif; - - $this->end(); -endif; -?> -

    -

    - : - -

    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') ?> - - - 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 @@ - - - - - Html->charset() ?> - - - <?= $cakeDescription ?>: - <?= $this->fetch('title') ?> - - Html->meta('icon') ?> - Html->css(['main.css']) ?> - Html->script(['basic']) ?> - fetch('meta') ?> - fetch('css') ?> - fetch('script') ?> - - -
    -
    - -

    fetch('title') ?>

    - Flash->render() ?> - fetch('content') ?> -
    -
    - -
    - 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 @@ - - - - - Html->charset() ?> - - <?= $this->fetch('title') ?> - - Html->meta('icon') ?> - - Html->css('base.css') ?> - Html->css('style.css') ?> - - fetch('meta') ?> - fetch('css') ?> - fetch('script') ?> - - -
    - -
    - Flash->render() ?> - - 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; -?> - - - - Html->charset() ?> - - - <?= $cakeDescription ?>: - <?= $this->fetch('title') ?> - - Html->meta('icon') ?> - Html->css(['main.css']) ?> - Html->script(['basic']) ?> - fetch('meta') ?> - fetch('css') ?> - fetch('script') ?> - - -
    -
    - element('navi_notify'); ?> -
    -
    - element('user_menu'); ?> -
    -
    - menu -
    - - - -
    - fetch('header')): ?> -
    - fetch('header') ?> -
    - -
    - fetch('content') ?> -
    -
    - - -
    - - ms - -
    -
    -

    -

    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 @@ - - -
    - Form->create($operatorType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($operatorType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($operatorType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $operatorType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $operatorType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $operatorType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $operatorType->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    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 @@ - - -
    - Form->create($operator) ?> -
    - - Form->control('username'); - echo $this->Form->control('user_pubkey'); - echo $this->Form->control('operator_type_id'); - echo $this->Form->control('data_base64'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($operator) ?> -
    - - Form->control('username'); - echo $this->Form->control('user_pubkey'); - echo $this->Form->control('operator_type_id'); - echo $this->Form->control('data_base64'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - operator_type->name ?> - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('username') ?>Paginator->sort('user_pubkey') ?>Paginator->sort('operator_type_id') ?>Paginator->sort('data_base64') ?>Paginator->sort('modified') ?>
    Number->format($operator->id) ?>username) ?>user_pubkey)) ?>Html->link(__($operator->operator_type->name), ['controller' => 'OperatorTypes', 'action' => 'view', $operator->operator_type_id]) ?>data_base64) ?>modified) ?> - Html->link(__('View'), ['action' => 'view', $operator->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $operator->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $operator->id], ['confirm' => __('Are you sure you want to delete # {0}?', $operator->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - -
    username) ?>
    user_pubkey)) ?>
    data_base64) ?>
    Number->format($operator->id) ?>
    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'; -?> - - - - Html->charset() ?> - - - <?= $cakeDescription ?> - - - Html->meta('icon') ?> - Html->css('base.css') ?> - Html->css('style.css') ?> - Html->css('home.css') ?> - - - - -
    -
    Html->image('cake.logo.svg') ?>
    -
    -

    Welcome to CakePHP Red Velvet. Build fast. Grow solid.

    -
    -
    - -
    -
    -
    -

    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 ).
    • - -
    • Your version of PHP is too low. You need PHP 5.6.0 or higher to use CakePHP (detected ).
    • - - - -
    • 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 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.
    • - -
    -
    -
    -

    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/.
    • -
    -
    -
    -

    Getting Started

    - -
    -
    - -
    -
    -

    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 dd1525dbe..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', -]); -?> -
    -
    - Form->create($profileForm, ['enctype' => 'multipart/form-data']) ?> - Form->control('first_name', ['label' => __('Vorname'), 'placeholder' => 'Vorname', 'value' => $user['first_name']]) ?> - Form->control('last_name', ['label' => __('Nachname'), 'placeholder' => 'Nachname', 'value' => $user['last_name']]) ?> - Form->control('profile_img', ['type' => 'file', 'accept' => 'image/*', 'label' => __('Profilbild')]) ?> - - -
    - - Form->control('profile_desc', ['label' => __('Beschreibung'), 'rows' => 4, 'placeholder' => 'Beschreibung', 'value' => $communityProfile['profile_desc']]) ?> - Form->button(__('Daten speichern'), ['name' => 'submit', 'class' => 'form-button']) ?> - Form->end() ?> -
    -
    - -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 .= '

    '.$user['first_name'] . ' ' . $user['last_name'] . '

    '; -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); -?> - - ms - -
    -

    - - Meine Daten -

    -
    - -
    - -

    - - 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 @@ - - -
    - Form->create($role) ?> -
    - - Form->control('title'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($role) ?> -
    - - Form->control('title'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('title') ?>
    Number->format($role->id) ?>title) ?> - Html->link(__('View'), ['action' => 'view', $role->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $role->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $role->id], ['confirm' => __('Are you sure you want to delete # {0}?', $role->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    title) ?>

    - - - - - - - - - -
    title) ?>
    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 @@ - - -
    - Form->create($serverUser) ?> -
    - - Form->control('username'); - echo $this->Form->control('password'); - echo $this->Form->control('email'); - echo $this->Form->control('role'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($serverUser) ?> -
    - - 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]); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('username') ?>Paginator->sort('email') ?>Paginator->sort('role') ?>Paginator->sort('activated') ?>Paginator->sort('last_login') ?>Paginator->sort('created') ?>Paginator->sort('modified') ?>
    Number->format($serverUser->id) ?>username) ?>email) ?>role) ?>activated) ?>last_login) ?>created) ?>modified) ?> - Html->link(__('View'), ['action' => 'view', $serverUser->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $serverUser->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $serverUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $serverUser->id)]) ?> -
    -
    - -

    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', -]); -?> -Flash->render() ?> -
    - Form->create() ?> -
    - - Form->control('username') ?> - Form->control('password') ?> -
    - Form->button(__('Login'), ['class' => 'form-button']); ?> - 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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    username) ?>
    password) ?>
    email) ?>
    role) ?>
    Number->format($serverUser->id) ?>
    last_login) ?>
    created) ?>
    modified) ?>
    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 @@ - - -
    - Form->create($stateBalance) ?> - add -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($stateBalance) ?> - edit -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - index - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('modified') ?>Paginator->sort('amount') ?>
    Number->format($stateBalance->id) ?>has('state_user') ? $this->Html->link($stateBalance->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateBalance->state_user->id]) : '' ?>modified) ?>Number->format($stateBalance->amount) ?> - Html->link(__('View'), ['action' => 'view', $stateBalance->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateBalance->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateBalance->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateBalance->id)]) ?> -
    -
    - -

    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): 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'; - } - ?> -
    -
    - Html->image('50x50.png', ['class' => 'profile-img', 'alt' => 'profile image']) ?> -
    - - - - - - - - - - -
    - - redeem - - - - arrow_back - - - arrow_forward - - - minus_circle_multiple - - -
    -
    -
    -
    - 30): ?> - - - - -
    -
    - - nice() ?> - - - -
    -
    element('printGradido', ['number' => $balance]) ?>
    -
    - - - -
    -
    - -
    -
    - - - 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) :?> -
    -

    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - - element('printGDT', ['number' => $entry['amount']*100.0]); ?> - - element('printEuro', ['number' => $entry['amount']*100.0]); ?> - element('printEuro', ['number' => $entry['amount2']*100.0]) ?> - -
    -
    - Number->format($entry['factor']) ?> - x - Number->format($entry['factor2']) ?> - -
    -
    element('printGDT', ['number' => $entry['gdt']*100.0]) ?>
    -
    - -
    -
    - - 0) : ?> -
    -

    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    - - -
    -
    - - element('printGDT', ['number' => $gdtEntry['amount']*100.0]); ?> - - element('printEuro', ['number' => $gdtEntry['amount']*100.0]); ?> - element('printEuro', ['number' => $gdtEntry['amount2']*100.0]) ?> - -
    -
    - Number->format($gdtEntry['factor']) ?> - x - Number->format($gdtEntry['factor2']) ?> - -
    -
    element('printGDT', ['number' => $gdtEntry['gdt'] * 100.0]) ?>
    -
    - -
    -
    - -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 @@ - - -
    -

    id) ?>

    - view - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($stateBalance->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateBalance->state_user->id]) : '' ?>
    Number->format($stateBalance->id) ?>
    Number->format($stateBalance->amount) ?>
    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 @@ - - -
    - Form->create($stateCreated) ?> -
    - - 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'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($stateCreated) ?> -
    - - 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'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('month') ?>Paginator->sort('year') ?>Paginator->sort('state_user_id') ?>Paginator->sort('created') ?>Paginator->sort('short_ident_hash') ?>
    Number->format($stateCreated->id) ?>has('transaction') ? $this->Html->link($stateCreated->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateCreated->transaction->id]) : '' ?>Number->format($stateCreated->month) ?>Number->format($stateCreated->year) ?>has('state_user') ? $this->Html->link($stateCreated->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateCreated->state_user->id]) : '' ?>created) ?>Number->format($stateCreated->short_ident_hash) ?> - Html->link(__('View'), ['action' => 'view', $stateCreated->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateCreated->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateCreated->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateCreated->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($stateCreated->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateCreated->transaction->id]) : '' ?>
    has('state_user') ? $this->Html->link($stateCreated->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateCreated->state_user->id]) : '' ?>
    Number->format($stateCreated->id) ?>
    Number->format($stateCreated->month) ?>
    Number->format($stateCreated->year) ?>
    Number->format($stateCreated->short_ident_hash) ?>
    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 @@ - - -
    - Form->create($stateError) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('message_json'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($stateError) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('message_json'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('transaction_type_id') ?>Paginator->sort('created') ?>
    Number->format($stateError->id) ?>has('state_user') ? $this->Html->link($stateError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateError->state_user->id]) : '' ?>has('transaction_type') ? $this->Html->link($stateError->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateError->transaction_type->id]) : '' ?>created) ?> - Html->link(__('View'), ['action' => 'view', $stateError->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateError->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateError->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateError->id)]) ?> -
    -
    - -

    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

    -
    -
    -
    Transaktion Typ
    -
    Datum
    -
    Fehler
    -
    Aktionen
    -
    - 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; - } - ?> -
    -
    name ?>
    -
    created ?>
    -
    -
    - 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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($stateError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateError->state_user->id]) : '' ?>
    has('transaction_type') ? $this->Html->link($stateError->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateError->transaction_type->id]) : '' ?>
    Number->format($stateError->id) ?>
    created) ?>
    -
    -

    - 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 @@ - - -
    - Form->create($stateGroupAddress) ?> -
    - - Form->control('group_id'); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($stateGroupAddress) ?> -
    - - Form->control('group_id'); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('group_id') ?>Paginator->sort('address_type_id') ?>
    Number->format($stateGroupAddress->id) ?>Number->format($stateGroupAddress->group_id) ?>has('address_type') ? $this->Html->link($stateGroupAddress->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $stateGroupAddress->address_type->id]) : '' ?>public_key)) ?> - - Html->link(__('View'), ['action' => 'view', $stateGroupAddress->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateGroupAddress->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateGroupAddress->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroupAddress->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - -
    has('address_type') ? $this->Html->link($stateGroupAddress->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $stateGroupAddress->address_type->id]) : '' ?>
    Number->format($stateGroupAddress->id) ?>
    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 @@ - - -
    - Form->create($stateGroupRelationship) ?> -
    - - Form->control('state_group1_id'); - echo $this->Form->control('state_group2_id'); - echo $this->Form->control('state_relationship_id'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($stateGroupRelationship) ?> -
    - - Form->control('state_group1_id'); - echo $this->Form->control('state_group2_id'); - echo $this->Form->control('state_relationship_id'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_group1_id') ?>Paginator->sort('state_group2_id') ?>Paginator->sort('state_relationship_id') ?>
    Number->format($stateGroupRelationship->id) ?>Number->format($stateGroupRelationship->state_group1_id) ?>Number->format($stateGroupRelationship->state_group2_id) ?>Number->format($stateGroupRelationship->state_relationship_id) ?> - Html->link(__('View'), ['action' => 'view', $stateGroupRelationship->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateGroupRelationship->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateGroupRelationship->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroupRelationship->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    Number->format($stateGroupRelationship->id) ?>
    Number->format($stateGroupRelationship->state_group1_id) ?>
    Number->format($stateGroupRelationship->state_group2_id) ?>
    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 @@ - - -
    - Form->create($stateGroup) ?> -
    - - Form->control('name'); - echo $this->Form->control('user_count'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($stateGroup) ?> -
    - - Form->control('name'); - echo $this->Form->control('user_count'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('user_count') ?>
    Number->format($stateGroup->id) ?>name) ?>Number->format($stateGroup->user_count) ?> - Html->link(__('View'), ['action' => 'view', $stateGroup->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateGroup->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateGroup->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroup->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    Number->format($stateGroup->id) ?>
    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 @@ - - -
    - Form->create($stateRelationshipType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($stateRelationshipType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($stateRelationshipType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $stateRelationshipType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateRelationshipType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateRelationshipType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateRelationshipType->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    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', -]); -?> -Html->css([ - 'loginServer/style.css', - 'rippleUI/style.css', - 'materialdesignicons.min.css' -]) ?> - -
    -

    Assign Role

    -
    - Form->create($assignRoleForm, []) ?> -
    User:  first_name." ".$stateUser->last_name ?>
    -
    Select Role:
    Form->select('role_id', $roles, ['label' => __('Role'), 'class' => 'form-control', 'id' => 'inlineFormInputGroup', 'placeholder' => __('Role'), "multiple" => "multiple", "value" => $role_ids]) ?>
    - Form->button(' ' . __('Assign Role'), ['class' => 'form-button']) ?> - Form->hidden('public_hex', ['id' => 'input-order-row', 'value' => $public_hex]) ?> -
    -
    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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('first_name') ?> - Paginator->sort('last_name') ?> - Paginator->sort('username') ?> - Paginator->sort('email') ?> - Paginator->sort('disabled') ?> -
    Number->format($stateUser->id) ?>first_name ?>last_name ?>username ?>email ?>disabled ?> - Html->link(__('View'), ['action' => 'view', $stateUser->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateUser->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUser->id)]) ?> -
    -
    - -

    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', -]); -?> -
    -

    Benutzer suchen

    -
    - Form->create($searchForm, []) ?> - Form->control('search', ['label' => __('Suchbegriff'), 'class' => 'form-control', 'id' => 'inlineFormInputGroup', 'placeholder' => __('Vorname/Nachname/E-Mail')]) ?> - Form->button('search ' . __('Suchen'), ['class' => 'form-button']) ?> - Form->hidden('order_row', ['id' => 'input-order-row']) ?> -
    -
    -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('first_name') ?>Paginator->sort('last_name') ?>Paginator->sort('email') ?>
    - 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 @@ - - -
    - Form->create($stateUserTransaction) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($stateUserTransaction) ?> -
    - - Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('transaction_type_id') ?>
    Number->format($stateUserTransaction->id) ?>has('state_user') ? $this->Html->link($stateUserTransaction->state_user->email, ['controller' => 'StateUsers', 'action' => 'view', $stateUserTransaction->state_user->id]) : '' ?>has('transaction') ? $this->Html->link($stateUserTransaction->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateUserTransaction->transaction->id]) : '' ?>has('transaction_type') ? $this->Html->link($stateUserTransaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateUserTransaction->transaction_type->id]) : '' ?> - Html->link(__('View'), ['action' => 'view', $stateUserTransaction->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateUserTransaction->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateUserTransaction->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUserTransaction->id)]) ?> -
    -
    -
      - Paginator->first('<< ' . __('first')) ?> - Paginator->prev('< ' . __('previous')) ?> - Paginator->numbers() ?> - Paginator->next(__('next') . ' >') ?> - Paginator->last(__('last') . ' >>') ?> -
    -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('state_user') ? $this->Html->link($stateUserTransaction->state_user->email, ['controller' => 'StateUsers', 'action' => 'view', $stateUserTransaction->state_user->id]) : '' ?>
    has('transaction') ? $this->Html->link($stateUserTransaction->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateUserTransaction->transaction->id]) : '' ?>
    has('transaction_type') ? $this->Html->link($stateUserTransaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateUserTransaction->transaction_type->id]) : '' ?>
    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 @@ - - -
    - Form->create($stateUser) ?> -
    - - Form->control('index_id'); - echo $this->Form->control('state_group_id', ['options' => $stateGroups]); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($stateUser) ?> -
    - - Form->control('disabled'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('first_name') ?> - Paginator->sort('last_name') ?> - Paginator->sort('username') ?> - Paginator->sort('email') ?> - Paginator->sort('disabled') ?> -
    Number->format($stateUser->id) ?>first_name ?>last_name ?>username ?>email ?>disabled ?> - Html->link(__('View'), ['action' => 'view', $stateUser->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $stateUser->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $stateUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUser->id)]) ?> -
    -
    - -

    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 namelast nameemailidentHashPublic key hex -
    first_name ?>last_name ?>email ?>identHash ?>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') -]; - -?> -Html->css([ - 'loginServer/style.css', - 'rippleUI/style.css', - 'materialdesignicons.min.css' -]) ?> - -
    -

    Benutzer suchen

    -
    - Form->create($searchForm, []) ?> - Form->control('search', ['label' => __('Suchbegriff'), 'class' => 'form-control', 'id' => 'inlineFormInputGroup', 'placeholder' => __('Vorname/Nachname/E-Mail'), 'required' => false]) ?> - Form->control('account_state', ['label' => __('Konto Status'), 'class' => 'form-control', 'type' => 'select', 'options' => $stateOptions]) ?> - Form->button('search ' . __('Suchen'), ['class' => 'form-button']) ?> - Form->hidden('order_row', ['id' => 'input-order-row']) ?> -
    -
    -
    - -
    - - -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 @@ - - -
    -

    first_name) ?> last_name) ?> <email) ?>>

    - Konto-Adresse: 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 @@ - - -
    - Form->create($transactionCreation) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - 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')); -?> -
    - - Form->create($creationForm) ?> -
    - Form->control('memo'); ?> - Form->control('amount'); ?> - Form->control('receiver', ['options' => $address_options]); ?> - -
    - Form->button(__('Transaktion(en) abschließen'), ['name' => 'next', 'class' => 'grd-form-bn grd-form-bn-succeed grd_clickable grd-width-200']) ?> - Form->button(__('Weitere Transaktion erstellen'), ['name' => 'add', 'class' => 'grd-form-bn grd_clickable grd-width-200']) ?> - 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; - -?> -
    -

    Schöpfen

    -
    - Form->create($creationForm) ?> - 0) : ?> -
    - -
    -
    - Form->control('searchText', ['label' => __('Suche'), 'placeholder' => 'Email/Name']); ?> - Form->button(__('Suchen'), ['name' => 'searchButton', 'class' => 'form-button']) ?> -
    -
    - Form->control('memo', ['label' => __('Memo'), 'placeholder' => 'Memo']); ?> - Form->control('amount', ['label' => __('Betrag in GDD'), 'required' => false]); ?> - day(1)->subMonth(1); - ?> - -
    -
    - - -
    -
    - 30000000) { - //$disable = 'disabled'; - } - ?> -
    - - Form->hidden('user_pending[' . $possibleReceiver['id'] . ']', ['value' => $possibleReceiver['pending']] ) ?> - -
    -
    - Form->checkbox('user[' .$possibleReceiver['id'] . ']', ['value' => $possibleReceiver['id'], 'hiddenField' => false, $disable]); ?> -
    -
    - - - - - - - <> - - -
    -
    - Form->text('user_amount[' . $possibleReceiver['id'] . ']', ['placeholder' => __('Für benutzerdefinierten Betrag'), 'class' => 'user_amount', 'type' => 'number', 'step' => '0.01', $disable]); ?> GDD -
    -
    - Form->date('user_target_date[' . $possibleReceiver['id'] . ']', ['value' => $firstDayLastMonth]) ?> -
    -
    -
    - - - Bereits als Transaktion angelegt: element('printGradido', ['number' => $possibleReceiver['pending']]);?> - - - - - In diesen und den letzten 2 Monaten bereits geschöpft (alte Berechnung): element('printGradido', ['number' => $possibleReceiver['amount']]);?> - - - 0) : ?> - - Im letzten Monat geschöpft (neue Berechnung): element('printGradido', ['number' => $possibleReceiver['amount2']]) ?> - - -
    -
    - - -
    - $limit) : ?> -

    Benutzer insgesamt

    -

    Seiten: - 0) echo ', '; - if($i != $page) { - echo $this->Html->link($i, ['action' => 'create_multi', $i]); - } else { - echo $i; - } - } - ?> -

    - -
    -
    -
    - Form->button(__('Transaktion(en) abschließen'), ['name' => 'next', 'class' => 'form-button' ]) ?> - Form->button(__('Weitere Transaktion erstellen'), ['name' => 'add', 'class' => 'form-button']) ?> -
    -
    - Form->end() ?> -
    -
    -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 @@ - - -
    - Form->create($transactionCreation) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_user_id', ['options' => $stateUsers]); - echo $this->Form->control('amount'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('target_date') ?>Paginator->sort('received') ?>Paginator->sort('amount') ?>
    Number->format($transactionCreation->id) ?>has('transaction') ? $this->Html->link($transactionCreation->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionCreation->transaction->id]) : '' ?>has('state_user') ? $this->Html->link($transactionCreation->state_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionCreation->state_user->id]) : '' ?>target_date) ?>transaction->received) ?>element('printGradido', ['number' => $transactionCreation->amount]) ?>ident_hash) ?> - Html->link(__('View'), ['action' => 'view', $transactionCreation->id]) ?> -
    -
    - -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionCreation->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionCreation->transaction->id]) : '' ?>
    has('state_user') ? $this->Html->link($transactionCreation->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $transactionCreation->state_user->id]) : '' ?>
    Number->format($transactionCreation->id) ?>
    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 @@ - - -
    - Form->create($transactionGroupAddaddres) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($transactionGroupAddaddres) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('address_type_id', ['options' => $addressTypes]); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('address_type_id') ?>
    Number->format($transactionGroupAddaddres->id) ?>has('transaction') ? $this->Html->link($transactionGroupAddaddres->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAddaddres->transaction->id]) : '' ?>has('address_type') ? $this->Html->link($transactionGroupAddaddres->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $transactionGroupAddaddres->address_type->id]) : '' ?>public_key)) ?> - - Html->link(__('View'), ['action' => 'view', $transactionGroupAddaddres->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionGroupAddaddres->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupAddaddres->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupAddaddres->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionGroupAddaddres->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAddaddres->transaction->id]) : '' ?>
    has('address_type') ? $this->Html->link($transactionGroupAddaddres->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $transactionGroupAddaddres->address_type->id]) : '' ?>
    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 @@ - - -
    - Form->create($transactionGroupAllowtrade) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('group_id'); - echo $this->Form->control('allow'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($transactionGroupAllowtrade) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('group_id'); - echo $this->Form->control('allow'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('group_id') ?>Paginator->sort('allow') ?>
    Number->format($transactionGroupAllowtrade->id) ?>has('transaction') ? $this->Html->link($transactionGroupAllowtrade->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAllowtrade->transaction->id]) : '' ?>Number->format($transactionGroupAllowtrade->group_id) ?>allow) ?> - Html->link(__('View'), ['action' => 'view', $transactionGroupAllowtrade->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionGroupAllowtrade->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupAllowtrade->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupAllowtrade->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionGroupAllowtrade->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAllowtrade->transaction->id]) : '' ?>
    Number->format($transactionGroupAllowtrade->id) ?>
    Number->format($transactionGroupAllowtrade->group_id) ?>
    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 @@ - - -
    - Form->create($transactionGroupCreate) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('name'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($transactionGroupCreate) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - echo $this->Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('name'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('state_group_id') ?>Paginator->sort('name') ?>
    Number->format($transactionGroupCreate->id) ?>has('transaction') ? $this->Html->link($transactionGroupCreate->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupCreate->transaction->id]) : '' ?>has('state_group') ? $this->Html->link($transactionGroupCreate->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transactionGroupCreate->state_group->id]) : '' ?>name) ?> - Html->link(__('View'), ['action' => 'view', $transactionGroupCreate->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionGroupCreate->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupCreate->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupCreate->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionGroupCreate->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupCreate->transaction->id]) : '' ?>
    has('state_group') ? $this->Html->link($transactionGroupCreate->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transactionGroupCreate->state_group->id]) : '' ?>
    name) ?>
    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 @@ - - -
    - Form->create($transactionSendCoin) ?> -
    - - 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'); - ?> -
    - Form->button(__('Submit')) ?> - 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', -]); -?> -
    -

    Überweisen

    -
    - Form->create($transferForm) ?> - Form->control('email', ['label' => __('Empfänger'), 'placeholder' => 'E-Mail']) ?> - Form->control('group', ['label' => __('Community Alias'), 'options' => $groups, 'default' => $user['group_alias']]) ?> - Form->control('memo', ['label' => __('Verwendungszweck'), 'rows' => 3]) ?> - Form->control('amount', ['label' => __('Betrag in GDD')]) ?> - Form->button(__('Transaktion abschließen'), ['name' => 'next', 'class' => 'form-button']) ?> - - Form->end() ?> -
    -
    - -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', -]); -?> - -
    -
    -
    -

    Überweisen

    -
    -
    -
    -
    - Form->create($transferRawForm) ?> - Form->control('sender_privkey_hex', ['label' => __('Sender Private Key')]) ?> - Form->control('sender_pubkey_hex', ['label' => __('Sender Public Key')]) ?> - Form->control('receiver_pubkey_hex', ['label' => __('Empfänger Public Key')]) ?> - Form->control('memo', ['label' => __('Verwendungszweck'), 'rows' => 3]) ?> - Form->control('amount', ['label' => __('Betrag in GDD')]) ?> - Form->button(__('Transaktion abschließen'), ['name' => 'next', 'class' => 'btn btn-sm btn-primary']) ?> - Form->end() ?> -
    -
    -
    -
    -
    -
    -
    - -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 @@ - - -
    - Form->create($transactionSendCoin) ?> -
    - - 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'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>Paginator->sort('state_user_id') ?>Paginator->sort('receiver_user_id') ?>Paginator->sort('amount') ?>Paginator->sort('sender_final_balance') ?>
    Number->format($transactionSendCoin->id) ?>has('transaction') ? $this->Html->link($transactionSendCoin->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSendCoin->transaction->id]) : '' ?>has('state_user') ? $this->Html->link($transactionSendCoin->state_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->state_user->id]) : '' ?>has('receiver_user') ? $this->Html->link($transactionSendCoin->receiver_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->receiver_user->id]) : ''?>element('printGradido', ['number' => $transactionSendCoin->amount]) ?>Number->format($transactionSendCoin->sender_final_balance) ?> - Html->link(__('View'), ['action' => 'view', $transactionSendCoin->id]) ?> -
    -
    - -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionSendCoin->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSendCoin->transaction->id]) : '' ?>
    has('state_user') ? $this->Html->link($transactionSendCoin->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->state_user->id]) : '' ?>
    Number->format($transactionSendCoin->id) ?>
    Number->format($transactionSendCoin->amount) ?>
    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 @@ - - -
    - Form->create($transactionSignature) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($transactionSignature) ?> -
    - - Form->control('transaction_id', ['options' => $transactions]); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('transaction_id') ?>
    Number->format($transactionSignature->id) ?>has('transaction') ? $this->Html->link($transactionSignature->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSignature->transaction->id]) : '' ?> - Html->link(__('View'), ['action' => 'view', $transactionSignature->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionSignature->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionSignature->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionSignature->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    id) ?>

    - - - - - - - - - -
    has('transaction') ? $this->Html->link($transactionSignature->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSignature->transaction->id]) : '' ?>
    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 @@ - - -
    - Form->create($transactionType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($transactionType) ?> -
    - - Form->control('name'); - echo $this->Form->control('text'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('text') ?>
    Number->format($transactionType->id) ?>name) ?>text) ?> - Html->link(__('View'), ['action' => 'view', $transactionType->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $transactionType->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $transactionType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionType->id)]) ?> -
    -
    - -

    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 @@ - - -
    -

    name) ?>

    - - - - - - - - - - - - - -
    name) ?>
    text) ?>
    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 @@ - - -
    - Form->create($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]); - ?> -
    - Form->button(__('Submit')) ?> - 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) : ?> -
    -
      - -
    • - -
    • - -
    -
    - - -Form->create() ?> -Form->control('base64', ['type'=> 'textarea', 'rows' => '5', 'cols' => 40]) ?> -Form->submit(); ?> -Form->end() ?> - - -getTransactionBody(); -?> - - - getMemo() ?> -
    TypegetTransactionTypeName() ?>
    Memo
    - - 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 @@ - - -
    - Form->create($transaction) ?> -
    - - Form->control('state_group_id', ['options' => $stateGroups]); - echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]); - echo $this->Form->control('received'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -
    -
    -
    Paginator->sort('id') ?>
    -
    Paginator->sort('memo') ?>
    -
    Paginator->sort('transaction_type_id') ?>
    -
    Paginator->sort('received') ?>
    -
    - -
    -
    Number->format($transaction->id) ?>
    -
    memo) ?>
    -
    has('transaction_type') ? $this->Html->link(__($transaction->transaction_type->name), ['controller' => 'TransactionTypes', 'action' => 'view', $transaction->transaction_type->id]) : '' ?>
    -
    received) ?>
    -
    - -
    -
    - -

    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) : ?> -
    -
      - -
    • - -
    • - -
    -
    - - -
    -

    -
    - Form->create() ?> - Form->control('type', ['type' => 'hidden', 'value' => 'creation']) ?> - Form->control('target_public_key', ['type'=> 'text']) ?> - Form->control('target_date', ['type'=> 'text', 'placeholder' => 'yyyy-mm-dd hh:ii:ss', 'default' => $now->format('Y-m-d H:i:s')]) ?> - Form->control('amount', ['type'=> 'number']) ?> - Form->control('memo', ['type'=> 'textarea', 'rows' => '8', 'cols' => 40]) ?> - Form->control('signer_public_key', ['type' => 'text']) ?> - Form->control('signer_private_key', ['type'=> 'text']) ?> - Form->submit(); ?> - Form->end() ?> -
    -
    -
    -

    -
    - Form->create() ?> - Form->control('type', ['type' => 'hidden', 'value' => 'transfer']) ?> - Form->control('sender_public_key', ['type'=> 'text']) ?> - Form->control('receiver_public_key', ['type'=> 'text']) ?> - Form->control('amount', ['type'=> 'number']) ?> - Form->control('memo', ['type'=> 'textarea', 'rows' => '8', 'cols' => 40]) ?> - Form->control('signer_public_key', ['type' => 'text']) ?> - Form->control('signer_private_key', ['type'=> 'text']) ?> - Form->submit(); ?> - Form->end() ?> -
    -
    - -
    -
      - $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 - -

    -
      - $id) : ?> -
    • - : - - - Wird verarbeitet - - in Warteschlange - - - -
    • -
    -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:

    -

    state_user_transaction count:

    -

    Missing count:

    -

    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: with error: getErrors()) ?>
    • - - -
    • Succeed:
    • -
    - - - Form->create() ?> - Form->button(__('Synchronize')) ?> - 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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - -
    has('state_group') ? $this->Html->link($transaction->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transaction->state_group->id]) : '' ?>
    has('transaction_type') ? $this->Html->link($transaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $transaction->transaction_type->id]) : '' ?>
    Number->format($transaction->id) ?>
    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 @@ - - -
    - Form->create($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'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    - Form->create($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'); - ?> -
    - Form->button(__('Submit')) ?> - 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 @@ - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Paginator->sort('id') ?>Paginator->sort('email') ?>Paginator->sort('first_name') ?>Paginator->sort('last_name') ?>Paginator->sort('password') ?>Paginator->sort('created') ?>Paginator->sort('email_checked') ?>Paginator->sort('language') ?>
    Number->format($user->id) ?>email) ?>first_name) ?>last_name) ?>Number->format($user->password) ?>created) ?>email_checked) ?>language) ?> - Html->link(__('View'), ['action' => 'view', $user->id]) ?> - Html->link(__('Edit'), ['action' => 'edit', $user->id]) ?> - Form->postLink(__('Delete'), ['action' => 'delete', $user->id], ['confirm' => __('Are you sure you want to delete # {0}?', $user->id)]) ?> -
    -
    - -

    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 -
    -

    count()?>

    -
     
    - -   - -
    -
    -
    - group_add -
    -

    count() ?>

    -
     
    - - - arrow_drop_down - 0) : ?> - arrow_drop_up - - % - -
    -
    -
    -

    -
    -
    -
    -
    -
    -
    - -
    -
    first_name . ' ' . $user->last_name ?>
    -
    email ?>
    -
    created ?>
    -
    - - toArray()); ?> -
    -
    -
    -

    -
    -
    -
    -
    -
    -
    - $yearEntrys) : ?> - $monthEntrys): ?> -
    -
    -
    -
    -
    - - -
    -
    -Html->script(['core', 'vendor.addons']); ?> -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 @@ - - -
    -

    id) ?>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    email) ?>
    first_name) ?>
    last_name) ?>
    language) ?>
    Number->format($user->id) ?>
    Number->format($user->password) ?>
    created) ?>
    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/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 @@ -9Q7kcv6UAQ@H$MqV!6EkIEQ MPgg&ebxsLQ07X&@0{{R3 diff --git a/community_server/tests/data/verysmall.jpg b/community_server/tests/data/verysmall.jpg deleted file mode 100644 index 7c0373968..000000000 --- a/community_server/tests/data/verysmall.jpg +++ /dev/null @@ -1 +0,0 @@ -FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 48 00 48 00 00 FF DB 00 43 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF C2 00 0B 08 00 01 00 01 01 01 11 00 FF C4 00 14 10 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF DA 00 08 01 01 00 01 3F 10 \ No newline at end of file diff --git a/community_server/tests/testApi.sh b/community_server/tests/testApi.sh deleted file mode 100755 index 9476dc7da..000000000 --- a/community_server/tests/testApi.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -cd .. -sudo -u www-data ./vendor/bin/phpunit --testdox tests/TestCase/Controller/StateBalancesControllerTest -cd tests diff --git a/community_server/webroot/.htaccess b/community_server/webroot/.htaccess deleted file mode 100644 index f5f2d631c..000000000 --- a/community_server/webroot/.htaccess +++ /dev/null @@ -1,5 +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 5b44f2027a43f47a77304c87106fabac76ed17bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5694 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 diff --git a/community_server/webroot/favicon.png b/community_server/webroot/favicon.png deleted file mode 100644 index 5c437973ef3767f4738ee7c839d6830a3b60175d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7955 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 JPDHLkV1ncyf#m=I diff --git a/community_server/webroot/font/cakedingbats-webfont.eot b/community_server/webroot/font/cakedingbats-webfont.eot deleted file mode 100644 index e8605d92685dc69e3555a2d46c934332ade64789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75538 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 J{3OkB{|TIQ9Sr~g 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 13d54454e71f4ed2ca3ad46bf8910b77acff1b24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75412 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

    ~D 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 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 3e035411cbc618924a327d6b9df6a44075eefbf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220322 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Ņ?&8$|`-a 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 cb+522VP<)>Lzvp}YkAaoF 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 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 5f10918f0d4338b8dc56adf59299929890920fa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130986 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 BibMba 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 34df5fe02a72776816b9e51657f840067aa4c1b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67204 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

    )qPw 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

    ~M8)?dE#I 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 Xk2aT?%S{K<(OhA!BxPw6dg^}wc$YKS 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 d3f01ad245b628f386ac95786f53167038720eb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170760 zcmbTf2V4|M^FQ3(GqXz)mW-mX3jzidl%(jH1DLa5R?HD|j%Uv4%sFS5)idXuMZ~Ot zIe^*IQ(*S}_6$q7=bq>H|Gap$HPh46T~%GF!|oAE2yw!PNc44U)vmL@hH(;M#ac*da7I&s5>=u3|i|0E=MI-W;$kMGg1)U_szm*NlaY5U4{gjmn~6)cBYPg7b_pDCY`JukuM zJmN+g5h>@nJ-Q>TJkj7@5Vx{pctWHVQV5##RC>;CY}QHh_za!d`Lef)G6#Tl1B1YAT)MJ}SFw>CT zz&=ti=?$4o5Lb{m@id8(W|F3$!-k1uf}|zwgkz+GrVeQ(%po%bGifOHLch2d8QCUy zl5t`K63a441R$7gCEdjLWR{Rl>a$*CHY-lLpnRIJjSR!PEu|Bro5r2A&vz6v>WE)0_q`D@Y4*KB+2B#`R1xP_iX8q%%a%%8{w!A;@{=F_zI{BAF|?5=YQmOB@VcWTXM7 z9sIXO!0!$=9M5oEF^kQk&Dkb^+R<5^*CCi?tHYNBiebhU(3hdYrI zv^&WJtI}kGrW7fx`H3;0823<8MLQexUNFB9=VC0Tkx4=uG63%yGdqE6_d(*8|CTApv8TiLtIk`dZB)j@sHJK>7lGfZvenLoaWU zNt%_!PdZE@HPuj74m>>t-h%q=Fi!7DUrj&wl~S;amhcU&i7R}Nk2Ic?(G({$BzF=c z4J7?x-#w+JWU9vA{8GGRJ|>k%+Y8WkHH>8i;wEha4bUS^EwmkmK33q_MqI-V#C5QN z4WyZPgZK$MQFjIUSw&ni#?jguWQZo2w9zz#{S_x=#J!|CWZO@B2xD=PRMmbX6E!PH zd&v?0v@)q9ZNj(~h8O1AmSPCXUB7q)0aa z2>x#I4?^HK`g1`1S*GzM{e%UC(p1uu-X)PVi`1aINL`^Si5F^KFbC32yPLFT<49lDn>0ZiUhp+xLJVmQKh|CIJMq&zC3CFyKpsPJ{RQK; zl*CHe#80e1N{FX0HbY4*@D(DZk*>m5Qp&0rbiWXMwvH@@JUc@lqcpcjYfT#XT#R>T zkxh~aS_Y9t@U;4Zp`@i8Epf;t71LH)}&?B9^rQPoYvIe0U0R5nq#H z+I}iXfuxw`2C2a1VHF7b4I}N?FZj`4WE!BZSb{_W8UxCS0Se~VA%Gx21;8JG#$q|d zxrS!5*p&$2&0Cy~>v`~}O^IHNCXw)!ap1K&;ugo%#JeO;qa|^|5!`nLehk0rK!%C; zaKC{>3ul4(dkaZ5VJp!H=W);5gyf4&k2Hn}X|Eu>E-GUOiGpe2B7MfZN0i{=pMIC{El?>S*?oIBiGNT}o^;l~6Vs z@H;7|*`(lbF#_eU(8fvBaRY25dW{}5H34mph@d%({?HB}PE!uCE(y;Xpg&GGco79s z*9z@I?j<1KU_cn4HlPk51W*@HQ%E9n5D(@HkI-)=bEdc(e!L>=x-{&pF8pvXa5ebn zp$c8q#D2iL%w|T(6k#>#4Ii=sKInH*YpxAEnFE(0f5rhiT9@l7pf;cmAOyh6YD&Ff z^9uok(BEC)dn88eN#==@fLp`&?LsW*gP2~HROW5b2e99{;B71E#5~Pwq2D~`=?n-3 zv;Z^$gaDM>CkH>^u}}fTQ&!HLrNmXvM-pOE73kIi*h(Gv@MVA{fK{Zj_y@{X;2Jpz zp4SkPNq6|0Rzf23naEBDUZBOv$r&uJvz# z+)LznS3Y1Z%}03d1-uuqJ2&Uzc~^em`Bpwq@-3cI{Wsuw7Uw4)Kpxw;Jb+gNR_5kc zJjcopJh#dZJhuXHo_K%%fjM93kLQ;Eih11dKp&iMPS5{=CFG6obJQ#|2{Exo)J@@Ga0Dd0*&IgzPM$qC17{cR#5)Tj; zcxj)oLKKJ5&Lm6Y9i}U;&Ig^riBez!O z6x_Bkcj5CTjJ+%R+Qsv3#pZ#PyqouloS*Axjz8MXZHC7N-apT+bLr#tP@m`B3SF>A z#aCf|pv)Dy9{_#Iypa1RZu2~U=5$!*fLt&6ybaHI{;kaG_#6;^Ntp-o{2O&Fy8KUU z(QV4-&wO6p26O1@<{3QC;xzI3qs32IXtmIx%v~_wkdz$S{LX47sbM`6G-EEo^M8vU zQ~E%T&E>)88XC+G__d{73%1yh#jh#(DduB*PG)&8w{6Ib%Yw^J!4_X)$?Gi`^AtXp z;Br@d?>{l-H_99Y^BQIDfjPB>o`1m_v7UM4zm)&GKmRX&-ooF1$L8x|bMv78_FT~` z9)DVr>F~Y%{=F>H6xx_CNL4WpY-`?T(I>?&xbAaX?PC7Q=LyJP3a;(!gnpbP zgT7~tepHHN2XNrL<~$fw?)k8h)6qt41!)iKmv>Xu&zLv0tt|S^DOA3D$&^w$xbHB{#O^#4aAI`1%m{ITmcOVM`2> zuF3B3`%gr7`McySe`59J&*BwxOL2yLM0{lKqQnH`Zi=txK2-7V$mfyU^E^M-Z}a@0 z`{bOtf)aah&EHdUeE9F2xHQWW3wVB>+dj`>c|1Y>uC&YN3p`%&9G|z%V-at^D|{Bu z^Z9dLhCY;hoag;K-{*6NbTUlI8TtF@m&XDN@cI@T%(W53J>EC+vVKIFN=iCwTM?5> z#so>yYN#NH5)%a6SpEctE73}WKS|PP1W6+)H@rZDD@hQMuccddgvKRNltfU3E{t zN^4`y3FiN-wbm%psD1M*-iBm@iXcFPrZv{eHCp0CX;DFa#9veDYOHvxU`c5R^k_uM zTCx_nq!^_{6g65A1Ay!a(gAbK8tg(eS}Pl^6{imGh+su)1uD@A-bKr(DlqhDWu>tq z)_6rNRG#32Go}7P<|3quwt4#;D{SCBw5(PG(-uka9#9BzsE@2QXqo?Uig@pwD-5$p zI0DJ)Q$Z0lFG3;HN?d7j{y-*J&G#ol54d=t7if;Zsr>O8yfMo?aK4uytAed?O7i{7 zS2wQ|8m9gOJ5VQ3#UNlsv2d4D58A2f+JCuMlp?2jMQC|cfqiA<@=9{A_#-ZEZV~vy z7+CIet5_~9W1xtF%Y+Lh$Hq9-Aej@ZATBtJbdJC*wQ{IKHCQhf6W3v`brjq(b)+$% zD6p|rxfHCe6ftnU$J^FWhJX8K#r65$|5>QFU@qx@ulet#O0$xp2^wxv{GUbXaA7G> z8s(&_1v$kEPpbAP8ieW~Rk0P-3?O=Du>r;vpAP~4aHWcy-zYEScnr=c{;--17n1`; zamAP0IL1nxW+o9e{c-<|OduLE1Xqj{BIC$9vWx5{C&>kJle{7yiA)`+BlV*JG?+H0 z9cd3bj*h4E=t8=l8tEr$W}Ym9#j<1UBD>6>>^jM~YL$wc>U$K|CVf5budk#lIvf=_F?_>Q&Wiiq~hauUqGRB`pWuR`XT!9`c3*B`d#`2{Sp0fgJf_vxEXv5{)V!K z4nE9BB$C(U z6ERaAb)x>X1T9Bf&`z{x4%h4GUU2=3dE{_?0bJh)*Vw$u;d(N-o+~U8HVO&C5#fq( z3tSV?Ukn!Oh)u*eF-5fgcfDTk2d>NOE9P>&QNKmM6I>tGA1lCh+Z?VP^Kso3TvKpO!F3k6h8CE=n_tlT z<}>t~`7}c3Nx%`n0lnkD&fIh}ss!jikmwWx3Q{p@?$m$Ub0Z_D1A zy&-#b_Dr-Wo3nY1Z0MFbB}>lA#F`h{%tBjPSU1mF4_FRZfafIuez@*H$jfIhH@s~A za@>p8FUPzb`*hIL!A}Pe^0e>MK2Li+?fiWE)7aa^58sV!2QK6>wb(B_BcC_76pDtga}%lmtQ zOK?Oz0Oj)mw}X6tbO;@n@3z1t?aOabV?I8&sgLL>D3lcd>)WgupbG%IMr;M(1mFhX znOe8tCrc`LuimjUs1Nx6^T)=s32Y*p#C~U!$wW4q&13V~0=AGXVvETn@;m#3En!R9 zGPayd#>)8$wvw%4tJxa1mQ2NJ^A5I??P9yx9=4ZECo`ClB`_1)haJS3Y!sP=eY`PP z6MfEJu$Sx=d(GaEx$G@_$I@8_d(S?wkL(lnk>|6|>w>?ixh zGFcYOCX2{o!A>Y7=mbZ>NpNOk**G?ZtrJQMfkGLftY9P93ig5nEOW0gl^BI-!gOH< zNgyU+zOX=8NcO?b7L)zLAHovyr?8Y95SEdH!g65+IV7wkhshCPm9Sb^BditH!4GW^ zHj;C~W?>6CFKmK`yGSmP%j62VO0Ef8$#rr=cp>a2Nx~j-Ti6S)l^~c%GPy(U3j2kZ z!k^@xaDdzw4ho0J1K}`vNFI^Lu<(84iEvanCL9+|2q%S8!fBF1QiU^EGk-_YNd|e3 zoy8CEq@R#ceiXg3YW-t;WGIFAMr}KN||sCuJbzlR{? z64g>GYAsF_-Ux50JN2N2X%XR_kS@FzGT@&|(o(dvIDrPzGPEoWqQT-M@ppKw@-&2o z3Lk`zG>nGR2wFj$EKU(V37^H`;t1i3@D<*7nmC>|pbf>b;yB@(@R#tNHlmGb6WWwE zgST%%Tf#?=qOE9a8Y5D8F~;*_#D5KqrESE~;uz6WEK1wbcCt zPbX6B1B$cgQgIkvO>pjj5Zhxpn*1}LM)Rn|@rZM0fyZ;cx!?< zMMxZAw+d_|@E!oX8G#RhFDK+Yn#O(;##)7mz!w2GQ9czoQ3W;{nD0Z~Mfp77dw~0Z zNq`4{Cn)~|I0cXjm<&h*yhJ%{8RAPo-aX>jvu27u{uslK?Re%i=>I8r%W#Etct3YN02dDrWB^2J42BXeH z;BqREIl$cSMWFmSa0M0k4mYg`sD|>lz|{dYKnr9-YXYKC4nAl-Kz)=i0B!(iigNHn z;qz#7lrI8q0qBTw@I*TSI%7zo1+)vG8?HG|-2pvNXDo0}0LEHy0mhhdAdorbeFMl6 z;DsuXrNHX|T*k|Q_X4>5Fc$Qa3IfK8{!)QW0Y*gP!1#Mv0LWJ;je8G3VO%3}u_6FZ zT-yV4*#O8Y;8+#NYGCLv2O$+0a%UG&XASUW6$sjA_W{ruuBYs)3S=wZL6Jc5u?-kE z90>G5uvUTW1a?q?>$l*m0@rZ?Iwyb+uH*29c`yyv00RC6=#v25;rBR8qXNIjxWZc! z0XidKY~V8qyeJVMUwBO-%m+Y@9LPT44s zTBia*HX(q21$f&VRUij}Hvu*Sct2ZIAcugtj5zQ{lmaqMw~z1Kc^dI=_}@qh?d05<@fmRo=% zl-~q~pWwiKh6uz#cma&D<$x#xU#SAYJAA&+0g(k$WEIG5U0)9!YXjNibYgFd?TW#3fvE3otI!gTamTsi|gWeHwD;F1>p>^KOhL@X~4lM zARZF293T|s?|{QpKy)NxIG_T`KLA%$0nrjC!vMdb{4;PB75JEmRaGE=0apW52R#@= zv4#rV&x$ow;A1J)Qi1zjv9=0)Y{fc&#%TX<;3g^vuYjAXAY27*rUK>T*<1zT8gL60 zD8^N635Wp=&>1ln&=&rMk8?W}xbBGURS;eScTj=rlh_f^8TGZmU2#xU=d&vU@>4R%F6*S11v{he2i8AR->Gc;Tiz!Uz`kB2Y}7;7$WWf>_q)fz`Fpu z0iadnHn11vUx1B(1OVt0O@JeKmya9lSb_1tux0T$${PTm0GtGj1)Kt$K|9}o&jK)> zv=J~Lvugk@13n%%P~HmoCg2|G{{X(P0>zkNO;rU7{4fWg5;#9V#8dzSqye6yomk*! z0Iqj@yttn6_C^E#2K)qYIsXD=qkdap8DIuL_7d9Vz~iEX{y1R&hDhi`(xJQ)u%imt z;~nqB^pBH50#c6{c zc{fyn%S%rH@H=!6unoW#*O09qwCF(xkHLEMuXn-qL||7HxbEoP0qBSR4vdEMKDdT% z>HPo!xSk6ftO8vCTpkbtdL98+1Vp0FLg30O2v2}vryMBsPCrBi`Ufzl13;GmZ&ZQn zv3`>ZbSdx_zz)=bp6Yk1!0kg1-Q$29l;{&wplg5+1CF44EiiOUe;n8A2@cAsK+%r@ zymO%F$Ka*{-3$y~IZ*Uz@K=GLEkjuq=vH8iy`cl@Y$L>nsX#%8k46Pz0(MY=!Zv&$ zZyzVr-veAk1)kIRK*k&>X!j|t0-vG#M5#dc0e4b?&)$8y0=l98pM>~fj5*MQaIF*o zI_M#!p=VX#v;It!XNo9?3}mwk^bFF^EI>BOQP)TU>l>|`#3WEUH}()UPchaimS8P( z>`=x?1NHjay=ob0r!qzsXr!eKWsE|gzK&7wtJ5sTH&#DWKQp@POnn`F&(2+qqMw5C zpxeyYAia?^kLiWa7BL26wOG&G%Wko;k!6e`Zw7Cm_RLr`&^xCAV5KN1yNpo^tgkl; z{!L<<#uz8m@-$Yf73*m*=xZBKHHk5vs^w{jjV)u;|e+80Esq%MxWYcjJAPBUm&}{gaA5SKeKtv;c7@O;tpAn=`CUo z6CdGCe5|L@7sTqPAJRc?Ic1#7LV?C=(+}xMo0tS&Qp@u&@fF_GLb+XOBPmTx)RvVd z2Whzy-fs59s`NotD>6{;#IJ^cwo+zP22jBr3&*h+sy0h2GzzDG1=K_(Yq>iQ?NZ9Y%=Qb(L_gwm?rR# zcpV*Ts_KHWj{IXh{|IuygU0-00RNcBKlbtuGym{*QQsKK-x$i@7;19xz-t3M_$|Ns z$UnS2P`M-jn8!bE@((lrsLJaF72$92k03ohs^SB_kdz{C$tKLg8j((jdApD^CX+Fw z44$~iornutN%VpN=SL&4&pL`|m-WCcdG_lZ4`yl&S_L&a;4&5D=IlR$@=(_4w z>(1yNIugeK$Lfx49q%|*aGK-v*15Iwb{Bt_J}z5bzPg6GHgP@XrgdxWcFf(&y}kQ6 z4@ZwS9wM z{%-=}0?r1cmMBwVc!>igtx9$)nOw>liJqWf9E)!fgct-Go;6uT$%EgwOR_=aztMawWp9(1! zGA$%KbXe$)uwr4$!aj#bhHnkO8xa(-F5+v2Mitgq_+GJc#c>rsMn*;Mt>j;6Xr+wG zO)KyJt<-P3tB6% zT32dUt{qqVaGiiU>*_qJTfA=Hx(Dk1j4Bz`D(ZQ(XLQHtHPJ8XRj#+LUV8oJ^%EPE zYOtZ9OT%f6gho9YZE7qwj%$3aNxddFn-*)@uj!*^^_!h)9@zY7i|Q?&w;bK_?^fMg z?QHd>b%)kxW5&lu#O`Sm*k)Xti*2&ndbDlawp-iL?Hac`)9y*TzuR|if22cThjtyN zc1YsqJllCF=tHSBi2yLb2a?qj-7@BUYhrajvC=+$FrkBL2A_l)kjq33~~w|l1cOz%~x z*V^8`y_fcp`t<3O)VFHio&AdTo7eAk|4RL5^-mcPGob5$_yMc_$G=Sjb`3Z%;M9QE z@wV|n@eSj9#Se|27{4$6>%dk6M-7}haLK^KgC-4HGwA4`8-tz=E;V@nkmf^P4*5KE z?=aV4ONaLves@H(5qn1Zj66Kbb5z1;htY#a&l$aE^v%(4$Fv+XcFch>*T=H4^TsBP zYc_7-xb5Rkjr%!XGd_5Hv+*6qU!G8G!qJH}C!U+MYSOC7g(i=goH#jaO5G`Yrg+r@hp zfBd87A1ju)FIl%FWogN!LzW(1`h8jCveC;fF85wudiluZUsnuXadoBr%2_L)t%_VV zZ*`H?{;S8WzP6_5n$Bx(t_@xL$2#4*L+cx^f48CghPN9_Z=ARB^CquNt2axVeKrr? zd}K@CEqAv@Zk@FC@;3Wz&9|-D_HFyv?Z>x2*%7c~)s81Si|-t@^T#f~UGcjv?RvcH z({8rgZFh;?Rd+Yvy?2ktp13_H_ImA&-n)M9FJn#P2IJ*~$_dRAl1-7O9;Okd8KzaH z-KGD*_^{)1jxRsH^Z1$L4~~C2p*`VzqST4XCz_w=cw*Rz=_gj4FrGMl;@XMS zlXfRPPL@1b>15NB?M@CpIpgHIle{;RIW^?e_)|+x zZ9R43RPyPnr=OkvdB*mP&zTBm8lUNWX7HKGXO^7Va_0D%8)sgg$vj)=toPaZ=RD7q zIalRe%X59sO**&i+>Ud{&Rsh9@Z9I~!ucZS%bkxp-|_sg^K;HGJHPS#pXX1XzkdG3 z`OFL23(glxU8sJc;f2@>{V$BVF!jR13)?Roy>Riu?F;WNl8a6kOJ0n;*z{tLi{mdY zytw`1sf*Vx-oNAkqb^OowEEJ%OXn^nUV41#%_Z|?+snl+ zhg`0Gx$Wgam#1G|d3n#})0ZDysc>b}m7`aZuDrcszG{2b=W4~PO|JI1I_~P?t2?hA zznXkC{hIx?a@VR~i@7%7+LUW6uWh+@_}ckvx30apX1=bw?s>iZ^{DF|ulKn=>H6~P zJFlOHfZus0NbEDRcHa7;|cy#0aP2r~NP5+w_HyhrJyE*jcvzuQNtrPW$ z5lQv#k&!AtKO}DxB1<+cl+I)e0TQU#dlZT-E{Zp-LrSE z-o1VI(cR~F)9-%0n|V*TXM4}*Ua5QK?@hQj{oee0EAN@^9l3Yr-i>>A@4de-+%Iy! z-2IyO+uZMdf6)CI_t)OvdVlZzqxX~UKfM3>f$+fLf#-wr527D*d@$_6xCc`ota)(Y z!I=j)9z1;T>cN)>@!Jxc%c^kB2^<_IUZ@gvXa2r#=4h#NmnmlPXVIK8b%a^T~!Mho9Vf@+O6(IHi{yN&T3bnWjy1PV-I+ zPm4ZC$36Yy>8__|pFVv0>1oz8t7k6H^v}va ztM#nyvq8^hJX`nd;IkXgUOvlwu6^$O-1~Xy=f6E~{Ji_~;m?;p-~2q``SItMpWk`@ z^!fYeKVQ%nonM@ONncibx$YHv)#%mQSHE62d)?-B|JNg4Pk253_59b%Uaxz-?X~gs zq1RVlKYso7jm;aMH<53ez3KgC(wh};OmD8ddG_YlTc@|B-iE)e@wU<1HgCJX9rbqV z+l6n}yfwZ(^Y+Huhi_lK{qk0RXYQ*&3(7x-IjMJ-raeZ z{_aP*knWJ~nI4cHl3q2vetPTlxby+(qtmCQFG^pTzA=4g`o8p|>1Wfgrr%C~l>R(D zJ^gEXW`>aAkWnPVFQalst&9d4F&UjQhG)#pSdy_OV@t-KjPn`SGwx(O$#|LZKI5;9 z?Dx|974JWNX!fDahwdN7e3`6jBSA&S?KQxSYY@Xb>DJw(kW4_J9mRiR{YkT)6x}K0@tYFhQ0n z%g&aJzcxwQ?6GWkrXw4X-GOzO&M<9dWQ_R}J*iM=Pb!;42OYXJiaH}rR0$P8n_wZ- z1~)b!G(prDZA!-&?t6X%2Z=@!6kLw_3I?IPo2!e)*T+9Joc{62hlZ|*j*X3uijAcw zh0mD-Th*-5s@3Gy=oM$9Sz}C*MM%ZpB-+^K^lF7(g&-5N5qJR$GHMfzg3f4_i1r0v z#}J8sP@57PuF%>68!k)36pGCTmRIdIN978)C}g#SY}#S$NUm zMrXNEh69W#!%+lJitynmX2;ON7-O*@j|8I4<5)~I7SkCu%BO9j(KaZ-D&JFE-k}kn zPKibgMKZ2=({%(YU&JiBJu#t8bXUf0)6=Eu?(7;MVrx znt@gC?^~B}NluMx-mFc`#}&ORBp+FO{V6pJ>>bmcj&IhvS<_x~yKKMjboW8wzs`;r z-o9CbcAZ-GnbCGfvh&3YZa=OMAK#u^T1R}>WWIDBdx}L!2@*;wkZGofijkbJ2xY7= z4!AHR8iSw>VL`@-AZ4%%=(isv;>XnhI%kt;v4xcb7*)7>_Rn+Fn1TX^5J1&s!-@ZABB|Xk0357fVy|wGiTnOJ#*&n zJykotMvcgbTJ&$@?74e)&6~gHR8;t=TJg2AvwJxD--a|zw5l{q` ze;2LRIXo;xr*$_3zQk zf9t-SMc?&oFF$pS9pD(#uu_?NkyYx`>D_kqYQ4Pqjyq=-?3vP3emrEh{KA;ss`qm# zk~VN?(4%!fVQBq9A^uTa>otL`R23djXT=w}o2aA#AF2!HrY4kk(5xgm{A{QRam%b!{Q3l z)5nOc$xFJ1R;{wCuUuJ9@|JJOk@3ragYRDan73R4EqBgo*{Wd6)P*r^K)920n2rTR zxH&nwv(A&g&8jeWldy4Nh3TKC2(02Wxr2PF^720P1oa7{rRk+X%PYxO7M>W5@d$zO*W``AQQ$5R zfy?rb9iYABrSf}u3GGdtg&;Xo?n#&7aKtp;p0B)!PQY%DHSsoCE3txb+m!w@2ssBt zaKD4|tVfm>ugShq+FxGOxcaD(X_p2(LreW>CR@*5zy_QM!V6Y9bIqF*6lP%Sv#+xd zn)#OZJI?$UJx@!54_}jDS4bIS9=sL1fGH#hc@zYfi^x%C9{5UZLd?26mQX*zJ?|DA>X@$&6C8C;dM9T;#jdoDiZ6~3BYu7UkR@c( z$5{fLaj)*3h0c9?cVMiIoFt#3k<^dc;kZd<`J()&$e){6Z~}TC;dJjgF1-m z(U3!7($?fy#4~pc9MOs6KRZeA$lo;aKy8zNB{KBus7tWU_t1_w@`rB9L*6}3&xGfA zWkYDV;;|8~s6mX*DnjpdZr`PCmw|H1_&1B5{*0e4|H%ejpx=A1soQzLwEj~bkG+4s zZ`vR7M$lUg;}!yXOOOR7ZOKx(^g4iE2MfKPxbehznWzKj$Vh|s55UPo)_y-fbjb$p zPo*DmXEIYdaDPP_jca)41Z_SBY;xYzVGTJ~hfS^ll(XgS>A;)y)Ft@jJ;d-M=oa8n z3CW1jE+V{cPE-yH_4TDQR`l=Pt6lSWId$}tDX*z!RNUy1^2@gmaYWECx=oLvpOyH zRS_hxJX(2jMRi8oM3a?<=Z2<2N-fTUt1ovN0n`Bhp%sp7-YlnP?<~YR(&E{xX$@yq z{H=VRRyrV@%o@U&0VC22BT@sD;2Sk2Hzg-j$)OkoY8erG+}LvqqPhb5sipRuI&Dxw z(LCx*l2$QCdtHKCzEWp5UTX3#%0nW;fV08XAV8Cx5c;`O@DDJ!@w`VF0!9caeHo_lxP$dsKXnYDL*K_TsaAF+!H#%t;;H=ggS4-R4XjGda8n zWZM-SHI`1|_gj2P2a|hoKTe{1UY@Ji+<$OJbot$#NlPr8<#Q26u;i7;66Edbi_`Ua zOc2MgP^aP%f)7$T#c_ZcVQ|rNA3cU7oJbq}bnYwpZ0R6&xIV zvqF(H<;oCd5UXcjmv6Gr>_8k|v;Xx)yzmaLDc6&_5g+8k6HG2jK5TT+8H*(HPyZZ` z>H-yTu}ID0;!UNkUAS~h!$M1sFAWP#E&UNFe>Q9qij+njlYQwTyefRKK2L<`A;CZI z77~S9QA|!>oF~baB#7pu$y`AM%XRs1(W7_!-eYh!H&XsSrdRu3f8R;|DQEX@->!e( zP96GqwQ1J0O`A=zVwv8X%7yG3dFJV}(Y0uv7a%{n_J|J-WuU z?%kW)Wh?U+F%bUA71HQra`P?DNp{mA?*EICIzc2(+(_N5oltL#(G4@9{ATK;OK{F( zj9{KWKrX+88P?k@wfFMn`U_ z)2&E+ht~1^Se*gX`suunQ|8NG_Vke#%bo1$XH0cZMuiMtv|;Ut;mZlmI*&!1K8I5n z{=^9fpSAcj3n9=YqXV)rJgIegldQm+q`%#;5oD}9KUa~2q#1|uqb6x zphPeiC>%>fmH<8^N2F(tG?qnXZ4}zG-k0S!v|k48C%@q`olYx?8k`goh!%aoSr`RO zTZ0mCS}k{$tkormdADd13hT&~R+BYJ7{`IV%gBz);MOpLOvk=aqda<)G=bA2B^o78 zkDnuTrH<@)_EDin)^gVGDs__=rOONXaS=w!n7;`ojIoC@##(iZwK`+boH16Moki0v zv%mz;ykth5)0+g196IOP+K<>Auvs`5Ie5{;#T5`6O&BIZ`jy9KWd`IA4NqxeUJJ3*`6 z-31M|*a#<_6u`HL7%||+9qwLVoH;u=6%Q#dI#IQXvp+$wn#VnvI1h<)0uN%Kp+-KFz$S8#BnKvr}l_gEUZ1#%fd(=8fnqkV)|T z$3THSY|o18%jSGhwMkEz-AzjBPEZnVZ&QF$oH6t4naoBb_Jrg$vxmz9D@LG3eDO z9a5gS8~nM}<;3a;@u#DF5jyimKDn4WAIPGi9&)nnw3$o(VDnbYnqfmdLOC_ysrmQP=;c~w5QhlPNASVm^vqyk{=GnV>|I^Wb2dv{TXpf!@HrW|`z^+P0fpt!c5}Ca1lm!iM z*oyZ@Z&1+Do3=N3d((j?owpsAm0iJT4h74<=I8y7)X-1EXALZXCxjt-v4E;Ygdwy^ ztf_o||8e>GO16l)9-#s)?kPWZnK5GdI=W}u_9*!y`|VKYKAUM|a@<2&b^DKuu|r-x zZ~yXLROS;^x{|Ll&JF)%oC~aETKs|HrgAmF+D4iA!A<2$S(K@!B3Uk7$yZL!J}4*C zKo$*%&z>(CvrViKw@sW#qo>ioK#HmTTPEvDFP1LV_ULKe1}fvd66OryCoXj)*aQ{K z9hCxExy6?jGz|>7GF8Z(i?Qo8aCF+7*I2|a+op4??vgP}H|x%j^m~1}59^mBBR}+I zM;e$&A)e6xiy|rk(qbP4R=O2$!#z6AKjK}J#^S=Y%EC+p+&DF`daF2dlj&eOFgugE z$SYaYHn|f7)%Q=Dnmsb>9_N}{Wob|%k&^#Hf~D8|3Ljj~Ptk6=hmFl@O#?r}u5wz^ zjKifpiB(%FAh-g9U>Ry09;*}+;GE&x%A7N;ifj}VT+W(t6>z4$)ESuB&|&zB z*G&1gmpuH2Ji?1dsLV7`|Emd|%l2lT6)R^qlLvt&g-^)`SJsd?%~^}$9Tr&hC?Ii* zrYJ<_S|gK`EJ~{&u0)iJ93PSoRPs=cN|qK*WMS@_RZTbr4~%Fbm4&_Q5GkWfq8cf& zSL2csBMaDlu54h{`B(Dc`aBExI{4vSJJ!Q7=d25<)4K?%>@xY~!9V2}tLRGVN&8aI zm2%>yWlJ~FO)HjepzPp1`IvDJt(g>ckJjD0S3Z1~zWk8>yl(3E_s@AQ%Jt$2EeMzhV5am153cYl11@7ZTEe(aRAkh3H{7ji+K9A&an z^JFA~-Z``t*doeRFP$#`G80cZz5gLkt-IC_Ibx1){1=%9P9FN@qIX6VSz%r!e*GQLXs<6@=k-S&dj z;BGyJ!G>xh>)8Og2axV2rxGPWwMuURpY8<`y*P=27vG&SIoNn{_OLJYk0dDH@`cG) zscXa*j9-B<3H2`?z;_$?L^N+p%FSKOS^MH!Qcxga=m_~z+rOv$T)FDoG&y2soX@Sn zUkT{^6^x6P1gVS_$WSc4(1@&~Ku(goCXQL*6}g6-EJukO#N(MY#p7Sm>JUgR5v}UT zZzlM(T&Wdsj|DuB#RdE$$T+(2W6c3D9=?L(>?kJ6cjRm{G7K6xV`R1ne^dRV{EpgZ z2v@SI&ikF(;M)~cnJa{%e+{W%B3i55{tG051>9h+vm=zJ9#9~4Ucgq-dbE)&VJ%rp z8`554-Cs@6F#7Ptv^*7;c37K`^2M_PeH7sF-xKBn(-pOM6Mk9%M3`(Wv^ZmqBJin- zvvY{}=^QOBAD5HfzsGX-aa#KPCz);%?S3^8Ze*25F!(OoaQd)pAQ8}KYsvTu5LQ5c zEy7pqO$%k#a%ILBMmP}~72#L_zq8ixSfGkW3AsG#&f@D0atz%kZ$!TSM&5|47#b@a zq2II1X8TZCW-NszajF>f?IWnNBIQ(lD?pXfx5dL+sLCNk?Gu`S4oBcyrBSkvd{g$J z(Sn}M&+3%@iRpxO=ph?J;G~E;3Kj!1 zVn3{O%ze+tvBBje2vwM$HBgxMjPH1bidR?|b~gpSwnc+X4wSa%Q)`AxM%#1AVeG@+ z%Newic!h@Zm|Y8=MuYVyFXVC~)t=m;!0vnnic8O;M0uj*s?9_`l{VSBD_OT~kZGPR zx^mYQm~T7T@=9ZjPS|Qhc*z$z`SjM;DtEyQDUrI+!WT(Ha+V7%J2Q@M?yi1(;^^z6 z)w;N`XD-&gwynKo{ye2&^XTSs>X78gm(ppe?Dy6B7U}!Io;C=G9C~Q>u0ym+{Wf)e z>#(lv5_GEjgt{26>{# z6H7L4lI#?Nwo%Z(%%}40PeJm0H!eU6<#9w@a&lA>FRdedazwaTCFP>AS0U_g8@g`1 z@KjFi*<)sC*sR%suFP4^lAlZ)tRdMChRRRmzokt}2g)r6&8&gZu7SD7cZ^(7($M5q zj0a40_>|oz3+a|jCci zDdz0P_H+7f?J&1`%C=U09Oy#U)rA)ST680&vk*_r!+K8`xwc&oVZ@NW?wxvZZ&eJ& zpQ3R^KHSZuRWkK_JQc|?{sN<-WXS*ImgnizI@gkUhMaE!2;P&QjB*9TC)TgOb*yr0p?K)Vd-sIy$?XnYc1g2d-a0vJ1@}$0a^zotJjE_89e@$eFnN<5ULU;S1wB7AEB?nWpyp%ceLxs+st1_3&qr6Z)qT4R=*74l7@eMo!49w(9jRwRMhtR^ zQJ3!+frU>c1+(y(o9N@GFu9}<$!zkIPs2m>dAiYLRu_skcTJ_8z_80I&3yN@+e857E#RkwdCVj?2 zK?$0?jRrpPMFh5-oWNeeIynW#c)fM~dNJ4>5F@Ea^%gCv*J#m#F!Or3KHY_W?GVfA zn*?`0WKg!;`LEKIrC%jTVTAK<`@_Kac|4b(1c&@IP^`MZ6Nh2w!W@OXeT(%c_SLTy z8t}V&>m{ufVlrp#yXg4RdX_jmk1UJ~zPBm1fn@ARZB+nD-xh-@;1MjTk|L+PSy-k=>A)+O-^$U6>_wXwf}ez_+%r=g(~gd^wU9CcB(7RNOlk;Hv;DmJD5CMG2QY zr@^d8)v^35+Br14@o17u=Sb@zXLoI5+-^qw#;F^-;L7Ff+H8Nj<~_3|5S0`2YJ#dl zIL%T!=QIlrrYJElH?Oh?+9KNo$2@!GDO0}bF84lsN=w|`U9br3sQ8*m*tkAn>6Xo)Z-CrM{0;Ou zfWCN>vvS&o=RiCrbNZC9YoV`zS}Tqg#->zLgv_NUS*bHF1^u7dkPFX-c!1{0kUtv| ze|vsgiXK6oPWu;2gyu&*n6Ceqkx*Fn|jK%`zVqICywC6 z9-QKuVh4o4mX^70H# zjprBk^l+Btl&%|2zoLeIaZ@6~CwJ}70?f3;l!3qeY4$)G_-o~c-t=Vm4XSOj+lsc- zHHr2-J5y;_6ysk1ZL+q_IVWLp@`}l^o0ZCJ3V~Q1ty-@LE+v$<8jxLC zjGXvKA?_I}Ad^f&?|!7c$1^9;y)a}Yof_peTFkh zzIo4JN}>J%{2&Ckf6Gx}H#hg3bL3c;adSgJWruqWk;i>Jed7lVtYvhQw)gA3lrK-e zJ%T!kyI-t2C_<5?raYXN#MQ4|d+(rD3zG;Ks(B!RFvMS6$!_ zNWRQQ@mUsGT4E(vd5ZJe_z$x`?AzzjYb;b?rwI0l19@P=k!LPSw0FhUufX#fM|%12 z;j-0({aUt>6E$nrNVVke$=NR|hiV@cp&_hpGXKd3M0Mno4sZ|nns07Y=Nei-DHX~r zWEKb^N&?1hjTGV`j(J#tH^(>@mR=G)_5#81t!9l2x7u7)N^N{ zQPDrwcpw^e-3jusJwU_cYqYw2<@71}GVpa8&VJCE*&nj+(-!hBR)RTUL< z(zCYho+rNxMen<@8O~2fC@V+*abg#%;UTmgwmiOQPHJD1fwRnQvXPiwi zIVy`DM#rE8r+lwPxJSZ-!ux~#V_n55Y zbr-@jlAp!IyuS6e;`;K>58b(S(gPE7cbYA9+)8 zZP!NZ$g|2TdpF>bc7i+)XRjJUMs}pUNu#XUVrAP%9_KE$S&TP-;?Er{#YraT5GbRI zhJRzIyxWe?23SC)cC*_d+h*glbdq1qR;{Mu6c8nGW?Rui@+SuF!F_ylZ9qA-XHh}L zIN=P8+Qj@?$iLZw!$COf=cs(*YdAQSS6~-RS>V7)NB;d3#%I^+w^#CQYO`j1nM21; zue@|LIqCSNjfWY2lDliu?%in*EORWlUF_XkFRFj$_K^DM)1DSf+1RSbAL|U;7Vz=G zAc-@ivp9n~#8f2T8C2zfon;x-6248voRqm*v4TsU1rI-hMXWjS2@Sr1WT$+`$Uf2J z=A^7!;aFb2qahezcNZ;RaK(9*0E8xWkS*cX-QdbXHC5Q0%qQ)lqzx;yKW-*}k)O71 zTBEf!4P(`2jgJ2O*=hZ%jOSP0Jw4U3O_xs3aY~Jmrue^N)f7KtCSICUGO@ri+#V6@ z^~kaE&r2~L3Hp4C9N0fAk#~z-VD5^v0kDA3h=2$sHHmPCwYp#%jk+k|pXan(JvCyv zwO6jLnK)-!*M9To%w36aKY#AxK3!(b%^KPFSdf3&WL$3}SetF1{%Y0lAg2k$^a5pm0M3niYnqw7MK(}P# zCSt3cuGUiJ>uR~j{G_}iVtj&Qo$nSCUd)Seb_ct1&^=h4vvROmu{vlz)~xwI9+>%w ziLekjWB)W-Q9kidPNRA`4VyqWXnFa@H*88&62{?V3&d>$#WdaqkrYOo^1kbFO!X@^dx6n?mjPK2z!|B+HWU9$4 zvJxLjFP*U>MiN}|bVS*WlyaBEH9*8Mx-cb$<{D6(pOxim!cWy%wAaN=baV6LUlwwA z=amA)RU4+s@4v`q`6)F_7#}}mqP*yE+YQrc;g3J44hP!%^dB*R4m#T*yKMdDV^W&6 z9Y&uXi0yu4@5Q@UX>7;(RjW7a)_+Ow{q1`k-kJ35a_c^gYDL%U(tr8jQgOBGm#7)k zzDnZ~kXZ-uuFytGMl5u}Iypb>sTJ~;yfE(SSUdC6nmJ#I#Hy*9=W>5X2RHhyN`nSt z8YVT3tkf7-Y8e(?uV?-Gq2bZ>!b0oUhezf6{m(Ei{2Of%*Xboec^K*(f<9LV>z@ zz^&Kaa$_pO_`a(#5bIwyd7NS3{qt@W=JbeNDr3HUI&3*@7Umbqiu>YJq|Qmy7kBc* zF(JMco^#wlY`<4Nb^PR-jk{O1i)q)5c5fHkhHhCRf7rNI{9;Nl^ z1X};-3Hjj3)AGS%ti`eoclHn5b7%7(otjS@IC|)`rd_6Np~ZG?g0bw9)3)xQ`mI-J zn~N9aEmy9|n=f3VZMcrlVEg_**4_g=s%m>5o_)@lnez4zXG z@4fflL^_fj5kx>h5U`+8P*71&nt+8akj&2au6^cA&H?WI-T(7^*GrN~rtH1;+N-{6 zE!h{ejD$xsRP_@c4e7r^E*b`dY{A6fN@6f=TS);ZhJMN_m|x6?9EX7Tdx^iG1}QTb z9B=r0fR}hNlGHIKBDqr;X^3~`>)GIdpinK3VFL$C9lh+0CXSx5`#|rJ)$1KNICsv* z2)?yQ%gFu>TT7=Si#DIoZ}7OZDQTtr`c7Lqi=XY*Y87~( z&ky;8RABy=YwRZMZ=KzA;Yf~fVE&#dn-h`$P>mAyIK+q=BMa#n11^kl#DELaqGE{P zX(?HS3@=D5lt#aW6e^jWSzKqz%os;j#r$W9@T-xlUSqicY>Pn10Ng`91jj>mB*rI^ zaRWgS-}-glvIe})f6jz8EPT!T!z!1ydu{No(P;DB`d#XDS|t7W8i#%P8V7dZ2j%AT zCJ(I=J!D7CP)FR>hVRU-R;G4E2A#9pYKP=_ANM;PEJm7Ml%kATvZ{K!j(17%=?27_+2?#7E|7Eqp7xD-CTGaAE-nboQPuO{H zsqG^#*{BDse&mGEuAu4!r@?Z@4yE^yaQ?{2vse=(TXMI`UFG*5@s(`gBi80s?gP*& z1O2K$v>t;^-9hyb_!f-?P1RH)j^}`t5t2^>RSF^hKt-QbVk6|UJPd!tcIb~m;*Wyb zqWX(2X1p$K5s(07|wTG+BejY>$w+iNQow9+q&$f9DUDhs7*!ig|}!_;hKWDjpeoBdNv9(K4I zYs$Lf2X!faeW(&`FduA-#H)r*cm5cX(U9(K3^zj{)VQu4!MHlKl z0Zn^Si!SLmW!CVx(&_OXkz8k(fBA*fOT?b%5hIJVvKBm1{Vm9H$)a6BwODUC5*@!Q z$_?ZW@&I(lS|D$b_o1ium-5f(a-AbPI{gpN8TLOsXE>cG(%QuUMSAc6lc>MIDi# zj>YmPwsv!S*QJ24bJ^rE{iK|nb7snDI$1DxtQTKxF=4C0aO5PM>)K(>eA3E2F zC6Y#G7K*YViXQ-Q8JR(VF3xXyhyTmG?yzE#2mj&wyjM->eHTj6?2_CP)=9W(ccBzf z?rJw?JrFx~35A6n7kBDhyKV>RD5_QGw-U(o?mU&<0{X%iC|0X0`bc?M2yh$H`tb0C znM;@h)yFRG8WZVC81x!%B@xRdWw3VMtB>ro4}GUWw7o*)^1)MgH7gd45nx#59Ncb) z^#CGG)q#Sby=l7_j*w~hbZ0QX1+H~#hMW6z2uX;ub`v(AFNB%of2+dIDFQjLTv3wu5MK50(eUgZ4t=$I??AEl~;6c5ipIccbqSO2a=;swy($6cX zb0&V@3$d`l*1eV_b}sK%X)V4({kHM0oq?nBfi$9bJ4MfsVr01M7P}N}Nk)G=%A-y}ET=I%hFD8$)kApHR0Kmc zLa3A>voabcQ8aEtR>6F>LCPjGECpg!VRmZ^!U5)|6JECHA!NHUH<=!SvywNtzTkO`(~%Ee0hA! zx=tm#w_~ZUfB<#?)RVm)sNjz~Jwc(@p+&?9v!FbBj%h{YHTAh5G}BLbI2 zjXho~WH4&A0xr~6Eb3hdMiz{@B=nEP%JzD>Q~Y?1UHky%9lUVv^=Hp{kVER9Q;KDT zu|^nanE5B)^d}!p6=if2s#`7sx3L6zww!1_;HhEtQ8M7=DZ-kHObr%*IHu4d`4-k} z)vgEw9ZJ|6L7YH_m>mWOFgs(_SsK5%7qeVS??pf*Z7(og*=!Um&&uycm@#8FfOqG2 zBjgAFQMPo-+h$F-{tX=)1H4ZwjgltltDATc4iVXm7vD1D9hs5YnQ-R~wKACz)ER{A z%h!q?31pmPkIzUH1*9THVh=&aDwGMA!CEGXksivhrW4+H$Bb6TmwX1m@!^9D>K~i^ zL2ld9>}0(GKpjit5_#R)oz}eTf*#ji_V^6zTb{tj%_rVG#}8E8KTLX7`N2)=ntsl( z6o8N=%PbhPo4_f)h>rpCio_jg=%5NCZL@+?ba|s2w2-#KPz7enq5TAqtf7RQG6M#7 zAT5v!`gH$xGNMbwhZ2xB}fAH`zC2_Bhnm%QyHIqMMLoUw#;;EJYh6g^p z;pnqtC6b581zfO&;uPAeVa1ALm4?gzdNNnAwVrcTy{*)O!Wi{YqXUJ!MA*nsAudwD zx`{(hv&#%{;TEuB*vMoa0}jA;^Xo5uKY4dR<+f|?TxqtsNZIb=nzXFdeD&aVHMdxm zM%Vs6zi;6CjS`wPp1m^bvzV~kW$IN;Zc}6I>aHI)sommx;w_+jY>UuyyC^!cRI>c4 zN|mb+?cry_s>j!It`ji9%S2X5*TSY-?2eG3eLvnu^%36?5muM@Xjn6cK^z782tZo6 z_T2K?bIaqoA|Q1?*zY zzBF?3h0BkfJ-ru05%!n%RoOrz-+J(|Qz8 zlqvydfzUBYegT!y8BWh@5E90a>ZFLW5x$4mj~R1aAP_DsnV8@x%84e5ARiblG$T}| zORrTJq|43n*sQ--EWI=B`PXv?mL7Go@!F9qJN&KgYqY=SieV$hcJDLZ8qQzwvGw=! zzt>FpZSGy>-Ei%&@x!~-O}bHP=Ahxugchr&4PEl#X5zT2mMO|R==Lo`FGM1DY1fc^ z*dIIB!M{u5c5>G{|dY&1Z>Som3aCnr}? zoE`a#^3;aK-6_;&^2L-bV@;X^=>Qk6Qs z#<|ulWU+oZ^sWVJs3Ib5(c&A0hM=Y)gN@}|$bQFA#NXT!LIV&WUkza#WO0dT=90>~ zP$n!vuU56U^|`?B-|y0_?zTSPu-KwZDO|k&NOm$I&k|Ln-)Mm=D756#D*iE$1raMR zFJ~2|HCXj)i#}Ztr=ly`P6gtsM zQ<861t(j4lZd}3ZC`+X(a0NXHZ`5=9xf=v4m|3>$YzS{pZH7rnjO7) zbwElq)Z#&`KLomRi5e|x?ugt}%@X*Q_3Jq?v3{``vg1<%;THMRmk^1>Hp=Ra{l!#8 z^c_?E#5al_17C>fF^m-Bfnwi=`v-1>-VxZw0CC;Y30oH%oQ4p(3+bpF-0VU*667&A zm&I+)J>-HrDxc<5A)q7kA=u;nBXj2Du5n`?V_|by ze3j}5A{$WT0fdPVY6yypI&By*l!P(nq`;xbNkNz*dWstD0+g9@wflfZ)wV-74*#ra zG~)+HFGEBywtyq&#%p_K%H9F5x?wx^Q?g zS7?NchFA)VFc`z(qiGRsSOhu@%w&uBBDRDNQ!4O&Y>o3@=Qp%AU^SJ7!lvn@txen; z-H36s8q<)-0GC7j!D5jNjt3YO%MKaB9{f}#coE9s< zIz;0?u>#lUp8>r8`plWIu@|T8OmT)ub4%IY zx`(gJQj(hnGf(yPqn3zj0nzmU^w6+^1oKQsO9&hq3$Vs~b);DhzvT3B&Z7WTm6YnB zz`g9*D*=D|ydNZA&P8EpZb?jTV3vW%SM+q!)+j`qi6Qj|f`s}SbqK4< z!bk#AF_fX09mkgyoNv2et&~iIwM&5>Vc?}3@M^xp&h9_RzWAVVb-$8j$2D#}wI&5A z*6zP{)mih?Zv*c79FQ^x_Gpv)l6-Vay(RqUP}JzGR+-jw1`((TmtHclpQ*uw ze!omIoD`8Gf30eu)@mX!#Z;>ZW6Xejru`X2J6T}{&x5Wn_KBi9$Uic=h-t+?s|NJ8 zQL8I^%iQ_9#=Xz~Tqmz#!I=|w$s?Uzq^i!-(z`kRJNF&hcJ&UnD`*At-oq*%U;(Rx zQ0e`Ek1yma|LJ%10RJ-cIHX7mShWve)fR$XTN-_yY^fqvjhIM0T`AbM+Nu6$aUtwo zl9)CRVWTFCZ<)z3PLs(vO-@Oc%+PQ|^o;Zh*Ip1S)V#sIM-vMXvB1HovhdXBUX*IiflX^dmxwmjWPo|bn!v^*rKC*wm;qtyl-5qR5 zC+PZ|1*_Ibod3Cb*reE!$0}4`wF1oH zRM}9`C1|6I1~-eC?;at<$)wWI;Q^z*Ia#f1Sc&wN%IYH*g0Fk6%Nb0Z*}zp5ONji= zs>OxKcOAi7IS~OZ5d^TN5E~jI7-an$84hN@DUWWY&I+QX0=n>_=-m=P=`8AJ6HA2< zC-@b9L_Tc)`qWoPN>^ikqgV|#Y&*YkaMs=e&T+egSZ~&7!}0S~|BWh*RyHT*pX3)0 zFzcah(Q7xOw&xe#K)M4;6#_;e(167i2nU@~CX`P>1ZWECfIsd`){pM^cxZKr~orTY{GAzl;5c5J-sU`%mww`y?s ziueXR?U4K|4~4%C-M2_U8(cJqIb#Jg2|RRiLo>;cP^&Q=nPDwrtYkhs@3-dl%AUQ| zMEWn~%-uQ^SUQsLZuH(IkNl!$^qGYRbwt?$D=-dw3)Jd{0UFe0q3PbcU38lwY&{^B zd<=UFG#ho;TTH%K%)iRoj;M(!WSk|*ofC%}Rc+G!b$=~Pj>*ibIO*<&8~naEfqnar zq<>P<_S|_J3XN;cA2yw^DR_JCTo&?Y;q~us&s@EWI#{5l)Yj6*V2!s{eT6mt7M*Eo zwWkNd5gwu7H!>Jmo`&tKxt@s^=8p&gBA&=kA41n>FF(7S3p{idYM`%>lOTxE@y8iQ{DoLB9)ZVnmL`w6vwr>WtjKQV51(br94v_RQ!C{cxi4;j2XF!IPhbR2JLJ!z zsR<)y{Sl+XF!mrYM@CvOa!Ww!Twne#|LzF??qBQhCEolli}a+(yDPgZ+bly7Z}*~_ z%Ph(MRP-6^uUwR)tk0nflT=TaE=0F$e;H1Jr@=6{!HP%$s0*JKWCOawm7oKF+wi-FQMTx3aOC(nnD~{#u z*&aj${q;�!3r53e9=KAt@g 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


      '); - } else if (!matches) { - return (0, _mithril["default"])('li', value); - } else { - var acc = getAction(matches[1]); - - if (acc) { - //return m(acc, {user:vnode.attrs.user}) - return (0, _mithril["default"])('li', (0, _mithril["default"])(acc, { - user: vnode.attrs.user, - updateState: vnode.attrs.updateState, - deleteUser: vnode.attrs.deleteUser - })); - } else { - return (0, _mithril["default"])('li', value); - } - } - })]) : null])); -} - -var _default = { - view: view, - oninit: oninit -}; -exports["default"] = _default; - -},{"./actions/copyCommunityLogin":16,"./actions/copyLoginCommunity":17,"./actions/deleteCommunityServer":18,"./actions/userTransactionsOverview":19,"./actions/verificationResend":20,"mithril":3}],23:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _mithril = _interopRequireDefault(require("mithril")); - -var _AccountState = _interopRequireDefault(require("../../model/AccountState")); - -var _Gradido = _interopRequireDefault(require("../../lib/Gradido")); - -var _Tooltip = _interopRequireDefault(require("../../lib/Tooltip")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function oninit(vnode) {} - -function view(vnode) { - var status = new _AccountState["default"](vnode.attrs.user.indicator.name); - var user = vnode.attrs.user; - var statusColor = status.getColor(); - var statusTitle = status.getTitle(); - var pubkey_shortend = user.pubkeyhex; - - if (pubkey_shortend !== '') { - pubkey_shortend = user.pubkeyhex.substring(0, 10) + '...'; - } - - var created = user.created; - - if (created) { - var creationDateTime = new Date(created); - created = creationDateTime.toLocaleDateString() + "
      " + creationDateTime.toLocaleTimeString(); - } - - var actionColor = false; - - if (status.hasActions()) { - actionColor = status.getRawColor(); - actionColor = 'primary'; - } - - var buttonState = 'down'; - - if (vnode.attrs.open) { - buttonState = 'up'; - } // disable until has function - //actionColor = false - //const tooltipContent = status.getTooltipText() - - - return (0, _mithril["default"])('tr', [(0, _mithril["default"])('td', actionColor !== false ? (0, _mithril["default"])('i.mdi.mdi-menu-' + buttonState + '.btn.btn-xs.btn-' + actionColor, { - onclick: vnode.attrs.btnClick - }) : null), (0, _mithril["default"])('td.pr-0', [(0, _mithril["default"])('span.text-black.font-weight-medium.d-block', user.name), (0, _mithril["default"])((0, _Tooltip["default"])((0, _mithril["default"])('span', [(0, _mithril["default"])('span.status-indicator.rounded-indicator.small.' + statusColor), (0, _mithril["default"])('small', statusTitle)])), { - accountState: status - })]), (0, _mithril["default"])('td', user.email), (0, _mithril["default"])('td', (0, _mithril["default"])(_Gradido["default"], { - centAmount: user.balance - })), (0, _mithril["default"])('td', { - title: user.pubkeyhex - }, pubkey_shortend), (0, _mithril["default"])('td', _mithril["default"].trust(created))]); -} - -var _default = { - view: view, - oninit: oninit -}; -exports["default"] = _default; - -},{"../../lib/Gradido":9,"../../lib/Tooltip":10,"../../model/AccountState":12,"mithril":3}]},{},[8]); diff --git a/community_server/webroot/js/userSearch.min.js b/community_server/webroot/js/userSearch.min.js deleted file mode 100644 index 9dd4f94f9..000000000 --- a/community_server/webroot/js/userSearch.min.js +++ /dev/null @@ -1 +0,0 @@ -!function r(i,o,a){function s(t,e){if(!o[t]){if(!i[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(l)return l(t,!0);throw(n=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",n}n=o[t]={exports:{}},i[t][0].call(n.exports,function(e){return s(i[t][1][e]||e)},n,n.exports,r,i,o,a)}return o[t].exports}for(var l="function"==typeof require&&require,e=0;e>>0,o=0;if(3===arguments.length)n=arguments[2];else{for(;o=n.clientWidth&&e>=n.clientHeight}),t=(0l[e]&&!r.escapeWithReference&&(n=Math.min(u[t],l[e]-("right"===e?u.width:u.height))),y({},t,n)}};return s.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";u=E({},u,c[t](e))}),e.offsets.popper=u,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,r=t.reference,i=e.placement.split("-")[0],o=Math.floor,a=-1!==["top","bottom"].indexOf(i),t=a?"right":"bottom",i=a?"left":"top",a=a?"width":"height";return n[t]o(r[t])&&(e.offsets.popper[i]=o(r[t])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){if(!U(e.instance.modifiers,"arrow","keepTogether"))return e;var n=t.element;if("string"==typeof n){if(!(n=e.instance.popper.querySelector(n)))return e}else if(!e.instance.popper.contains(n))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var r=e.placement.split("-")[0],i=e.offsets,o=i.popper,a=i.reference,s=-1!==["left","right"].indexOf(r),l=s?"height":"width",u=s?"Top":"Left",c=u.toLowerCase(),t=s?"left":"top",i=s?"bottom":"right",r=A(n)[l];a[i]-ro[i]&&(e.offsets.popper[c]+=a[c]+r-o[i]),e.offsets.popper=x(e.offsets.popper);s=a[c]+a[l]/2-r/2,i=d(e.instance.popper),a=parseFloat(i["margin"+u]),u=parseFloat(i["border"+u+"Width"]),u=s-e.offsets.popper[c]-a-u,u=Math.max(Math.min(o[l]-r,u),0);return e.arrowElement=n,e.offsets.arrow=(y(n={},c,Math.round(u)),y(n,t,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(u,c){if(F(u.instance.modifiers,"inner"))return u;if(u.flipped&&u.placement===u.originalPlacement)return u;var d=C(u.instance.popper,u.instance.reference,c.padding,c.boundariesElement,u.positionFixed),f=u.placement.split("-")[0],p=M(f),m=u.placement.split("-")[1]||"",h=[];switch(c.behavior){case K:h=[f,p];break;case G:h=Y(f);break;case W:h=Y(f,!0);break;default:h=c.behavior}return h.forEach(function(e,t){if(f!==e||h.length===t+1)return u;f=u.placement.split("-")[0],p=M(f);var n=u.offsets.popper,r=u.offsets.reference,i=Math.floor,o="left"===f&&i(n.right)>i(r.left)||"right"===f&&i(n.left)i(r.top)||"bottom"===f&&i(n.top)i(d.right),l=i(n.top)i(d.bottom),r="left"===f&&a||"right"===f&&s||"top"===f&&l||"bottom"===f&&e,n=-1!==["top","bottom"].indexOf(f),i=!!c.flipVariations&&(n&&"start"===m&&a||n&&"end"===m&&s||!n&&"start"===m&&l||!n&&"end"===m&&e),l=!!c.flipVariationsByContent&&(n&&"start"===m&&s||n&&"end"===m&&a||!n&&"start"===m&&e||!n&&"end"===m&&l),l=i||l;(o||r||l)&&(u.flipped=!0,(o||r)&&(f=h[t+1]),l&&(m="end"===m?"start":"start"===m?"end":m),u.placement=f+(m?"-"+m:""),u.offsets.popper=E({},u.offsets.popper,D(u.instance.popper,u.offsets.reference,u.placement)),u=I(u.instance.modifiers,u,"flip"))}),u},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],r=e.offsets,i=r.popper,o=r.reference,a=-1!==["left","right"].indexOf(n),r=-1===["top","left"].indexOf(n);return i[a?"left":"top"]=o[n]-(r?i[a?"width":"height"]:0),e.placement=M(t),e.offsets.popper=x(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!U(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=L(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottomn.right||t.top>n.bottom||t.right or , not
      ","or ."].join(" ")),Ee("showOnInit"===t,"The `showOnInit` prop was renamed to `showOnCreate` in v5."),Ee("arrowType"===t,["The `arrowType` prop was removed in v5 in favor of overloading the `arrow`","prop.","\n\n",'"round" string was replaced with importing the string from the package.',"\n\n","* import {roundArrow} from 'tippy.js'; (ESM version)\n","* const {roundArrow} = tippy; (IIFE CDN version)","\n\n",'Before: {arrow: true, arrowType: "round"}\n',"After: {arrow: roundArrow}`"].join(" ")),Ee("touchHold"===t,["The `touchHold` prop was removed in v5 in favor of overloading the `touch`","prop.","\n\n","Before: {touchHold: true}\n",'After: {touch: "hold"}'].join(" ")),Ee("size"===t,["The `size` prop was removed in v5. Instead, use a theme that specifies","CSS padding and font-size properties."].join(" ")),Ee("theme"===t&&"google"===e,'The included theme "google" was renamed to "material" in v5.'),Ee(n,["Specifying placement in `popperOptions` is not supported. Use the base-level","`placement` prop instead.","\n\n",'Before: {popperOptions: {placement: "bottom"}}\n','After: {placement: "bottom"}'].join(" ")),Ee(r,["`"+t+"`","is not a valid prop. You may have spelled it incorrectly, or if it's a","plugin, forgot to pass it in an array as props.plugins.","\n\n","In v5, the following props were turned into plugins:","\n\n","* animateFill\n","* followCursor\n","* sticky","\n\n","All props: https://atomiks.github.io/tippyjs/all-props/\n","Plugins: https://atomiks.github.io/tippyjs/plugins/"].join(" "))})}var Ce={passive:!0},d="tippy-iOS",Ne="tippy-popper",ke="tippy-tooltip",Ae="tippy-content",f="tippy-arrow",p="tippy-svg-arrow",Me="."+Ne,m="."+ke,h="."+Ae,v="."+f,g="."+p,De={isTouch:!1},b=0;function y(){De.isTouch||(De.isTouch=!0,window.performance&&document.addEventListener("mousemove",w))}function w(){var e=performance.now();e-b<20&&(De.isTouch=!1,document.removeEventListener("mousemove",w)),b=e}function E(){var e,t=document.activeElement;i(t)&&(e=t._tippy,t.blur&&!e.state.isVisible&&t.blur())}var e="undefined"!=typeof window&&"undefined"!=typeof document,T=e?navigator.userAgent:"",Le=/MSIE |Trident\//.test(T),x=e&&/iPhone|iPad|iPod/.test(navigator.platform);function Ie(e){e=e&&x&&De.isTouch;document.body.classList[e?"add":"remove"](d)}function Fe(e){return e.split("-")[0]}function Pe(e){e.setAttribute("data-inertia","")}function Re(e){e.setAttribute("data-interactive","")}function je(e,t){l(t.content)?(n(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(e[t.allowHTML?"innerHTML":"textContent"]=t.content)}function Be(e){return{tooltip:e.querySelector(m),content:e.querySelector(h),arrow:e.querySelector(v)||e.querySelector(g)}}function ze(e){var t=oe();return!0===e?t.className=f:(t.className=p,l(e)?t.appendChild(e):n(t,e)),t}function Ue(e,t,n){var r=Be(e),i=r.tooltip,o=r.content,r=r.arrow;e.style.zIndex=""+n.zIndex,i.setAttribute("data-animation",n.animation),i.style.maxWidth="number"==typeof(e=n.maxWidth)?e+"px":e,n.role?i.setAttribute("role",n.role):i.removeAttribute("role"),t.content!==n.content&&je(o,n),!t.arrow&&n.arrow?(i.appendChild(ze(n.arrow)),i.setAttribute("data-arrow","")):t.arrow&&!n.arrow?(i.removeChild(r),i.removeAttribute("data-arrow")):t.arrow!==n.arrow&&(i.removeChild(r),i.appendChild(ze(n.arrow))),!t.interactive&&n.interactive?Re(i):t.interactive&&!n.interactive&&i.removeAttribute("data-interactive"),!t.inertia&&n.inertia?Pe(i):t.inertia&&!n.inertia&&i.removeAttribute("data-inertia"),t.theme!==n.theme&&(He(i,"remove",t.theme),He(i,"add",n.theme))}function Ve(t,n,r){["transitionend","webkitTransitionEnd"].forEach(function(e){t[n+"EventListener"](e,r)})}function He(t,n,e){pe(e).forEach(function(e){t.classList[n](e+"-theme")})}var Ye=1,Ke=[],Ge=[];function _(l,e){var i,t,n,r=Se(l,Z({},Te,{},_e(e)));if(!r.multiple&&l._tippy)return null;var o,a,s,u,c,d=!1,f=!1,p=!1,m=0,h=[],v=le(H,r.interactiveDebounce),g=ve(r.triggerTarget||l),b=Ye++,y=function(e,t){var n=oe();n.className=Ne,n.style.position="absolute",n.style.top="0",n.style.left="0";var r=oe();return r.className=ke,r.id="tippy-"+e,r.setAttribute("data-state","hidden"),r.setAttribute("tabindex","-1"),He(r,"add",t.theme),(e=oe()).className=Ae,e.setAttribute("data-state","hidden"),t.interactive&&Re(r),t.arrow&&(r.setAttribute("data-arrow",""),r.appendChild(ze(t.arrow))),t.inertia&&Pe(r),je(e,t),r.appendChild(e),n.appendChild(r),Ue(n,t,t),n}(b,r),w=Be(y),E=(c=r.plugins).filter(function(e,t){return c.indexOf(e)===t}),T=w.tooltip,e=w.content,x=[T,e],_={id:b,reference:l,popper:y,popperChildren:w,popperInstance:null,props:r,state:{currentPlacement:null,isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:E,clearDelayTimeouts:function(){clearTimeout(i),clearTimeout(t),cancelAnimationFrame(n)},setProps:function(n){var t,e;"production"!==We.env.NODE_ENV&&Ee(_.state.isDestroyed,we("setProps")),_.state.isDestroyed||("production"!==We.env.NODE_ENV&&(Oe(n,E),Ee(!!n.plugins&&(n.plugins.length!==E.length||E.some(function(e,t){return!n.plugins||!n.plugins[t]||e!==n.plugins[t]})),"Cannot update plugins")),M("onBeforeUpdate",[_,n]),U(),t=_.props,(e=Se(l,Z({},_.props,{},n,{ignoreAttributes:!0}))).ignoreAttributes=me(n.ignoreAttributes,t.ignoreAttributes),_.props=e,z(),t.interactiveDebounce!==e.interactiveDebounce&&(I(),v=le(H,e.interactiveDebounce)),Ue(y,t,e),_.popperChildren=Be(y),t.triggerTarget&&!e.triggerTarget?he(t.triggerTarget).forEach(function(e){e.removeAttribute("aria-expanded")}):e.triggerTarget&&l.removeAttribute("aria-expanded"),L(),_.popperInstance&&(xe.some(function(e){return Q(n,e)&&n[e]!==t[e]})?(e=_.popperInstance.reference,_.popperInstance.destroy(),W(),_.popperInstance.reference=e,_.state.isVisible&&_.popperInstance.enableEventListeners()):_.popperInstance.update()),M("onAfterUpdate",[_,n]))},setContent:function(e){_.setProps({content:e})},show:function(e){void 0===e&&(e=ee(_.props.duration,0,Te.duration)),"production"!==We.env.NODE_ENV&&Ee(_.state.isDestroyed,we("show"));var t=_.state.isVisible,n=_.state.isDestroyed,r=!_.state.isEnabled,i=De.isTouch&&!_.props.touch;t||n||r||i||k().hasAttribute("disabled")||(_.popperInstance||W(),M("onShow",[_],!1),!1!==_.props.onShow(_)&&(P(),y.style.visibility="visible",_.state.isVisible=!0,_.state.isMounted||ae(x.concat(y),0),a=function(){_.state.isVisible&&(ae([y],_.props.updateDuration),ae(x,e),se(x,"visible"),D(),L(),ge(Ge,_),Ie(!0),_.state.isMounted=!0,M("onMount",[_]),j(e,function(){_.state.isShown=!0,M("onShown",[_])}))},function(){m=0;var e=_.props.appendTo,t=k(),n=_.props.interactive&&e===Te.appendTo||"parent"===e?t.parentNode:re(e,[t]);n.contains(y)||n.appendChild(y),"production"!==We.env.NODE_ENV&&Ee(_.props.interactive&&e===Te.appendTo&&t.nextElementSibling!==y,["Interactive tippy element may not be accessible via keyboard navigation","because it is not directly after the reference element in the DOM source","order.","\n\n","Using a wrapper
      or tag around the reference element solves","this by creating a new parentNode context.","\n\n","Specifying `appendTo: document.body` silences this warning, but it","assumes you are using a focus management solution to handle keyboard","navigation.","\n\n","See: https://atomiks.github.io/tippyjs/accessibility/#interactivity"].join(" ")),ie(_.popperInstance.modifiers,"flip","enabled",_.props.flip),_.popperInstance.enableEventListeners(),_.popperInstance.update()}()))},hide:function(e){void 0===e&&(e=ee(_.props.duration,1,Te.duration)),"production"!==We.env.NODE_ENV&&Ee(_.state.isDestroyed,we("hide"));var t=!_.state.isVisible&&!d,n=_.state.isDestroyed,r=!_.state.isEnabled&&!d;t||n||r||(M("onHide",[_],!1),!1===_.props.onHide(_)&&!d||(R(),y.style.visibility="hidden",_.state.isVisible=!1,_.state.isShown=!1,ae(x,e),se(x,"hidden"),D(),L(),j(e,function(){!_.state.isVisible&&y.parentNode&&y.parentNode.contains(y)&&(_.popperInstance.disableEventListeners(),_.popperInstance.options.placement=_.props.placement,y.parentNode.removeChild(y),0===(Ge=Ge.filter(function(e){return e!==_})).length&&Ie(!1),_.state.isMounted=!1,M("onHidden",[_]))})))},enable:function(){_.state.isEnabled=!0},disable:function(){_.hide(),_.state.isEnabled=!1},destroy:function(){"production"!==We.env.NODE_ENV&&Ee(_.state.isDestroyed,we("destroy")),_.state.isDestroyed||(d=!0,_.clearDelayTimeouts(),_.hide(0),U(),delete l._tippy,_.popperInstance&&_.popperInstance.destroy(),d=!1,_.state.isDestroyed=!0,M("onDestroy",[_]))}};l._tippy=_,y._tippy=_;var S=E.map(function(e){return e.fn(_)}),O=l.hasAttribute("aria-expanded");return z(),L(),r.lazy||W(),M("onCreate",[_]),r.showOnCreate&&$(),y.addEventListener("mouseenter",function(){_.props.interactive&&_.state.isVisible&&_.clearDelayTimeouts()}),y.addEventListener("mouseleave",function(e){_.props.interactive&&fe(_.props.trigger,"mouseenter")&&(v(e),g.addEventListener("mousemove",v))}),_;function C(){var e=_.props.touch;return Array.isArray(e)?e:[e,0]}function N(){return"hold"===C()[0]}function k(){return u||l}function A(e){return _.state.isMounted&&!_.state.isVisible||De.isTouch||o&&"focus"===o.type?0:ee(_.props.delay,e?0:1,Te.delay)}function M(t,n,e){void 0===e&&(e=!0),S.forEach(function(e){Q(e,t)&&e[t].apply(e,n)}),e&&(e=_.props)[t].apply(e,n)}function D(){var n,r,e=_.props.aria;e&&(n="aria-"+e,r=T.id,he(_.props.triggerTarget||l).forEach(function(e){var t=e.getAttribute(n);_.state.isVisible?e.setAttribute(n,t?t+" "+r:r):(t=t&&t.replace(r,"").trim())?e.setAttribute(n,t):e.removeAttribute(n)}))}function L(){O||he(_.props.triggerTarget||l).forEach(function(e){_.props.interactive?e.setAttribute("aria-expanded",_.state.isVisible&&e===k()?"true":"false"):e.removeAttribute("aria-expanded")})}function I(){g.body.removeEventListener("mouseleave",X),g.removeEventListener("mousemove",v),Ke=Ke.filter(function(e){return e!==v})}function F(e){if(!_.props.interactive||!y.contains(e.target)){if(k().contains(e.target)){if(De.isTouch)return;if(_.state.isVisible&&fe(_.props.trigger,"click"))return}!0===_.props.hideOnClick&&(f=!1,_.clearDelayTimeouts(),_.hide(),p=!0,setTimeout(function(){p=!1}),_.state.isMounted||R())}}function P(){g.addEventListener("mousedown",F,!0)}function R(){g.removeEventListener("mousedown",F,!0)}function j(e,t){function n(e){e.target===T&&(Ve(T,"remove",n),t())}if(0===e)return t();Ve(T,"remove",s),Ve(T,"add",n),s=n}function B(t,n,r){void 0===r&&(r=!1),he(_.props.triggerTarget||l).forEach(function(e){e.addEventListener(t,n,r),h.push({node:e,eventType:t,handler:n,options:r})})}function z(){N()&&(B("touchstart",V,Ce),B("touchend",Y,Ce)),pe(_.props.trigger).forEach(function(e){if("manual"!==e)switch(B(e,V),e){case"mouseenter":B("mouseleave",Y);break;case"focus":B(Le?"focusout":"blur",K);break;case"focusin":B("focusout",K)}})}function U(){h.forEach(function(e){var t=e.node,n=e.eventType,r=e.handler,e=e.options;t.removeEventListener(n,r,e)}),h=[]}function V(t){var e,n,r=!1;!_.state.isEnabled||G(t)||p||(u=(o=t).currentTarget,L(),!_.state.isVisible&&ne(t)&&Ke.forEach(function(e){return e(t)}),"click"!==t.type||fe(_.props.trigger,"mouseenter")&&!f||!1===_.props.hideOnClick||!_.state.isVisible?(e=(n=C())[0],n=n[1],De.isTouch&&"hold"===e&&n?i=setTimeout(function(){$(t)},n):$(t)):r=!0,"click"===t.type&&(f=!r),r&&X(t))}function H(e){var a,s,t=de(e.target,function(e){return e===l||e===y});"mousemove"===e.type&&t||(t=ce(y.querySelectorAll(Me)).concat(y).map(function(e){var t=e._tippy,n=t.popperChildren.tooltip,t=t.props.interactiveBorder;return{popperRect:e.getBoundingClientRect(),tooltipRect:n.getBoundingClientRect(),interactiveBorder:t}}),a=e.clientX,s=e.clientY,t.every(function(e){var t=e.popperRect,n=e.tooltipRect,r=e.interactiveBorder,i=Math.min(t.top,n.top),o=Math.max(t.right,n.right),e=Math.max(t.bottom,n.bottom),n=Math.min(t.left,n.left);return r element.cloneNode(true)"].join(" ")));t=t.reduce(function(e,t){t=t&&_(t,a);return t&&e.push(t),e},[]);return l(e)?t[0]:t}S.version="5.2.1",S.defaultProps=Te,S.setDefaultProps=o,S.currentInput=De,C.BACKDROP_CLASS="tippy-backdrop",C.ROUND_ARROW='',C._extends=Z,C.arrayFrom=ce,C.closestCallback=de,C.createTippyWithPlugins=function(r){"production"!==We.env.NODE_ENV&&Ee(!0,["createTippyWithPlugins([...]) has been deprecated.","\n\n","Use tippy.setDefaultProps({plugins: [...]}) instead."].join(" "));function e(e,t,n){return void 0===n&&(n=[]),n=(t=void 0===t?{}:t).plugins||n,S(e,Z({},t,{plugins:[].concat(r,n)}))}return e.version="5.2.1",e.defaultProps=Te,e.setDefaultProps=o,e.currentInput=De,e},C.currentInput=De,C.defaultProps=Te,C.div=oe,C.errorWhen=u,C.getBasePlacement=Fe,C.getOwnerDocument=ve,C.hideAll=function(e){var e=void 0===e?{}:e,n=e.exclude,r=e.duration;Ge.forEach(function(e){var t=!1;(t=n?i(n)?e.reference===n:e.popper===n.popper:t)||e.hide(r)})},C.includes=fe,C.isBrowser=e,C.isMouseEvent=ne,C.normalizeToArray=he,C.removeProperties=a,C.setVisibilityState=se,C.tippy=S,C.useIfDefined=me,C.warnWhen=Ee}.call(this)}.call(this,O("_process"))},{_process:4,"popper.js":3}],7:[function(i,e,o){!function(f){!function(){"use strict";Object.defineProperty(o,"__esModule",{value:!0});var y=i("./tippy.chunk.cjs.js");i("popper.js");var d={mouseover:"mouseenter",focusin:"focus",click:"click"},e={name:"animateFill",defaultValue:!1,fn:function(e){var t=e.popperChildren,n=t.tooltip,r=t.content,i=e.props.animateFill?((t=y.div()).className=y.BACKDROP_CLASS,y.setVisibilityState([t],"hidden"),t):null;function o(){e.popperChildren.backdrop=i}return{onCreate:function(){i&&(o(),n.insertBefore(i,n.firstElementChild),n.setAttribute("data-animatefill",""),n.style.overflow="hidden",e.setProps({animation:"shift-away",arrow:!1}))},onMount:function(){var e,t;i&&(e=n.style.transitionDuration,t=Number(e.replace("ms","")),r.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y.setVisibilityState([i],"visible"),"production"!==f.env.NODE_ENV&&(y.warnWhen("absolute"!==getComputedStyle(i).position,"The `tippy.js/dist/backdrop.css` stylesheet has not been\n imported!\n \n The `animateFill` plugin requires this stylesheet to work."),y.warnWhen("none"===getComputedStyle(n).transform,"The `tippy.js/animations/shift-away.css` stylesheet has not\n been imported!\n \n The `animateFill` plugin requires this stylesheet to work.")))},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y.setVisibilityState([i],"hidden")},onAfterUpdate:function(){o()}}}},t={name:"followCursor",defaultValue:!1,fn:function(c){var d,f=c.reference,p=c.popper,m=null,e=y.getOwnerDocument(c.props.triggerTarget||f),n=null,r=!1,i=c.props;function t(){return"manual"===c.props.trigger.trim()}function o(){var e=!!t()||null!==n&&!(0===n.clientX&&0===n.clientY);return c.props.followCursor&&e}function h(){return y.currentInput.isTouch||"initial"===c.props.followCursor&&c.state.isVisible}function a(){c.popperInstance&&m&&(c.popperInstance.reference=m)}function s(){var e,t;!o()&&c.props.placement===i.placement||(t=(e=i.placement).split("-")[1],r=!0,c.setProps({placement:o()&&t?e.replace(t,"start"===t?"end":"start"):e}),r=!1)}function l(){c.popperInstance&&o()&&h()&&c.popperInstance.disableEventListeners()}function u(){o()?e.addEventListener("mousemove",b):a()}function v(){o()&&b(d)}function g(){e.removeEventListener("mousemove",b)}function b(e){var t,n,r,i,o,a,s=d=e,l=s.clientX,u=s.clientY;c.popperInstance&&c.state.currentPlacement&&(s=y.closestCallback(e.target,function(e){return e===f}),e=c.props.followCursor,t="horizontal"===e,n="vertical"===e,r=y.includes(["top","bottom"],y.getBasePlacement(c.state.currentPlacement)),e={size:e=r?p.offsetWidth:p.offsetHeight,x:r?e:0,y:r?0:e},i=e.size,o=e.x,a=e.y,!s&&c.props.interactive||(null===m&&(m=c.popperInstance.reference),c.popperInstance.reference={referenceNode:f,clientWidth:0,clientHeight:0,getBoundingClientRect:function(){var e=f.getBoundingClientRect();return{width:r?i:0,height:r?0:i,top:(t?e.top:u)-a,bottom:(t?e.bottom:u)+a,left:(n?e.left:l)-o,right:(n?e.right:l)+o}}},c.popperInstance.update()),h()&&g())}return{onAfterUpdate:function(e,t){var n;r||(n=t,Object.keys(n).forEach(function(e){i[e]=y.useIfDefined(n[e],i[e])}),t.placement&&s()),t.placement&&l(),requestAnimationFrame(v)},onMount:function(){v(),l()},onShow:function(){t()&&(d=n={clientX:0,clientY:0},s(),u())},onTrigger:function(e,t){n||(y.isMouseEvent(t)&&(n={clientX:t.clientX,clientY:t.clientY},d=t),s(),u())},onUntrigger:function(){c.state.isVisible||(g(),n=null)},onHidden:function(){g(),a(),n=null}}}},n={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t=e.reference;function n(){return e.props.inlinePositioning}return{onHidden:function(){n()&&(e.popperInstance.reference=t)},onShow:function(){n()&&(e.popperInstance.reference={referenceNode:t,clientWidth:0,clientHeight:0,getBoundingClientRect:function(){return function(t,e,n){if(n.length<2||null===t)return e;switch(t){case"top":case"bottom":var r=n[0],i=n[n.length-1],o="top"===t,a=r.top,s=i.bottom,l=(o?r:i).left,i=(o?r:i).right;return{top:a,bottom:s,left:l,right:i,width:i-l,height:s-a};case"left":case"right":var u=Math.min.apply(Math,n.map(function(e){return e.left})),c=Math.max.apply(Math,n.map(function(e){return e.right})),s=n.filter(function(e){return"left"===t?e.left===u:e.right===c}),a=s[0].top,s=s[s.length-1].bottom;return{top:a,bottom:s,left:u,right:c,width:c-u,height:s-a};default:return e}}(e.state.currentPlacement&&y.getBasePlacement(e.state.currentPlacement),t.getBoundingClientRect(),y.arrayFrom(t.getClientRects()))}})}}}},r={name:"sticky",defaultValue:!1,fn:function(n){var r=n.reference,i=n.popper;function o(e){return!0===n.props.sticky||n.props.sticky===e}var a=null,s=null;function l(){var e=o("reference")?(n.popperInstance?n.popperInstance.reference:r).getBoundingClientRect():null,t=o("popper")?i.getBoundingClientRect():null;(e&&u(a,e)||t&&u(s,t))&&n.popperInstance.update(),a=e,s=t,n.state.isMounted&&requestAnimationFrame(l)}return{onMount:function(){n.props.sticky&&l()}}}};function u(e,t){return!e||!t||e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left}o.createTippyWithPlugins=y.createTippyWithPlugins,o.default=y.tippy,o.hideAll=y.hideAll,o.roundArrow=y.ROUND_ARROW,o.animateFill=e,o.createSingleton=function(o,e,t){void 0===e&&(e={}),void 0===t&&(t=[]),"production"!==f.env.NODE_ENV&&y.errorWhen(!Array.isArray(o),["The first argument passed to createSingleton() must be an array of tippy","instances. The passed value was",String(o)].join(" ")),t=e.plugins||t,o.forEach(function(e){e.disable()});var a,s,l=y._extends({},y.defaultProps,{},e).aria,n=!1,u=o.map(function(e){return e.reference}),r={fn:function(r){function i(e){var t;a&&(t="aria-"+a,e&&!r.props.interactive?s.setAttribute(t,r.popperChildren.tooltip.id):s.removeAttribute(t))}return{onAfterUpdate:function(e,t){t=t.aria;void 0!==t&&t!==l&&(n?(n=!0,r.setProps({aria:null}),n=!1):l=t)},onDestroy:function(){o.forEach(function(e){e.enable()})},onMount:function(){i(!0)},onUntrigger:function(){i(!1)},onTrigger:function(e,t){var n=t.currentTarget,t=u.indexOf(n);n!==s&&(s=n,a=l,r.state.isVisible&&i(!0),r.popperInstance.reference=n,r.setContent(o[t].props.content))}}}};return y.tippy(y.div(),y._extends({},e,{plugins:[r].concat(t),aria:null,triggerTarget:u}))},o.delegate=function(e,r,t){void 0===t&&(t=[]),"production"!==f.env.NODE_ENV&&y.errorWhen(!(r&&r.target),["You must specity a `target` prop indicating a CSS selector string matching","the target elements that should receive a tippy."].join(" ")),t=r.plugins||t;var i=[],o=[],a=r.target,n=y.removeProperties(r,["target"]),s=y._extends({},n,{plugins:t,trigger:"manual"}),l=y._extends({},n,{plugins:t,showOnCreate:!0}),s=y.tippy(e,s);function u(e){var t,n;!e.target||(n=e.target.closest(a))&&(t=n.getAttribute("data-tippy-trigger")||r.trigger||y.defaultProps.trigger,!y.includes(t,d[e.type])||(n=y.tippy(n,l))&&(o=o.concat(n)))}function c(e,t,n,r){e.addEventListener(t,n,r=void 0===r?!1:r),i.push({node:e,eventType:t,handler:n,options:r})}return y.normalizeToArray(s).forEach(function(e){var t=e.destroy;e.destroy=function(e){(e=void 0===e?!0:e)&&o.forEach(function(e){e.destroy()}),o=[],i.forEach(function(e){var t=e.node,n=e.eventType,r=e.handler,e=e.options;t.removeEventListener(n,r,e)}),i=[],t()},c(e=e.reference,"mouseover",u),c(e,"focusin",u),c(e,"click",u)}),s},o.followCursor=t,o.inlinePositioning=n,o.sticky=r}.call(this)}.call(this,i("_process"))},{"./tippy.chunk.cjs.js":6,_process:4,"popper.js":3}],8:[function(e,t,n){"use strict";var r=a(e("mithril")),i=a(e("./view")),o=a(e("./texte/de"));function a(e){return e&&e.__esModule?e:{default:e}}document,window,domIsReady(function(){window.texte=o.default,r.default.mount(window.document.getElementById("gradido-mithril-user-search"),i.default)})},{"./texte/de":13,"./view":14,mithril:1}],9:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=o(e("mithril")),i=o(e("numeral"));function o(e){return e&&e.__esModule?e:{default:e}}var a=!1;n.default={view:function(e){return(0,r.default)("span",(e=e.attrs.centAmount/1e4,i.default.locale("de"),(0,i.default)(e).format("0,0.00")+" GDD"))},oninit:function(e){a||(i.default.register("locale","de",{delimiters:{thousands:".",decimal:","},currency:{symbol:"€"}}),i.default.locale("de"),a=!0)}}},{mithril:1,numeral:2}],10:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return{oncreate:function(e){(0,r.default)(e.dom,{content:e.attrs.accountState.getTooltipText(),placement:"right-start",theme:"rippleUI-theme",arrow:!1})},onremove:function(){},view:function(){return e}}},i(e("mithril"));var r=i(e("tippy.js"));function i(e){return e&&e.__esModule?e:{default:e}}},{mithril:1,"tippy.js":7}],11:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("mithril"))&&e.__esModule?e:{default:e};n.default={view:function(e){return(0,r.default)("div.modal.visible-modal",{tabindex:"-1",role:"dialog"},(0,r.default)("div.modal-dialog",{role:"document"},(0,r.default)("div.modal-content",[(0,r.default)("p.grid-header",e.attrs.title),(0,r.default)("div.modal-body",e.attrs.body),(0,r.default)("div.modal-footer",[(0,r.default)("button.btn.btn-primary",{type:"button",disabled:e.attrs.btnDisabled,"data-dismiss":"modal",onclick:e.attrs.dismiss},"Ok")])])))},oninit:function(e){}}},{mithril:1}],12:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("mithril"))&&e.__esModule?e:{default:e};function i(e,t){for(var n=0;n';if(t+='
      '+e.description.title+"
      ",null!=e.description.lines){for(var n in t+="
        ",e.description.lines){var r=e.description.lines[n],i=window.texte.ACCOUNT_STATES.LINES[n],n="mdi ";if("+"===r)n+=" mdi-check color-primary";else if("-"===r)n+=" mdi-close color-danger";else{if("/"!==r)continue;n+=" mdi-alert-circle-outline color-warning"}t+="
      • ",t+='',t+=" ",t+=""+i.title+": "+i[r]+"",t+="
      • "}t+="
      "}return t+"
      "}}]),e=o;function o(e){!function(e){if(!(e instanceof o))throw new TypeError("Cannot call a class as a function")}(this),this.stateName=e,this.texte=window.texte.ACCOUNT_STATES[e]}n.default=e},{mithril:1}],13:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0,n.default={ACCOUNT_STATES:{LINES:[{title:"Login-Server","+":"Das Benutzer-Konto liegt auf dem Login-Server!","-":"Das Benutzer-Konto existiert nicht auf dem Login-Server!"},{title:"Konto Aktivierung","+":"Der Benutzer hat sein Konto aktiviert!","-":"Der Benutzer hat noch nicht auf den Link in seiner E-Mail geklickt!"},{title:"Schlüsselpaar","+":"Es wurde bereits ein Schlüsselpaar für den Benutzer erzeugt und ihm eine Passphrase gezeigt!","-":"Es wurden noch keine Schlüssel und Passphrase für den Benutzer erzeugt!"},{title:"Gemeinschafts-Server","+":"Das Benutzer-Konto wurde auf auf den Gemeinschafts-Server kopiert!","-":"Das Benutzer-Konto wurde noch nicht auf den Gemeinschafts-Server kopiert!"},{title:"Gradidos","+":"Es können Gradidos an den Benutzer geschickt werden!","-":"Es können noch keine Gradidos an den Benutzer geschickt werden!","/":"Es können theoretisch Gradidos an den Benutzer geschickt werden, aber es ist nicht sicher ob er sie verwenden kann!"}],"account created":{title:"Konto angelegt",color:"secondary",description:{title:"Das Konto wurde auf dem Login-Server angelegt, vermutlich durch eine elopage-Anmeldung.",lines:["+","-","-","-","-"]},todo:{title:"Als nächstes müsste der Benutzer den Link in seiner E-Mail anklicken und den Anweisungen folgen. ",lines:["Stimmt die E-Mail Adresse? Hat der Benutzer in seinem Spam-Verzeichnis nachgesehen?","{{verification-resend}}","{{mailto-verification-resend}}"]}},"account not on login-server":{title:"Konto nicht auf Login-Server",color:"danger",description:{title:"Das Konto existiert nicht (mehr) auf dem Login-Server: ein Fehler oder es wurde nur teilweise gelöscht.",lines:["-","+","+","+","/"]},todo:{title:"Wenn der Benutzer seine Passphrase hat, kann er sein Konto auf dem Login-Server wiederherstellen, ansonsten bleibt eigentlich nur das Konto auf dem Gemeinschafts-Server zu löschen",lines:["Nachdem das Konto auf dem Login-Server kopiert wurde, bekommt der Benutzer automatisch eine E-Mail mit einem Link zur Kontoaktivierung zugeschickt.","{{copy-from-community-to-login-server}}","
      ","Es wird nur der Benutzer gelöscht, nicht seine Transaktionen. Zu diesen hat er wieder Zugriff wenn er sein Konto mit Hilfe seiner Passphrase wiederhergestellt hat.","{{user-transactions-overview}}","{{delete-from-community-server}}"]}},"email activated":{title:"Konto aktiviert",color:"primary",description:{title:"Das Konto wurde vom Benutzer aktiviert und Schlüssel erzeugt, aber noch nicht auf diesen Gemeinschafts-Server kopiert.",lines:["+","+","+","-","-"]},todo:{title:"Das Benutzer Konto müsste vom Login-Server auf den Gemeinschafts-Server kopiert werden.",lines:["{{copy-from-login-to-community-server}}"]}},"account copied to community":{title:"Konto auf Gemeinschafts-Server",color:"success",description:{title:"Das Konto ist vollständig aktiviert und es können Gradidos überwiesen werden.",lines:["+","+","+","+","+"]}},"email not activated":{title:"Konto nicht aktiviert",color:"warning",description:{title:"Das Konto wurde auf dem Login-Server angelegt, vermutlich durch eine elopage-Anmeldung. Es wurde aber noch nicht aktiviert!",lines:["+","-","-","-","-"]},todo:{title:"Als nächstes müsste der Benutzer den Link in seiner E-Mail anklicken und den Anweisungen folgen. ",lines:["Stimmt die E-Mail Adresse? Hat der Benutzer in seinem Spam-Verzeichnis nachgesehen?","{{verification-resend}}","{{mailto-verification-resend}}"]}},"account multiple times on login-server":{title:"Konto mehrfach vorhanden",color:"danger",description:{title:"Das Konto ist auf dem Login-Server mehrfach vorhanden, das sollte nicht sein, auf dem Login-Server muss ein Fehler passiert sein!!"},todo:{title:"Du solltest mit dem Entwickler in Kontakt treten.",lines:["{{mailto-developer}}"]}},"account not on community server":{title:"Konto nicht auf Gemeinschafts-Server",color:"secondary",description:{title:"Das Konto wurde auf dem Login-Server angelegt, aber existiert noch nicht auf dem Gemeinschafts-Server!",lines:["+",null,"-","-","-"]},todo:{title:"Das sollte eigentlich nicht passieren, du solltest mit dem Entwickler sprechen.",lines:["{{mailto-developer}}"]}},"no keys":{title:"Keine Schlüssel generiert",color:"warning",description:{title:"Das Konto wurde auf dem Login-Server angelegt, aber es wurden noch keine Schlüssel generiert!",lines:["+","+","-","-","-"]},todo:{title:"Der Benutzer muss sich mit seinen Daten einloggen, dann müsste er automatisch durch die Schlüsselgenerierung/Konto-Wiederherstellung geführt werden",lines:["{{mailto-user-login}}","Wenn der Benutzer sein Passwort vergessen hat, kann er sich auch eine Passwort Reset E-Mail zuschicken lassen.","{{reset-password}}","{{mailto-reset-password}}"]}}},NO_USER_FOUND:"Keine Benutzer gefunden",USER_FOUND:"Benutzer gefunden",NAME:"Name",EMAIL:"E-Mail",BALANCE:"Kontostand",PUBLIC_KEY:"Öffentlicher
      Schlüssel",CREATED:"Erstellt",COPY_FROM_LOGIN_TO_COMMUNITY:"Vom Login-Server zum Gemeinschafts-Server kopieren",COPY_FROM_LOGIN_TO_COMMUNITY_SUCCESS:"Kontodaten wurden erfolgreich vom Login-Server zu diesem Gemeinschafts-Server kopiert!",COPY_FROM_COMMUNITY_TO_LOGIN:"Vom Gemeinschafts-Server zum Login-Server kopieren",COPY_FROM_COMMUNITY_TO_LOGIN_SUCCESS:"Kontodaten wurden erfolgreich vom Gemeinschafts-Server zum Login-Server kopiert!",DELETE_FROM_COMMUNITY:"Benutzer Konto vom Gemeinschafts-Server löschen",DELETE_FROM_COMMUNITY_SUCCESS:"Benutzer Konto vom Gemeinschafts-Server erfolgreich gelöscht",VERIFICATION_EMAIL_RESEND:"Verification Email erneut zusenden",VERIFICATION_EMAIL_RESEND_SUCCESS:"Verification Email wird erneut zugestellt",COPY_FAILED:"Fehler beim Kopieren",DELETE_FAILED:"Fehler beim löschen",RESEND_FAILED:"Senden fehlgeschlagen",AJAX_CRITICAL:"Kritischer Fehler beim Ajax-Request",COPY_IN_PROGRESS:"Wird kopiert",DELETE_IN_PROGRESS:"Wird gelöscht",RESEND_IN_PROGRESS:"Wird gesendet",RECEIVE_TRANSACTIONS_COUNT:"Erhaltene Transaktionen: ",SENDED_TRANSACTIONS_COUNT:"gesendete Transaktionen: ",CREATION_TRANSACTIONS_COUNT:"erhaltende Schöpfungs-Transaktionen: "}},{}],14:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=a(e("mithril")),i=a(e("./userTable")),o=a(e("../model/AccountState"));function a(e){return e&&e.__esModule?e:{default:e}}n.default={view:function(e){return void 0===g_users?(0,r.default)(""):0"===e)return i.default.trust("

    ",{class:"select2-results__options select2-results__options--nested"});c.append(o),s.append(a),s.append(c)}else this.template(t,e);return p.StoreData(e,"data",t),e},n.prototype.bind=function(e,t){var l=this,i=e.id+"-results";this.$results.attr("id",i),e.on("results:all",function(t){l.clear(),l.append(t.data),e.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),e.on("results:append",function(t){l.append(t.data),e.isOpen()&&l.setClasses()}),e.on("query",function(t){l.hideMessages(),l.showLoading(t)}),e.on("select",function(){e.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),e.on("unselect",function(){e.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),e.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),e.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),e.on("results:toggle",function(){var t=l.getHighlightedResults();0!==t.length&&t.trigger("mouseup")}),e.on("results:select",function(){var t=l.getHighlightedResults();if(0!==t.length){var e=p.GetData(t[0],"data");"true"==t.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:e})}}),e.on("results:previous",function(){var t=l.getHighlightedResults(),e=l.$results.find("[aria-selected]"),i=e.index(t);if(!(i<=0)){var n=i-1;0===t.length&&(n=0);var r=e.eq(n);r.trigger("mouseenter");var s=l.$results.offset().top,a=r.offset().top,o=l.$results.scrollTop()+(a-s);0===n?l.$results.scrollTop(0):a-s<0&&l.$results.scrollTop(o)}}),e.on("results:next",function(){var t=l.getHighlightedResults(),e=l.$results.find("[aria-selected]"),i=e.index(t)+1;if(!(i>=e.length)){var n=e.eq(i);n.trigger("mouseenter");var r=l.$results.offset().top+l.$results.outerHeight(!1),s=n.offset().top+n.outerHeight(!1),a=l.$results.scrollTop()+s-r;0===i?l.$results.scrollTop(0):rthis.$results.outerHeight()||s<0)&&this.$results.scrollTop(r)}},n.prototype.template=function(t,e){var i=this.options.get("templateResult"),n=this.options.get("escapeMarkup"),r=i(t,e);null==r?e.style.display="none":"string"==typeof r?e.innerHTML=n(r):d(e).append(r)},n}),t.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),t.define("select2/selection/base",["jquery","../utils","../keys"],function(i,n,r){function s(t,e){this.$element=t,this.options=e,s.__super__.constructor.call(this)}return n.Extend(s,n.Observable),s.prototype.render=function(){var t=i('');return this._tabindex=0,null!=n.GetData(this.$element[0],"old-tabindex")?this._tabindex=n.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),t.attr("title",this.$element.attr("title")),t.attr("tabindex",this._tabindex),this.$selection=t},s.prototype.bind=function(t,e){var i=this,n=(t.id,t.id+"-results");this.container=t,this.$selection.on("focus",function(t){i.trigger("focus",t)}),this.$selection.on("blur",function(t){i._handleBlur(t)}),this.$selection.on("keydown",function(t){i.trigger("keypress",t),t.which===r.SPACE&&t.preventDefault()}),t.on("results:focus",function(t){i.$selection.attr("aria-activedescendant",t.data._resultId)}),t.on("selection:update",function(t){i.update(t.data)}),t.on("open",function(){i.$selection.attr("aria-expanded","true"),i.$selection.attr("aria-owns",n),i._attachCloseHandler(t)}),t.on("close",function(){i.$selection.attr("aria-expanded","false"),i.$selection.removeAttr("aria-activedescendant"),i.$selection.removeAttr("aria-owns"),i.$selection.focus(),window.setTimeout(function(){i.$selection.focus()},0),i._detachCloseHandler(t)}),t.on("enable",function(){i.$selection.attr("tabindex",i._tabindex)}),t.on("disable",function(){i.$selection.attr("tabindex","-1")})},s.prototype._handleBlur=function(t){var e=this;window.setTimeout(function(){document.activeElement==e.$selection[0]||i.contains(e.$selection[0],document.activeElement)||e.trigger("blur",t)},1)},s.prototype._attachCloseHandler=function(t){i(document.body).on("mousedown.select2."+t.id,function(t){var e=i(t.target).closest(".select2");i(".select2.select2-container--open").each(function(){i(this),this!=e[0]&&n.GetData(this,"element").select2("close")})})},s.prototype._detachCloseHandler=function(t){i(document.body).off("mousedown.select2."+t.id)},s.prototype.position=function(t,e){e.find(".selection").append(t)},s.prototype.destroy=function(){this._detachCloseHandler(this.container)},s.prototype.update=function(t){throw new Error("The `update` method must be defined in child classes.")},s}),t.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(t,e,i,n){function r(){r.__super__.constructor.apply(this,arguments)}return i.Extend(r,e),r.prototype.render=function(){var t=r.__super__.render.call(this);return t.addClass("select2-selection--single"),t.html(''),t},r.prototype.bind=function(e,t){var i=this;r.__super__.bind.apply(this,arguments);var n=e.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",n).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",n),this.$selection.on("mousedown",function(t){1===t.which&&i.trigger("toggle",{originalEvent:t})}),this.$selection.on("focus",function(t){}),this.$selection.on("blur",function(t){}),e.on("focus",function(t){e.isOpen()||i.$selection.focus()})},r.prototype.clear=function(){var t=this.$selection.find(".select2-selection__rendered");t.empty(),t.removeAttr("title")},r.prototype.display=function(t,e){var i=this.options.get("templateSelection");return this.options.get("escapeMarkup")(i(t,e))},r.prototype.selectionContainer=function(){return t("")},r.prototype.update=function(t){if(0!==t.length){var e=t[0],i=this.$selection.find(".select2-selection__rendered"),n=this.display(e,i);i.empty().append(n),i.attr("title",e.title||e.text)}else this.clear()},r}),t.define("select2/selection/multiple",["jquery","./base","../utils"],function(r,t,o){function i(t,e){i.__super__.constructor.apply(this,arguments)}return o.Extend(i,t),i.prototype.render=function(){var t=i.__super__.render.call(this);return t.addClass("select2-selection--multiple"),t.html('
      '),t},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments),this.$selection.on("click",function(t){n.trigger("toggle",{originalEvent:t})}),this.$selection.on("click",".select2-selection__choice__remove",function(t){if(!n.options.get("disabled")){var e=r(this).parent(),i=o.GetData(e[0],"data");n.trigger("unselect",{originalEvent:t,data:i})}})},i.prototype.clear=function(){var t=this.$selection.find(".select2-selection__rendered");t.empty(),t.removeAttr("title")},i.prototype.display=function(t,e){var i=this.options.get("templateSelection");return this.options.get("escapeMarkup")(i(t,e))},i.prototype.selectionContainer=function(){return r('
    • ×
    • ')},i.prototype.update=function(t){if(this.clear(),0!==t.length){for(var e=[],i=0;i×');o.StoreData(i[0],"data",e),this.$selection.find(".select2-selection__rendered").prepend(i)}},t}),t.define("select2/selection/search",["jquery","../utils","../keys"],function(n,a,o){function t(t,e,i){t.call(this,e,i)}return t.prototype.render=function(t){var e=n('');this.$searchContainer=e,this.$search=e.find("input");var i=t.call(this);return this._transferTabIndex(),i},t.prototype.bind=function(t,e,i){var n=this;t.call(this,e,i),e.on("open",function(){n.$search.trigger("focus")}),e.on("close",function(){n.$search.val(""),n.$search.removeAttr("aria-activedescendant"),n.$search.trigger("focus")}),e.on("enable",function(){n.$search.prop("disabled",!1),n._transferTabIndex()}),e.on("disable",function(){n.$search.prop("disabled",!0)}),e.on("focus",function(t){n.$search.trigger("focus")}),e.on("results:focus",function(t){n.$search.attr("aria-activedescendant",t.id)}),this.$selection.on("focusin",".select2-search--inline",function(t){n.trigger("focus",t)}),this.$selection.on("focusout",".select2-search--inline",function(t){n._handleBlur(t)}),this.$selection.on("keydown",".select2-search--inline",function(t){if(t.stopPropagation(),n.trigger("keypress",t),n._keyUpPrevented=t.isDefaultPrevented(),t.which===o.BACKSPACE&&""===n.$search.val()){var e=n.$searchContainer.prev(".select2-selection__choice");if(0this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:e.term,params:e}}):t.call(this,e,i)},t}),t.define("select2/data/maximumSelectionLength",[],function(){function t(t,e,i){this.maximumSelectionLength=i.get("maximumSelectionLength"),t.call(this,e,i)}return t.prototype.query=function(i,n,r){var s=this;this.current(function(t){var e=null!=t?t.length:0;0=s.maximumSelectionLength?s.trigger("results:message",{message:"maximumSelected",args:{maximum:s.maximumSelectionLength}}):i.call(s,n,r)})},t}),t.define("select2/dropdown",["jquery","./utils"],function(e,t){function i(t,e){this.$element=t,this.options=e,i.__super__.constructor.call(this)}return t.Extend(i,t.Observable),i.prototype.render=function(){var t=e('');return t.attr("dir",this.options.get("dir")),this.$dropdown=t},i.prototype.bind=function(){},i.prototype.position=function(t,e){},i.prototype.destroy=function(){this.$dropdown.remove()},i}),t.define("select2/dropdown/search",["jquery","../utils"],function(r,t){function e(){}return e.prototype.render=function(t){var e=t.call(this),i=r('');return this.$searchContainer=i,this.$search=i.find("input"),e.prepend(i),e},e.prototype.bind=function(t,e,i){var n=this;t.call(this,e,i),this.$search.on("keydown",function(t){n.trigger("keypress",t),n._keyUpPrevented=t.isDefaultPrevented()}),this.$search.on("input",function(t){r(this).off("keyup")}),this.$search.on("keyup input",function(t){n.handleSearch(t)}),e.on("open",function(){n.$search.attr("tabindex",0),n.$search.focus(),window.setTimeout(function(){n.$search.focus()},0)}),e.on("close",function(){n.$search.attr("tabindex",-1),n.$search.val(""),n.$search.blur()}),e.on("focus",function(){e.isOpen()||n.$search.focus()}),e.on("results:all",function(t){null!=t.query.term&&""!==t.query.term||(n.showSearch(t)?n.$searchContainer.removeClass("select2-search--hide"):n.$searchContainer.addClass("select2-search--hide"))})},e.prototype.handleSearch=function(t){if(!this._keyUpPrevented){var e=this.$search.val();this.trigger("query",{term:e})}this._keyUpPrevented=!1},e.prototype.showSearch=function(t,e){return!0},e}),t.define("select2/dropdown/hidePlaceholder",[],function(){function t(t,e,i,n){this.placeholder=this.normalizePlaceholder(i.get("placeholder")),t.call(this,e,i,n)}return t.prototype.append=function(t,e){e.results=this.removePlaceholder(e.results),t.call(this,e)},t.prototype.normalizePlaceholder=function(t,e){return"string"==typeof e&&(e={id:"",text:e}),e},t.prototype.removePlaceholder=function(t,e){for(var i=e.slice(0),n=e.length-1;0<=n;n--){var r=e[n];this.placeholder.id===r.id&&i.splice(n,1)}return i},t}),t.define("select2/dropdown/infiniteScroll",["jquery"],function(r){function t(t,e,i,n){this.lastParams={},t.call(this,e,i,n),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return t.prototype.append=function(t,e){this.$loadingMore.remove(),this.loading=!1,t.call(this,e),this.showLoadingMore(e)&&this.$results.append(this.$loadingMore)},t.prototype.bind=function(t,e,i){var n=this;t.call(this,e,i),e.on("query",function(t){n.lastParams=t,n.loading=!0}),e.on("query:append",function(t){n.lastParams=t,n.loading=!0}),this.$results.on("scroll",function(){var t=r.contains(document.documentElement,n.$loadingMore[0]);!n.loading&&t&&n.$results.offset().top+n.$results.outerHeight(!1)+50>=n.$loadingMore.offset().top+n.$loadingMore.outerHeight(!1)&&n.loadMore()})},t.prototype.loadMore=function(){this.loading=!0;var t=r.extend({},{page:1},this.lastParams);t.page++,this.trigger("query:append",t)},t.prototype.showLoadingMore=function(t,e){return e.pagination&&e.pagination.more},t.prototype.createLoadingMore=function(){var t=r('
    • '),e=this.options.get("translations").get("loadingMore");return t.html(e(this.lastParams)),t},t}),t.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,o){function t(t,e,i){this.$dropdownParent=i.get("dropdownParent")||f(document.body),t.call(this,e,i)}return t.prototype.bind=function(t,e,i){var n=this,r=!1;t.call(this,e,i),e.on("open",function(){n._showDropdown(),n._attachPositioningHandler(e),r||(r=!0,e.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),e.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}))}),e.on("close",function(){n._hideDropdown(),n._detachPositioningHandler(e)}),this.$dropdownContainer.on("mousedown",function(t){t.stopPropagation()})},t.prototype.destroy=function(t){t.call(this),this.$dropdownContainer.remove()},t.prototype.position=function(t,e,i){e.attr("class",i.attr("class")),e.removeClass("select2"),e.addClass("select2-container--open"),e.css({position:"absolute",top:-999999}),this.$container=i},t.prototype.render=function(t){var e=f(""),i=t.call(this);return e.append(i),this.$dropdownContainer=e},t.prototype._hideDropdown=function(t){this.$dropdownContainer.detach()},t.prototype._attachPositioningHandler=function(t,e){var i=this,n="scroll.select2."+e.id,r="resize.select2."+e.id,s="orientationchange.select2."+e.id,a=this.$container.parents().filter(o.hasScroll);a.each(function(){o.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),a.on(n,function(t){var e=o.GetData(this,"select2-scroll-position");f(this).scrollTop(e.y)}),f(window).on(n+" "+r+" "+s,function(t){i._positionDropdown(),i._resizeDropdown()})},t.prototype._detachPositioningHandler=function(t,e){var i="scroll.select2."+e.id,n="resize.select2."+e.id,r="orientationchange.select2."+e.id;this.$container.parents().filter(o.hasScroll).off(i),f(window).off(i+" "+n+" "+r)},t.prototype._positionDropdown=function(){var t=f(window),e=this.$dropdown.hasClass("select2-dropdown--above"),i=this.$dropdown.hasClass("select2-dropdown--below"),n=null,r=this.$container.offset();r.bottom=r.top+this.$container.outerHeight(!1);var s={height:this.$container.outerHeight(!1)};s.top=r.top,s.bottom=r.top+s.height;var a=this.$dropdown.outerHeight(!1),o=t.scrollTop(),l=t.scrollTop()+t.height(),h=or.bottom+a,c={left:r.left,top:s.bottom},d=this.$dropdownParent;"static"===d.css("position")&&(d=d.offsetParent());var p=d.offset();c.top-=p.top,c.left-=p.left,e||i||(n="below"),u||!h||e?!h&&u&&e&&(n="below"):n="above",("above"==n||e&&"below"!==n)&&(c.top=s.top-p.top-a),null!=n&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+n),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+n)),this.$dropdownContainer.css(c)},t.prototype._resizeDropdown=function(){var t={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(t.minWidth=t.width,t.position="relative",t.width="auto"),this.$dropdown.css(t)},t.prototype._showDropdown=function(t){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},t}),t.define("select2/dropdown/minimumResultsForSearch",[],function(){function t(t,e,i,n){this.minimumResultsForSearch=i.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),t.call(this,e,i,n)}return t.prototype.showSearch=function(t,e){return!(function t(e){for(var i=0,n=0;n');return t.attr("dir",this.options.get("dir")),this.$container=t,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(t[0],"element",this.$element),t},c}),t.define("jquery-mousewheel",["jquery"],function(t){return t}),t.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(r,t,s,e,a){if(null==r.fn.select2){var o=["open","close","destroy"];r.fn.select2=function(e){if("object"==typeof(e=e||{}))return this.each(function(){var t=r.extend(!0,{},e);new s(r(this),t)}),this;if("string"!=typeof e)throw new Error("Invalid arguments for Select2: "+e);var i,n=Array.prototype.slice.call(arguments,1);return this.each(function(){var t=a.GetData(this,"select2");null==t&&window.console&&console.error&&console.error("The select2('"+e+"') method was called on an element that is not using Select2."),i=t[e].apply(t,n)}),-1").attr("name",n.submitButton.name).val(u(n.submitButton).val()).appendTo(n.currentForm)),!(n.settings.submitHandler&&!n.settings.debug)||(e=n.settings.submitHandler.call(n,n.currentForm,i),t&&t.remove(),void 0!==e&&e)}return n.settings.debug&&i.preventDefault(),n.cancelSubmit?(n.cancelSubmit=!1,t()):n.form()?n.pendingRequest?!(n.formSubmitted=!0):t():(n.focusInvalid(),!1)})),n)}t&&t.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing.")},valid:function(){var t,e,i;return u(this[0]).is("form")?t=this.validate().form():(i=[],t=!0,e=u(this[0].form).validate(),this.each(function(){(t=e.element(this)&&t)||(i=i.concat(e.errorList))}),e.errorList=i),t},rules:function(t,e){var i,n,r,s,a,o,l=this[0],h=void 0!==this.attr("contenteditable")&&"false"!==this.attr("contenteditable");if(null!=l&&(!l.form&&h&&(l.form=this.closest("form")[0],l.name=this.attr("name")),null!=l.form)){if(t)switch(i=u.data(l.form,"validator").settings,n=i.rules,r=u.validator.staticRules(l),t){case"add":u.extend(r,u.validator.normalizeRule(e)),delete r.messages,n[l.name]=r,e.messages&&(i.messages[l.name]=u.extend(i.messages[l.name],e.messages));break;case"remove":return e?(o={},u.each(e.split(/\s/),function(t,e){o[e]=r[e],delete r[e]}),o):(delete n[l.name],r)}return(s=u.validator.normalizeRules(u.extend({},u.validator.classRules(l),u.validator.attributeRules(l),u.validator.dataRules(l),u.validator.staticRules(l)),l)).required&&(a=s.required,delete s.required,s=u.extend({required:a},s)),s.remote&&(a=s.remote,delete s.remote,s=u.extend(s,{remote:a})),s}}}),u.extend(u.expr.pseudos||u.expr[":"],{blank:function(t){return!u.trim(""+u(t).val())},filled:function(t){var e=u(t).val();return null!==e&&!!u.trim(""+e)},unchecked:function(t){return!u(t).prop("checked")}}),u.validator=function(t,e){this.settings=u.extend(!0,{},u.validator.defaults,t),this.currentForm=e,this.init()},u.validator.format=function(i,t){return 1===arguments.length?function(){var t=u.makeArray(arguments);return t.unshift(i),u.validator.format.apply(this,t)}:(void 0===t||(2Warning: No message defined for "+t.name+""),n=/\$?\{(\d+)\}/g;return"function"==typeof i?i=i.call(this,e.parameters,t):n.test(i)&&(i=u.validator.format(i.replace(n,"{$1}"),e.parameters)),i},formatAndAdd:function(t,e){var i=this.defaultMessage(t,e);this.errorList.push({message:i,element:t,method:e.method}),this.errorMap[t.name]=i,this.submitted[t.name]=i},addWrapper:function(t){return this.settings.wrapper&&(t=t.add(t.parent(this.settings.wrapper))),t},defaultShowErrors:function(){var t,e,i;for(t=0;this.errorList[t];t++)i=this.errorList[t],this.settings.highlight&&this.settings.highlight.call(this,i.element,this.settings.errorClass,this.settings.validClass),this.showLabel(i.element,i.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(t=0;this.successList[t];t++)this.showLabel(this.successList[t]);if(this.settings.unhighlight)for(t=0,e=this.validElements();e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return u(this.errorList).map(function(){return this.element})},showLabel:function(t,e){var i,n,r,s,a=this.errorsFor(t),o=this.idOrName(t),l=u(t).attr("aria-describedby");a.length?(a.removeClass(this.settings.validClass).addClass(this.settings.errorClass),a.html(e)):(i=a=u("<"+this.settings.errorElement+">").attr("id",o+"-error").addClass(this.settings.errorClass).html(e||""),this.settings.wrapper&&(i=a.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(i):this.settings.errorPlacement?this.settings.errorPlacement.call(this,i,u(t)):i.insertAfter(t),a.is("label")?a.attr("for",o):0===a.parents("label[for='"+this.escapeCssMeta(o)+"']").length&&(r=a.attr("id"),l?l.match(new RegExp("\\b"+this.escapeCssMeta(r)+"\\b"))||(l+=" "+r):l=r,u(t).attr("aria-describedby",l),(n=this.groups[t.name])&&(s=this,u.each(s.groups,function(t,e){e===n&&u("[name='"+s.escapeCssMeta(t)+"']",s.currentForm).attr("aria-describedby",a.attr("id"))})))),!e&&this.settings.success&&(a.text(""),"string"==typeof this.settings.success?a.addClass(this.settings.success):this.settings.success(a,t)),this.toShow=this.toShow.add(a)},errorsFor:function(t){var e=this.escapeCssMeta(this.idOrName(t)),i=u(t).attr("aria-describedby"),n="label[for='"+e+"'], label[for='"+e+"'] *";return i&&(n=n+", #"+this.escapeCssMeta(i).replace(/\s+/g,", #")),this.errors().filter(n)},escapeCssMeta:function(t){return t.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(t){return this.groups[t.name]||(this.checkable(t)?t.name:t.id||t.name)},validationTargetFor:function(t){return this.checkable(t)&&(t=this.findByName(t.name)),u(t).not(this.settings.ignore)[0]},checkable:function(t){return/radio|checkbox/i.test(t.type)},findByName:function(t){return u(this.currentForm).find("[name='"+this.escapeCssMeta(t)+"']")},getLength:function(t,e){switch(e.nodeName.toLowerCase()){case"select":return u("option:selected",e).length;case"input":if(this.checkable(e))return this.findByName(e.name).filter(":checked").length}return t.length},depend:function(t,e){return!this.dependTypes[typeof t]||this.dependTypes[typeof t](t,e)},dependTypes:{boolean:function(t){return t},string:function(t,e){return!!u(t,e.form).length},function:function(t,e){return t(e)}},optional:function(t){var e=this.elementValue(t);return!u.validator.methods.required.call(this,e,t)&&"dependency-mismatch"},startRequest:function(t){this.pending[t.name]||(this.pendingRequest++,u(t).addClass(this.settings.pendingClass),this.pending[t.name]=!0)},stopRequest:function(t,e){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[t.name],u(t).removeClass(this.settings.pendingClass),e&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(u(this.currentForm).submit(),this.submitButton&&u("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!e&&0===this.pendingRequest&&this.formSubmitted&&(u(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(t,e){return e="string"==typeof e&&e||"remote",u.data(t,"previousValue")||u.data(t,"previousValue",{old:null,valid:!0,message:this.defaultMessage(t,{method:e})})},destroy:function(){this.resetForm(),u(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur").find(".validate-lessThan-blur").off(".validate-lessThan").removeClass("validate-lessThan-blur").find(".validate-lessThanEqual-blur").off(".validate-lessThanEqual").removeClass("validate-lessThanEqual-blur").find(".validate-greaterThanEqual-blur").off(".validate-greaterThanEqual").removeClass("validate-greaterThanEqual-blur").find(".validate-greaterThan-blur").off(".validate-greaterThan").removeClass("validate-greaterThan-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(t,e){t.constructor===String?this.classRuleSettings[t]=e:u.extend(this.classRuleSettings,t)},classRules:function(t){var e={},i=u(t).attr("class");return i&&u.each(i.split(" "),function(){this in u.validator.classRuleSettings&&u.extend(e,u.validator.classRuleSettings[this])}),e},normalizeAttributeRule:function(t,e,i,n){/min|max|step/.test(i)&&(null===e||/number|range|text/.test(e))&&(n=Number(n),isNaN(n)&&(n=void 0)),n||0===n?t[i]=n:e===i&&"range"!==e&&(t[i]=!0)},attributeRules:function(t){var e,i,n={},r=u(t),s=t.getAttribute("type");for(e in u.validator.methods)i="required"===e?(""===(i=t.getAttribute(e))&&(i=!0),!!i):r.attr(e),this.normalizeAttributeRule(n,s,e,i);return n.maxlength&&/-1|2147483647|524288/.test(n.maxlength)&&delete n.maxlength,n},dataRules:function(t){var e,i,n={},r=u(t),s=t.getAttribute("type");for(e in u.validator.methods)""===(i=r.data("rule"+e.charAt(0).toUpperCase()+e.substring(1).toLowerCase()))&&(i=!0),this.normalizeAttributeRule(n,s,e,i);return n},staticRules:function(t){var e={},i=u.data(t.form,"validator");return i.settings.rules&&(e=u.validator.normalizeRule(i.settings.rules[t.name])||{}),e},normalizeRules:function(n,r){return u.each(n,function(t,e){if(!1!==e){if(e.param||e.depends){var i=!0;switch(typeof e.depends){case"string":i=!!u(e.depends,r.form).length;break;case"function":i=e.depends.call(r,r)}i?n[t]=void 0===e.param||e.param:(u.data(r.form,"validator").resetElements(u(r)),delete n[t])}}else delete n[t]}),u.each(n,function(t,e){n[t]=u.isFunction(e)&&"normalizer"!==t?e(r):e}),u.each(["minlength","maxlength"],function(){n[this]&&(n[this]=Number(n[this]))}),u.each(["rangelength","range"],function(){var t;n[this]&&(u.isArray(n[this])?n[this]=[Number(n[this][0]),Number(n[this][1])]:"string"==typeof n[this]&&(t=n[this].replace(/[\[\]]/g,"").split(/[\s,]+/),n[this]=[Number(t[0]),Number(t[1])]))}),u.validator.autoCreateRanges&&(null!=n.min&&null!=n.max&&(n.range=[n.min,n.max],delete n.min,delete n.max),null!=n.minlength&&null!=n.maxlength&&(n.rangelength=[n.minlength,n.maxlength],delete n.minlength,delete n.maxlength)),n},normalizeRule:function(t){if("string"==typeof t){var e={};u.each(t.split(/\s/),function(){e[this]=!0}),t=e}return t},addMethod:function(t,e,i){u.validator.methods[t]=e,u.validator.messages[t]=void 0!==i?i:u.validator.messages[t],e.length<3&&u.validator.addClassRules(t,u.validator.normalizeRule(t))},methods:{required:function(t,e,i){if(!this.depend(i,e))return"dependency-mismatch";if("select"!==e.nodeName.toLowerCase())return this.checkable(e)?0=i[0]&&n<=i[1]},min:function(t,e,i){return this.optional(e)||i<=t},max:function(t,e,i){return this.optional(e)||t<=i},range:function(t,e,i){return this.optional(e)||t>=i[0]&&t<=i[1]},step:function(t,e,i){var n,r=u(e).attr("type"),s="Step attribute on input type "+r+" is not supported.",a=new RegExp("\\b"+r+"\\b"),o=function(t){var e=(""+t).match(/(?:\.(\d+))?$/);return e&&e[1]?e[1].length:0},l=function(t){return Math.round(t*Math.pow(10,n))},h=!0;if(r&&!a.test(["text","number","range"].join()))throw new Error(s);return n=o(i),(o(t)>n||l(t)%l(i)!=0)&&(h=!1),this.optional(e)||h},equalTo:function(t,e,i){var n=u(i);return this.settings.onfocusout&&n.not(".validate-equalTo-blur").length&&n.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){u(e).valid()}),t===n.val()},remote:function(s,a,t,o){if(this.optional(a))return"dependency-mismatch";o="string"==typeof o&&o||"remote";var l,e,i,h=this.previousValue(a,o);return this.settings.messages[a.name]||(this.settings.messages[a.name]={}),h.originalMessage=h.originalMessage||this.settings.messages[a.name][o],this.settings.messages[a.name][o]=h.message,t="string"==typeof t&&{url:t}||t,i=u.param(u.extend({data:s},t.data)),h.old===i?h.valid:(h.old=i,(l=this).startRequest(a),(e={})[a.name]=s,u.ajax(u.extend(!0,{mode:"abort",port:"validate"+a.name,dataType:"json",data:e,context:l.currentForm,success:function(t){var e,i,n,r=!0===t||"true"===t;l.settings.messages[a.name][o]=h.originalMessage,r?(n=l.formSubmitted,l.resetInternals(),l.toHide=l.errorsFor(a),l.formSubmitted=n,l.successList.push(a),l.invalid[a.name]=!1,l.showErrors()):(e={},i=t||l.defaultMessage(a,{method:o,parameters:s}),e[a.name]=h.message=i,l.invalid[a.name]=!0,l.showErrors(e)),h.valid=r,l.stopRequest(a,r)}},t)),"pending")}}});var n,r={};return u.ajaxPrefilter?u.ajaxPrefilter(function(t,e,i){var n=t.port;"abort"===t.mode&&(r[n]&&r[n].abort(),r[n]=i)}):(n=u.ajax,u.ajax=function(t){var e=("mode"in t?t:u.ajaxSettings).mode,i=("port"in t?t:u.ajaxSettings).port;return"abort"===e?(r[i]&&r[i].abort(),r[i]=n.apply(this,arguments),r[i]):n.apply(this,arguments)}),u}),function(v){"use strict";v.event.special.destroyed||(v.event.special.destroyed={remove:function(t){t.handler&&t.handler()}}),v.fn.extend({maxlength:function(u,t){function h(t){var e=t.val();return e=u.twoCharLinebreak?e.replace(/\r(?!\n)|\n(?!\r)/g,"\r\n"):e.replace(new RegExp("\r?\n","g"),"\n"),u.utf8?function(t){for(var e=0,i=0;ia&&(l=!1),l?d(e,n.removeClass(u.limitReachedClass).addClass(u.warningClass)):(r=e,n.css({display:"none"}),r.trigger("maxlength.hidden"))):d(e,n.removeClass(u.warningClass).addClass(u.limitReachedClass))),u.allowOverMax&&(t<0?e.addClass("overmax"):e.removeClass("overmax"))}function g(t,e){var i,n,r=(n=(i=t)[0],v.extend({},"function"==typeof n.getBoundingClientRect?n.getBoundingClientRect():{width:n.offsetWidth,height:n.offsetHeight},i.offset()));if("function"!==v.type(u.placement))if(v.isPlainObject(u.placement))!function(t,e){if(t&&e){var n={};v.each(["top","bottom","left","right","position"],function(t,e){var i=u.placement[e];void 0!==i&&(n[e]=i)}),e.css(n)}}(u.placement,e);else{var s=t.outerWidth(),a=e.outerWidth(),o=e.width(),l=e.height();switch(u.appendToParent&&(r.top-=t.parent().offset().top,r.left-=t.parent().offset().left),u.placement){case"bottom":e.css({top:r.top+r.height,left:r.left+r.width/2-o/2});break;case"top":e.css({top:r.top-l,left:r.left+r.width/2-o/2});break;case"left":e.css({top:r.top+r.height/2-l/2,left:r.left-o});break;case"right":e.css({top:r.top+r.height/2-l/2,left:r.left+r.width});break;case"bottom-right":e.css({top:r.top+r.height,left:r.left+r.width});break;case"top-right":e.css({top:r.top-l,left:r.left+s});break;case"top-left":e.css({top:r.top-l,left:r.left-a});break;case"bottom-left":e.css({top:r.top+t.outerHeight(),left:r.left-a});break;case"centered-right":e.css({top:r.top+l/2,left:r.left+s-a-3});break;case"bottom-right-inside":e.css({top:r.top+r.height,left:r.left+r.width-a});break;case"top-right-inside":e.css({top:r.top-l,left:r.left+s-a});break;case"top-left-inside":e.css({top:r.top-l,left:r.left});break;case"bottom-left-inside":e.css({top:r.top+t.outerHeight(),left:r.left})}}else u.placement(t,e,r)}function m(t){var e="maxlength";return u.allowOverMax&&(e="data-bs-mxl"),t.attr(e)||t.attr("size")}var e=v("body");return v.isFunction(u)&&!t&&(t=u,u={}),u=v.extend({showOnReady:!1,alwaysShow:!1,threshold:10,warningClass:"label label-success",limitReachedClass:"label label-important label-danger",separator:" / ",preText:"",postText:"",showMaxLength:!0,placement:"bottom",message:null,showCharsTyped:!0,validate:!1,utf8:!1,appendToParent:!1,twoCharLinebreak:!0,allowOverMax:!1},u),this.each(function(){function t(){var t=p(h.val(),o,"0");o=m(h),l||(l=v('').css({display:"none",position:"absolute",whiteSpace:"nowrap",zIndex:1099}).html(t)),h.is("textarea")&&(h.data("maxlenghtsizex",h.outerWidth()),h.data("maxlenghtsizey",h.outerHeight()),h.mouseup(function(){(h.outerWidth()!==h.data("maxlenghtsizex")||h.outerHeight()!==h.data("maxlenghtsizey"))&&g(h,l),h.data("maxlenghtsizex",h.outerWidth()),h.data("maxlenghtsizey",h.outerHeight())})),u.appendToParent?(h.parent().append(l),h.parent().css("position","relative")):e.append(l),f(c(h,m(h)),h,o,l),g(h,l)}var o,l,h=v(this);v(window).resize(function(){l&&g(h,l)}),u.allowOverMax&&(v(this).attr("data-bs-mxl",v(this).attr("maxlength")),v(this).removeAttr("maxlength")),u.showOnReady?h.ready(function(){t()}):h.focus(function(){t()}),h.on("maxlength.reposition",function(){g(h,l)}),h.on("destroyed",function(){l&&l.remove()}),h.on("blur",function(){l&&!u.showOnReady&&l.remove()}),h.on("input",function(){var t,e,i,n,r=m(h),s=c(h,r),a=!0;return u.validate&&s<0?(e=r,i=(t=h).val(),n=0,u.twoCharLinebreak&&"\n"===(i=i.replace(/\r(?!\n)|\n(?!\r)/g,"\r\n")).substr(i.length-1)&&i.length%2==1&&(n=1),t.val(i.substr(0,e-n)),a=!1):f(s,h,o,l),("bottom-right-inside"===u.placement||"top-right-inside"===u.placement)&&g(h,l),a})})}})}(jQuery),function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],function(t){return i(t,window,document)}):"object"==typeof exports?module.exports=function(t,e){return t||(t=window),e||(e="undefined"!=typeof window?require("jquery"):require("jquery")(t)),i(e,t,t.document)}:i(jQuery,window,document)}(function($,M,y,W){"use strict";var f,b,e,t,T=function(S){this.$=function(t,e){return this.api(!0).$(t,e)},this._=function(t,e){return this.api(!0).rows(t,e).data()},this.api=function(t){return new b(t?se(this[f.iApiIndex]):this)},this.fnAddData=function(t,e){var i=this.api(!0),n=$.isArray(t)&&($.isArray(t[0])||$.isPlainObject(t[0]))?i.rows.add(t):i.row.add(t);return(e===W||e)&&i.draw(),n.flatten().toArray()},this.fnAdjustColumnSizing=function(t){var e=this.api(!0).columns.adjust(),i=e.settings()[0],n=i.oScroll;t===W||t?e.draw(!1):""===n.sX&&""===n.sY||Bt(i)},this.fnClearTable=function(t){var e=this.api(!0).clear();(t===W||t)&&e.draw()},this.fnClose=function(t){this.api(!0).row(t).child.hide()},this.fnDeleteRow=function(t,e,i){var n=this.api(!0),r=n.rows(t),s=r.settings()[0],a=s.aoData[r[0][0]];return r.remove(),e&&e.call(this,s,a),(i===W||i)&&n.draw(),a},this.fnDestroy=function(t){this.api(!0).destroy(t)},this.fnDraw=function(t){this.api(!0).draw(t)},this.fnFilter=function(t,e,i,n,r,s){var a=this.api(!0);null===e||e===W?a.search(t,i,n,s):a.column(e).search(t,i,n,s),a.draw()},this.fnGetData=function(t,e){var i=this.api(!0);if(t===W)return i.data().toArray();var n=t.nodeName?t.nodeName.toLowerCase():"";return e!==W||"td"==n||"th"==n?i.cell(t,e).data():i.row(t).data()||null},this.fnGetNodes=function(t){var e=this.api(!0);return t!==W?e.row(t).node():e.rows().nodes().flatten().toArray()},this.fnGetPosition=function(t){var e=this.api(!0),i=t.nodeName.toUpperCase();if("TR"==i)return e.row(t).index();if("TD"!=i&&"TH"!=i)return null;var n=e.cell(t).index();return[n.row,n.columnVisible,n.column]},this.fnIsOpen=function(t){return this.api(!0).row(t).child.isShown()},this.fnOpen=function(t,e,i){return this.api(!0).row(t).child(e,i).show().child()[0]},this.fnPageChange=function(t,e){var i=this.api(!0).page(t);(e===W||e)&&i.draw(!1)},this.fnSetColumnVis=function(t,e,i){var n=this.api(!0).column(t).visible(e);(i===W||i)&&n.columns.adjust().draw()},this.fnSettings=function(){return se(this[f.iApiIndex])},this.fnSort=function(t){this.api(!0).order(t).draw()},this.fnSortListener=function(t,e,i){this.api(!0).order.listener(t,e,i)},this.fnUpdate=function(t,e,i,n,r){var s=this.api(!0);return i===W||null===i?s.row(e).data(t):s.cell(e,i).data(t),(r===W||r)&&s.columns.adjust(),(n===W||n)&&s.draw(),0},this.fnVersionCheck=f.fnVersionCheck;var C=this,k=S===W,D=this.length;for(var t in k&&(S={}),this.oApi=this.internal=f.internal,T.ext.internal)t&&(this[t]=Re(t));return this.each(function(){var s,a=1").appendTo(h)),c.nTHead=i[0];var n=h.children("tbody");0===n.length&&(n=$("").appendTo(h)),c.nTBody=n[0];var r=h.children("tfoot");if(0===r.length&&0").appendTo(h)),0===r.length||0===r.children().length?h.addClass(d.sNoFooter):0/g,s=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,a=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^","-"].join("|\\")+")","g"),o=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,l=function(t){return!t||!0===t||"-"===t},p=function(t){var e=parseInt(t,10);return!isNaN(e)&&isFinite(t)?e:null},h=function(t,e){return i[e]||(i[e]=new RegExp(St(e),"g")),"string"==typeof t&&"."!==e?t.replace(/\./g,"").replace(i[e],"."):t},u=function(t,e,i){var n="string"==typeof t;return!!l(t)||(e&&n&&(t=h(t,e)),i&&n&&(t=t.replace(o,"")),!isNaN(parseFloat(t))&&isFinite(t))},c=function(t,e,i){return!!l(t)||(l(n=t)||"string"==typeof n)&&!!u(d(t),e,i)||null;var n},U=function(t,e,i){var n=[],r=0,s=t.length;if(i!==W)for(;r").css({position:"fixed",top:0,left:-1*$(M).scrollLeft(),height:1,width:1,overflow:"hidden"}).append($("
      ").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append($("
      ").css({width:"100%",height:10}))).appendTo("body"),n=i.children(),r=n.children();e.barWidth=n[0].offsetWidth-n[0].clientWidth,e.bScrollOversize=100===r[0].offsetWidth&&100!==n[0].clientWidth,e.bScrollbarLeft=1!==Math.round(r.offset().left),e.bBounding=!!i[0].getBoundingClientRect().width,i.remove()}$.extend(t.oBrowser,T.__browser),t.oScroll.iBarWidth=T.__browser.barWidth}function S(t,e,i,n,r,s){var a,o=n,l=!1;for(i!==W&&(a=i,l=!0);o!==r;)t.hasOwnProperty(o)&&(a=l?e(a,t[o],o,t):t[o],l=!0,o+=s);return a}function R(t,e){var i=T.defaults.column,n=t.aoColumns.length,r=$.extend({},T.models.oColumn,i,{nTh:e||y.createElement("th"),sTitle:i.sTitle?i.sTitle:e?e.innerHTML:"",aDataSort:i.aDataSort?i.aDataSort:[n],mData:i.mData?i.mData:n,idx:n});t.aoColumns.push(r);var s=t.aoPreSearchCols;s[n]=$.extend({},T.models.oSearch,s[n]),I(t,n,$(e).data())}function I(t,e,i){var n=t.aoColumns[e],r=t.oClasses,s=$(n.nTh);if(!n.sWidthOrig){n.sWidthOrig=s.attr("width")||null;var a=(s.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);a&&(n.sWidthOrig=a[1])}i!==W&&null!==i&&(L(i),A(T.defaults.column,i),i.mDataProp===W||i.mData||(i.mData=i.mDataProp),i.sType&&(n._sManualType=i.sType),i.className&&!i.sClass&&(i.sClass=i.className),i.sClass&&s.addClass(i.sClass),$.extend(n,i),oe(n,i,"sWidth","sWidthOrig"),i.iDataSort!==W&&(n.aDataSort=[i.iDataSort]),oe(n,i,"aDataSort"));var o=n.mData,l=Z(o),h=n.mRender?Z(n.mRender):null,u=function(t){return"string"==typeof t&&-1!==t.indexOf("@")};n._bAttrSrc=$.isPlainObject(o)&&(u(o.sort)||u(o.type)||u(o.filter)),n._setter=null,n.fnGetData=function(t,e,i){var n=l(t,e,W,i);return h&&e?h(n,e,t,i):n},n.fnSetData=function(t,e,i){return Q(o)(t,e,i)},"number"!=typeof o&&(t._rowReadObject=!0),t.oFeatures.bSort||(n.bSortable=!1,s.addClass(r.sSortableNone));var c=-1!==$.inArray("asc",n.asSorting),d=-1!==$.inArray("desc",n.asSorting);n.bSortable&&(c||d)?n.sSortingClassJUI=c&&!d?(n.sSortingClass=r.sSortableAsc,r.sSortJUIAscAllowed):!c&&d?(n.sSortingClass=r.sSortableDesc,r.sSortJUIDescAllowed):(n.sSortingClass=r.sSortable,r.sSortJUI):(n.sSortingClass=r.sSortableNone,n.sSortingClassJUI="")}function Y(t){if(!1!==t.oFeatures.bAutoWidth){var e=t.aoColumns;Ut(t);for(var i=0,n=e.length;ie&&t[r]--;-1!=n&&i===W&&t.splice(n,1)}function et(i,n,t,e){var r,s,a=i.aoData[n],o=function(t,e){for(;t.childNodes.length;)t.removeChild(t.firstChild);t.innerHTML=D(i,n,e,"display")};if("dom"!==t&&(t&&"auto"!==t||"dom"!==a.src)){var l=a.anCells;if(l)if(e!==W)o(l[e],e);else for(r=0,s=l.length;r").appendTo(a)),e=0,i=u.length;etr").attr("role","row"),$(a).find(">tr>th, >tr>td").addClass(h.sHeaderTH),$(o).find(">tr>th, >tr>td").addClass(h.sFooterTH),null!==o){var c=t.aoFooter[0];for(e=0,i=c.length;e=t.fnRecordsDisplay()?0:o,t.iInitDisplayStart=-1);var u=t._iDisplayStart,c=t.fnDisplayEnd();if(t.bDeferLoading)t.bDeferLoading=!1,t.iDraw++,Ht(t,!1);else if(l){if(!t.bDestroying&&!pt(t))return}else t.iDraw++;if(0!==h.length)for(var d=l?0:u,p=l?t.aoData.length:c,f=d;f",{class:s?r[0]:""}).append($("",{valign:"top",colSpan:F(t),class:t.oClasses.sRowEmpty}).html(b))[0]}ce(t,"aoHeaderCallback","header",[$(t.nTHead).children("tr")[0],J(t),u,c,h]),ce(t,"aoFooterCallback","footer",[$(t.nTFoot).children("tr")[0],J(t),u,c,h]);var x=$(t.nTBody);x.children().detach(),x.append($(i)),ce(t,"aoDrawCallback","draw",[t]),t.bSorted=!1,t.bFiltered=!1,t.bDrawing=!1}else Ht(t,!1)}function lt(t,e){var i=t.oFeatures,n=i.bSort,r=i.bFilter;n&&Qt(t),r?yt(t,t.oPreviousSearch):t.aiDisplay=t.aiDisplayMaster.slice(),!0!==e&&(t._iDisplayStart=0),t._drawHold=e,ot(t),t._drawHold=!1}function ht(t){var e=t.oClasses,i=$(t.nTable),n=$("
      ").insertBefore(i),r=t.oFeatures,s=$("
      ",{id:t.sTableId+"_wrapper",class:e.sWrapper+(t.nTFoot?"":" "+e.sNoFooter)});t.nHolding=n[0],t.nTableWrapper=s[0],t.nTableReinsertBefore=t.nTable.nextSibling;for(var a,o,l,h,u,c,d=t.sDom.split(""),p=0;p")[0],"'"==(h=d[p+1])||'"'==h){for(u="",c=2;d[p+c]!=h;)u+=d[p+c],c++;if("H"==u?u=e.sJUIHeader:"F"==u&&(u=e.sJUIFooter),-1!=u.indexOf(".")){var f=u.split(".");l.id=f[0].substr(1,f[0].length-1),l.className=f[1]}else"#"==u.charAt(0)?l.id=u.substr(1,u.length-1):l.className=u;p+=c}s.append(l),s=$(l)}else if(">"==o)s=s.parent();else if("l"==o&&r.bPaginate&&r.bLengthChange)a=It(t);else if("f"==o&&r.bFilter)a=vt(t);else if("r"==o&&r.bProcessing)a=Nt(t);else if("t"==o)a=zt(t);else if("i"==o&&r.bInfo)a=At(t);else if("p"==o&&r.bPaginate)a=Ft(t);else if(0!==T.ext.feature.length)for(var g=T.ext.feature,m=0,v=g.length;m',o=n.sSearch;o=o.match(/_INPUT_/)?o.replace("_INPUT_",a):o+a;var l=$("
      ",{id:s.f?null:e+"_filter",class:t.sFilter}).append($("
      ").addClass(t.sLength);return n.aanFeatures.l||(u[0].id=e+"_length"),u.children().append(n.oLanguage.sLengthMenu.replace("_MENU_",o[0].outerHTML)),$("select",u).val(n._iDisplayLength).on("change.DT",function(t){Rt(n,$(this).val()),ot(n)}),$(n.nTable).on("length.dt.DT",function(t,e,i){n===e&&$("select",u).val(i)}),u[0]}function Ft(t){var e=t.sPaginationType,u=T.ext.pager[e],c="function"==typeof u,d=function(t){ot(t)},i=$("
      ").addClass(t.oClasses.sPaging+e)[0],p=t.aanFeatures;return c||u.fnInit(t,i,d),p.p||(i.id=t.sTableId+"_paginate",t.aoDrawCallback.push({fn:function(t){if(c){var e,i,n=t._iDisplayStart,r=t._iDisplayLength,s=t.fnRecordsDisplay(),a=-1===r,o=a?0:Math.ceil(n/r),l=a?1:Math.ceil(s/r),h=u(o,l);for(e=0,i=p.p.length;e",{id:t.aanFeatures.r?null:t.sTableId+"_processing",class:t.oClasses.sProcessing}).html(t.oLanguage.sProcessing).insertBefore(t.nTable)[0]}function Ht(t,e){t.oFeatures.bProcessing&&$(t.aanFeatures.r).css("display",e?"block":"none"),ce(t,null,"processing",[t,e])}function zt(t){var e=$(t.nTable);e.attr("role","grid");var i=t.oScroll;if(""===i.sX&&""===i.sY)return t.nTable;var n=i.sX,r=i.sY,s=t.oClasses,a=e.children("caption"),o=a.length?a[0]._captionSide:null,l=$(e[0].cloneNode(!1)),h=$(e[0].cloneNode(!1)),u=e.children("tfoot"),c="
      ",d=function(t){return t?Xt(t):null};u.length||(u=null);var p=$(c,{class:s.sScrollWrapper}).append($(c,{class:s.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:n?d(n):"100%"}).append($(c,{class:s.sScrollHeadInner}).css({"box-sizing":"content-box",width:i.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===o?a:null).append(e.children("thead"))))).append($(c,{class:s.sScrollBody}).css({position:"relative",overflow:"auto",width:d(n)}).append(e));u&&p.append($(c,{class:s.sScrollFoot}).css({overflow:"hidden",border:0,width:n?d(n):"100%"}).append($(c,{class:s.sScrollFootInner}).append(h.removeAttr("id").css("margin-left",0).append("bottom"===o?a:null).append(e.children("tfoot")))));var f=p.children(),g=f[0],m=f[1],v=u?f[2]:null;return n&&$(m).on("scroll.DT",function(t){var e=this.scrollLeft;g.scrollLeft=e,u&&(v.scrollLeft=e)}),$(m).css(r&&i.bCollapse?"max-height":"height",r),t.nScrollHead=g,t.nScrollBody=m,t.nScrollFoot=v,t.aoDrawCallback.push({fn:Bt,sName:"scrolling"}),p[0]}function Bt(i){var t,e,n,r,s,a,o,l,h,u=i.oScroll,c=u.sX,d=u.sXInner,p=u.sY,f=u.iBarWidth,g=$(i.nScrollHead),m=g[0].style,v=g.children("div"),y=v[0].style,b=v.children("table"),x=i.nScrollBody,w=$(x),_=x.style,S=$(i.nScrollFoot).children("div"),C=S.children("table"),k=$(i.nTHead),D=$(i.nTable),T=D[0],M=T.style,A=i.nTFoot?$(i.nTFoot):null,E=i.oBrowser,P=E.bScrollOversize,L=U(i.aoColumns,"nTh"),O=[],R=[],I=[],F=[],j=function(t){var e=t.style;e.paddingTop="0",e.paddingBottom="0",e.borderTopWidth="0",e.borderBottomWidth="0",e.height=0},N=x.scrollHeight>x.clientHeight;if(i.scrollBarVis!==N&&i.scrollBarVis!==W)return i.scrollBarVis=N,void Y(i);i.scrollBarVis=N,D.children("thead, tfoot").remove(),A&&(a=A.clone().prependTo(D),e=A.find("tr"),r=a.find("tr")),s=k.clone().prependTo(D),t=k.find("tr"),n=s.find("tr"),s.find("th, td").removeAttr("tabindex"),c||(_.width="100%",g[0].style.width="100%"),$.each(ct(i,s),function(t,e){o=q(i,t),e.style.width=i.aoColumns[o].sWidth}),A&&$t(function(t){t.style.width=""},r),h=D.outerWidth(),""===c?(M.width="100%",P&&(D.find("tbody").height()>x.offsetHeight||"scroll"==w.css("overflow-y"))&&(M.width=Xt(D.outerWidth()-f)),h=D.outerWidth()):""!==d&&(M.width=Xt(d),h=D.outerWidth()),$t(j,n),$t(function(t){I.push(t.innerHTML),O.push(Xt($(t).css("width")))},n),$t(function(t,e){-1!==$.inArray(t,L)&&(t.style.width=O[e])},t),$(n).height(0),A&&($t(j,r),$t(function(t){F.push(t.innerHTML),R.push(Xt($(t).css("width")))},r),$t(function(t,e){t.style.width=R[e]},e),$(r).height(0)),$t(function(t,e){t.innerHTML='
      '+I[e]+"
      ",t.childNodes[0].style.height="0",t.childNodes[0].style.overflow="hidden",t.style.width=O[e]},n),A&&$t(function(t,e){t.innerHTML='
      '+F[e]+"
      ",t.childNodes[0].style.height="0",t.childNodes[0].style.overflow="hidden",t.style.width=R[e]},r),D.outerWidth()x.offsetHeight||"scroll"==w.css("overflow-y")?h+f:h,P&&(x.scrollHeight>x.offsetHeight||"scroll"==w.css("overflow-y"))&&(M.width=Xt(l-f)),""!==c&&""===d||ae(i,1,"Possible column misalignment",6)):l="100%",_.width=Xt(l),m.width=Xt(l),A&&(i.nScrollFoot.style.width=Xt(l)),p||P&&(_.height=Xt(T.offsetHeight+f));var H=D.outerWidth();b[0].style.width=Xt(H),y.width=Xt(H);var z=D.height()>x.clientHeight||"scroll"==w.css("overflow-y"),B="padding"+(E.bScrollbarLeft?"Left":"Right");y[B]=z?f+"px":"0px",A&&(C[0].style.width=Xt(H),S[0].style.width=Xt(H),S[0].style[B]=z?f+"px":"0px"),D.children("colgroup").insertBefore(D.children("thead")),w.scroll(),!i.bSorted&&!i.bFiltered||i._drawHold||(x.scrollTop=0)}function $t(t,e,i){for(var n,r,s=0,a=0,o=e.length;a/g;function Ut(t){var e,i,n,r=t.nTable,s=t.aoColumns,a=t.oScroll,o=a.sY,l=a.sX,h=a.sXInner,u=s.length,c=j(t,"bVisible"),d=$("th",t.nTHead),p=r.getAttribute("width"),f=r.parentNode,g=!1,m=t.oBrowser,v=m.bScrollOversize,y=r.style.width;for(y&&-1!==y.indexOf("%")&&(p=y),e=0;e").appendTo(x.find("tbody"));for(x.find("thead, tfoot").remove(),x.append($(t.nTHead).clone()).append($(t.nTFoot).clone()),x.find("tfoot th, tfoot td").css("width",""),d=ct(t,x.find("thead")[0]),e=0;e").css({width:i.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(t.aoData.length)for(e=0;e").css(l||o?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(x).appendTo(f);l&&h?x.width(h):l?(x.css("width","auto"),x.removeAttr("width"),x.width()").css("width",Xt(t)).appendTo(e||y.body),n=i[0].offsetWidth;return i.remove(),n}function Vt(t,e){var i=Gt(t,e);if(i<0)return null;var n=t.aoData[i];return n.nTr?n.anCells[e]:$("").html(D(t,i,e,"display"))[0]}function Gt(t,e){for(var i,n=-1,r=-1,s=0,a=t.aoData.length;sn&&(n=i.length,r=s);return r}function Xt(t){return null===t?"0px":"number"==typeof t?t<0?"0px":t+"px":t.match(/\d$/)?t+"px":t}function Zt(t){var e,i,n,r,s,a,o,l=[],h=t.aoColumns,u=t.aaSortingFixed,c=$.isPlainObject(u),d=[],p=function(t){t.length&&!$.isArray(t[0])?d.push(t):$.merge(d,t)};for($.isArray(u)&&p(u),c&&u.pre&&p(u.pre),p(t.aaSorting),c&&u.post&&p(u.post),e=0;e/g,""),u=o.nTh;u.removeAttribute("aria-sort"),e=o.bSortable?h+("asc"===(0=l.length?[0,e[1]]:e)})),t.search!==W&&$.extend(r.oPreviousSearch,Mt(t.search)),t.columns)for(a=0,o=t.columns.length;at?new b(e[t],this[t]):null},filter:function(t){var e=[];if(me.filter)e=me.filter.call(this,t,this);else for(var i=0,n=this.length;i").addClass(e);$("td",r).addClass(e).html(t)[0].colSpan=F(s),a.push(r[0])}})(t,e),i._details&&i._details.detach(),i._details=$(a),i._detailsShow&&i._details.insertAfter(i.nTr)),this)}),e([ke+".show()",De+".show()"],function(t){return Se(this,!0),this}),e([ke+".hide()",De+".hide()"],function(){return Se(this,!1),this}),e([ke+".remove()",De+".remove()"],function(){return _e(this),this}),e(ke+".isShown()",function(){var t=this.context;return t.length&&this.length&&t[0].aoData[this[0]]._detailsShow||!1});var Te=/^([^:]+):(name|visIdx|visible)$/,Me=function(t,e,i,n,r){for(var s=[],a=0,o=r.length;a").appendTo(t);v(a,r)}else{switch(c=null,d="",r){case"ellipsis":t.append('');break;case"first":c=f.sFirst,d=r+(0",{class:p.sPageButton+" "+d,"aria-controls":o.sTableId,"aria-label":g[r],"data-dt-idx":m,tabindex:o.iTabIndex,id:0===l&&"string"==typeof r?o.sTableId+"_"+r:null}).html(c).appendTo(t),{action:r},s),m++)}};try{i=$(t).find(y.activeElement).data("dt-idx")}catch(t){}v($(t).empty(),e),i!==W&&$(t).find("[data-dt-idx="+i+"]").focus()}}}),$.extend(T.ext.type.detect,[function(t,e){var i=e.oLanguage.sDecimal;return u(t,i)?"num"+i:null},function(t,e){if(t&&!(t instanceof Date)&&!s.test(t))return null;var i=Date.parse(t);return null!==i&&!isNaN(i)||l(t)?"date":null},function(t,e){var i=e.oLanguage.sDecimal;return u(t,i,!0)?"num-fmt"+i:null},function(t,e){var i=e.oLanguage.sDecimal;return c(t,i)?"html-num"+i:null},function(t,e){var i=e.oLanguage.sDecimal;return c(t,i,!0)?"html-num-fmt"+i:null},function(t,e){return l(t)||"string"==typeof t&&-1!==t.indexOf("<")?"html":null}]),$.extend(T.ext.type.search,{html:function(t){return l(t)?t:"string"==typeof t?t.replace(n," ").replace(r,""):""},string:function(t){return l(t)?t:"string"==typeof t?t.replace(n," "):t}});var Pe=function(t,e,i,n){return 0===t||t&&"-"!==t?(e&&(t=h(t,e)),t.replace&&(i&&(t=t.replace(i,"")),n&&(t=t.replace(n,""))),1*t):-1/0};function Le(i){$.each({num:function(t){return Pe(t,i)},"num-fmt":function(t){return Pe(t,i,o)},"html-num":function(t){return Pe(t,i,r)},"html-num-fmt":function(t){return Pe(t,i,r,o)}},function(t,e){f.type.order[t+i+"-pre"]=e,t.match(/^html\-/)&&(f.type.search[t+i]=f.type.search.html)})}$.extend(f.type.order,{"date-pre":function(t){var e=Date.parse(t);return isNaN(e)?-1/0:e},"html-pre":function(t){return l(t)?"":t.replace?t.replace(/<.*?>/g,"").toLowerCase():t+""},"string-pre":function(t){return l(t)?"":"string"==typeof t?t.toLowerCase():t.toString?t.toString():""},"string-asc":function(t,e){return t").addClass(l.sSortJUIWrapper).append(a.contents()).append($("").addClass(l.sSortIcon+" "+o.sSortingClassJUI)).appendTo(a),$(s.nTable).on("order.dt.DT",function(t,e,i,n){if(s===e){var r=o.idx;a.removeClass(l.sSortAsc+" "+l.sSortDesc).addClass("asc"==n[r]?l.sSortAsc:"desc"==n[r]?l.sSortDesc:o.sSortingClass),a.find("span."+l.sSortIcon).removeClass(l.sSortJUIAsc+" "+l.sSortJUIDesc+" "+l.sSortJUI+" "+l.sSortJUIAscAllowed+" "+l.sSortJUIDescAllowed).addClass("asc"==n[r]?l.sSortJUIAsc:"desc"==n[r]?l.sSortJUIDesc:o.sSortingClassJUI)}})}}});var Oe=function(t){return"string"==typeof t?t.replace(//g,">").replace(/"/g,"""):t};function Re(e){return function(){var t=[se(this[T.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return T.ext.internal[e].apply(this,t)}}return T.render={number:function(s,a,o,l,h){return{display:function(t){if("number"!=typeof t&&"string"!=typeof t)return t;var e=t<0?"-":"",i=parseFloat(t);if(isNaN(i))return Oe(t);i=i.toFixed(o),t=Math.abs(i);var n=parseInt(t,10),r=o?a+(t-n).toFixed(o).substring(2):"";return e+(l||"")+n.toString().replace(/\B(?=(\d{3})+(?!\d))/g,s)+r+(h||"")}}},text:function(){return{display:Oe,filter:Oe}}},$.extend(T.ext.internal,{_fnExternApiFunc:Re,_fnBuildAjax:dt,_fnAjaxUpdate:pt,_fnAjaxParameters:ft,_fnAjaxUpdateDraw:gt,_fnAjaxDataSrc:mt,_fnAddColumn:R,_fnColumnOptions:I,_fnAdjustColumnSizing:Y,_fnVisibleToColumnIndex:q,_fnColumnIndexToVisible:C,_fnVisbleColumns:F,_fnGetColumns:j,_fnColumnTypes:k,_fnApplyColumnDefs:N,_fnHungarianMap:v,_fnCamelToHungarian:A,_fnLanguageCompat:E,_fnBrowserDetect:O,_fnAddData:H,_fnAddTr:z,_fnNodeToDataIndex:function(t,e){return e._DT_RowIndex!==W?e._DT_RowIndex:null},_fnNodeToColumnIndex:function(t,e,i){return $.inArray(i,t.aoData[e].anCells)},_fnGetCellData:D,_fnSetCellData:B,_fnSplitObjNotation:X,_fnGetObjectDataFn:Z,_fnSetObjectDataFn:Q,_fnGetDataMaster:J,_fnClearTable:K,_fnDeleteIndex:tt,_fnInvalidate:et,_fnGetRowElements:it,_fnCreateTr:nt,_fnBuildHead:st,_fnDrawHead:at,_fnDraw:ot,_fnReDraw:lt,_fnAddOptionsHtml:ht,_fnDetectHeader:ut,_fnGetUniqueThs:ct,_fnFeatureHtmlFilter:vt,_fnFilterComplete:yt,_fnFilterCustom:bt,_fnFilterColumn:xt,_fnFilter:wt,_fnFilterCreateSearch:_t,_fnEscapeRegex:St,_fnFilterData:Dt,_fnFeatureHtmlInfo:At,_fnUpdateInfo:Et,_fnInfoMacros:Pt,_fnInitialise:Lt,_fnInitComplete:Ot,_fnLengthChange:Rt,_fnFeatureHtmlLength:It,_fnFeatureHtmlPaginate:Ft,_fnPageChange:jt,_fnFeatureHtmlProcessing:Nt,_fnProcessingDisplay:Ht,_fnFeatureHtmlTable:zt,_fnScrollDraw:Bt,_fnApplyToChildren:$t,_fnCalculateColumnWidths:Ut,_fnThrottle:Yt,_fnConvertToWidth:qt,_fnGetWidestNode:Vt,_fnGetMaxLenString:Gt,_fnStringToCss:Xt,_fnSortFlatten:Zt,_fnSort:Qt,_fnSortAria:Jt,_fnSortListener:Kt,_fnSortAttachListener:te,_fnSortingClasses:ee,_fnSortData:ie,_fnSaveState:ne,_fnLoadState:re,_fnSettingsFromNode:se,_fnLog:ae,_fnMap:oe,_fnBindAction:he,_fnCallbackReg:ue,_fnCallbackFire:ce,_fnLengthOverflow:de,_fnRenderer:pe,_fnDataSource:fe,_fnRowAttributes:rt,_fnExtend:le,_fnCalculateEnd:function(){}}),(($.fn.dataTable=T).$=$).fn.dataTableSettings=T.settings,$.fn.dataTableExt=T.ext,$.fn.DataTable=function(t){return $(this).dataTable(t).api()},$.each(T,function(t,e){$.fn.DataTable[t]=e}),$.fn.dataTable}),function(i){"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(t){return i(t,window,document)}):"object"==typeof exports?module.exports=function(t,e){return t||(t=window),e&&e.fn.dataTable||(e=require("datatables.net")(t,e).$),i(e,t,t.document)}:i(jQuery,window,document)}(function(b,t,n,r){"use strict";var s=b.fn.dataTable;return b.extend(!0,s.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",renderer:"bootstrap"}),b.extend(s.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"}),s.ext.renderer.pageButton.bootstrap=function(o,t,l,e,h,u){var c,d,i,p=new s.Api(o),f=o.oClasses,g=o.oLanguage.oPaginate,m=o.oLanguage.oAria.paginate||{},v=0,y=function(t,e){var i,n,r,s,a=function(t){t.preventDefault(),b(t.currentTarget).hasClass("disabled")||p.page()==t.data.action||p.page(t.data.action).draw("page")};for(i=0,n=e.length;i",{class:f.sPageButton+" "+d,id:0===l&&"string"==typeof s?o.sTableId+"_"+s:null}).append(b("
      ",{href:"#","aria-controls":o.sTableId,"aria-label":m[s],"data-dt-idx":v,tabindex:o.iTabIndex,class:"page-link"}).html(c)).appendTo(t),o.oApi._fnBindAction(r,{action:s},a),v++)}};try{i=b(t).find(n.activeElement).data("dt-idx")}catch(t){}y(b(t).empty().html('
        ').children("ul"),e),i!==r&&b(t).find("[data-dt-idx="+i+"]").focus()},s}),"function"!=typeof Object.create&&(Object.create=function(t){function e(){}return e.prototype=t,new e}),function(n,e,t,i){"use strict";var r={_positionClasses:["bottom-left","bottom-right","top-right","top-left","bottom-center","top-center","mid-center"],_defaultIcons:["success","error","info","warning"],init:function(t,e){this.prepareOptions(t,n.toast.options),this.process()},prepareOptions:function(t,e){var i={};"string"==typeof t||t instanceof Array?i.text=t:i=t,this.options=n.extend({},e,i)},process:function(){this.setup(),this.addToDom(),this.position(),this.bindToast(),this.animate()},setup:function(){var t="";if(this._toastEl=this._toastEl||n("
        ",{class:"jq-toast-single"}),t+='',this.options.allowToastClose&&(t+='×'),this.options.text instanceof Array){this.options.heading&&(t+='

        '+this.options.heading+"

        "),t+='
          ';for(var e=0;e'+this.options.text[e]+"";t+="
        "}else this.options.heading&&(t+='

        '+this.options.heading+"

        "),t+=this.options.text;this._toastEl.html(t),!1!==this.options.bgColor&&this._toastEl.css("background-color",this.options.bgColor),!1!==this.options.textColor&&this._toastEl.css("color",this.options.textColor),this.options.textAlign&&this._toastEl.css("text-align",this.options.textAlign),!1!==this.options.icon&&(this._toastEl.addClass("jq-has-icon"),-1!==n.inArray(this.options.icon,this._defaultIcons)&&this._toastEl.addClass("jq-icon-"+this.options.icon)),!1!==this.options.class&&this._toastEl.addClass(this.options.class)},position:function(){"string"==typeof this.options.position&&-1!==n.inArray(this.options.position,this._positionClasses)?"bottom-center"===this.options.position?this._container.css({left:n(e).outerWidth()/2-this._container.outerWidth()/2,bottom:20}):"top-center"===this.options.position?this._container.css({left:n(e).outerWidth()/2-this._container.outerWidth()/2,top:20}):"mid-center"===this.options.position?this._container.css({left:n(e).outerWidth()/2-this._container.outerWidth()/2,top:n(e).outerHeight()/2-this._container.outerHeight()/2}):this._container.addClass(this.options.position):"object"==typeof this.options.position?this._container.css({top:this.options.position.top?this.options.position.top:"auto",bottom:this.options.position.bottom?this.options.position.bottom:"auto",left:this.options.position.left?this.options.position.left:"auto",right:this.options.position.right?this.options.position.right:"auto"}):this._container.addClass("bottom-left")},bindToast:function(){var e=this;this._toastEl.on("afterShown",function(){e.processLoader()}),this._toastEl.find(".close-jq-toast-single").on("click",function(t){t.preventDefault(),"fade"===e.options.showHideTransition?(e._toastEl.trigger("beforeHide"),e._toastEl.fadeOut(function(){e._toastEl.trigger("afterHidden")})):"slide"===e.options.showHideTransition?(e._toastEl.trigger("beforeHide"),e._toastEl.slideUp(function(){e._toastEl.trigger("afterHidden")})):(e._toastEl.trigger("beforeHide"),e._toastEl.hide(function(){e._toastEl.trigger("afterHidden")}))}),"function"==typeof this.options.beforeShow&&this._toastEl.on("beforeShow",function(){e.options.beforeShow()}),"function"==typeof this.options.afterShown&&this._toastEl.on("afterShown",function(){e.options.afterShown()}),"function"==typeof this.options.beforeHide&&this._toastEl.on("beforeHide",function(){e.options.beforeHide()}),"function"==typeof this.options.afterHidden&&this._toastEl.on("afterHidden",function(){e.options.afterHidden()})},addToDom:function(){var t=n(".jq-toast-wrap");if(0===t.length?(t=n("
        ",{class:"jq-toast-wrap"}),n("body").append(t)):(!this.options.stack||isNaN(parseInt(this.options.stack,10)))&&t.empty(),t.find(".jq-toast-single:hidden").remove(),t.append(this._toastEl),this.options.stack&&!isNaN(parseInt(this.options.stack),10)){var e=t.find(".jq-toast-single").length-this.options.stack;0=e[i];)i+=1;return i}function s(t,e,i){var n;if("number"==typeof e&&(e=[e]),!Array.isArray(e))throw new Error("noUiSlider ("+V+"): 'range' contains invalid value.");if(!r(n="min"===t?0:"max"===t?100:parseFloat(t))||!r(e[0]))throw new Error("noUiSlider ("+V+"): 'range' value isn't numeric.");i.xPct.push(n),i.xVal.push(e[0]),n?i.xSteps.push(!isNaN(e[1])&&e[1]):isNaN(e[1])||(i.xSteps[0]=e[1]),i.xHighestCompleteStep.push(0)}function a(t,e,i){if(!e)return!0;i.xSteps[t]=c([i.xVal[t],i.xVal[t+1]],e)/u(i.xPct[t],i.xPct[t+1]);var n=(i.xVal[t+1]-i.xVal[t])/i.xNumSteps[t],r=Math.ceil(Number(n.toFixed(3))-1),s=i.xVal[t]+i.xNumSteps[t]*r;i.xHighestCompleteStep[t]=s}function i(t,e,i){var n;this.xPct=[],this.xVal=[],this.xSteps=[i||!1],this.xNumSteps=[!1],this.xHighestCompleteStep=[],this.snap=e;var r=[];for(n in t)t.hasOwnProperty(n)&&r.push([t[n],n]);for(r.length&&"object"==typeof r[0][0]?r.sort(function(t,e){return t[0][0]-e[0][0]}):r.sort(function(t,e){return t[0]-e[0]}),n=0;n=t.slice(-1)[0])return 100;var n,r,s=d(i,t),a=t[s-1],o=t[s],l=e[s-1],h=e[s];return l+(r=i,c(n=[a,o],n[0]<0?r+Math.abs(n[0]):r-n[0])/u(l,h))}(this.xVal,this.xPct,t)},i.prototype.fromStepping=function(t){return function(t,e,i){if(100<=i)return t.slice(-1)[0];var n,r=d(i,e),s=t[r-1],a=t[r],o=e[r-1];return n=[s,a],(i-o)*u(o,e[r])*(n[1]-n[0])/100+n[0]}(this.xVal,this.xPct,t)},i.prototype.getStep=function(t){return function(t,e,i,n){if(100===n)return n;var r,s,a=d(n,t),o=t[a-1],l=t[a];return i?(l-o)/2= 2) required for mode 'count'.");var n=e-1,r=100/n;for(e=[];n--;)e[n]=n*r;e.push(100),t="positions"}return"positions"===t?e.map(function(t){return S.fromStepping(i?S.getStep(t):t)}):"values"===t?i?e.map(function(t){return S.fromStepping(S.getStep(S.toStepping(t)))}):e:void 0}(n,t.values||!1,t.stepped||!1),o=(g=r,m=n,v=a,y={},e=S.xVal[0],i=S.xVal[S.xVal.length-1],x=b=!1,w=0,(v=v.slice().sort(function(t,e){return t-e}).filter(function(t){return!this[t]&&(this[t]=!0)},{}))[0]!==e&&(v.unshift(e),b=!0),v[v.length-1]!==i&&(v.push(i),x=!0),v.forEach(function(t,e){var i,n,r,s,a,o,l,h,u,c,d=t,p=v[e+1],f="steps"===m;if(f&&(i=S.xNumSteps[e]),i||(i=p-d),!1!==d&&void 0!==p)for(i=Math.max(i,1e-7),n=d;n<=p;n=(n+i).toFixed(7)/1){for(h=(a=(s=S.toStepping(n))-w)/g,c=a/(u=Math.round(h)),r=1;r<=u;r+=1)y[(o=w+r*c).toFixed(5)]=[S.fromStepping(o),0];l=-1i.stepAfter.startValue&&(r=i.stepAfter.startValue-n),s=n>i.thisStep.startValue?i.thisStep.step:!1!==i.stepBefore.step&&n-i.stepBefore.highestStep,100===t?r=null:0===t&&(s=null);var a=S.countStepDecimals();return null!==r&&!1!==r&&(r=Number(r.toFixed(a))),null!==s&&!1!==s&&(s=Number(s.toFixed(a))),[s,r]})},on:i,off:function(t){var n=t&&t.split(".")[0],r=n&&t.substring(n.length);Object.keys(b).forEach(function(t){var e=t.split(".")[0],i=t.substring(e.length);n&&n!==e||r&&r!==i||delete b[t]})},get:q,set:Y,setHandle:function(t,e,i){var n=[];if(!(0<=(t=Number(t))&&t● {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:W,nullColor:W,zeroAxis:!0,barWidth:4,barSpacing:1,chartRangeMax:W,chartRangeMin:W,chartRangeClip:!1,colorMap:W,tooltipFormat:new v(' {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new v(' {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:W,thresholdValue:0,chartRangeMax:W,chartRangeMin:W,chartRangeClip:!1,tooltipFormat:new v("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:W,tooltipFormat:new v("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new v(' {{value}} ({{percent.1}}%)')},box:{raw:!1,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:!0,outlierIQR:1.5,spotRadius:1.5,target:W,targetColor:"#4a2",chartRangeMax:W,chartRangeMin:W,tooltipFormat:new v("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}},e=function(){var t,e;return t=function(){this.init.apply(this,arguments)},1=t)return i[2];return W}}),I.range_map=function(t){return new z(t)},d=e({init:function(t,e){var i=I(t);this.$el=i,this.options=e,this.currentPageX=0,this.currentPageY=0,this.el=t,this.splist=[],this.tooltip=null,this.over=!1,this.displayTooltips=!e.get("disableTooltips"),this.highlightEnabled=!e.get("disableHighlight")},registerSparkline:function(t){this.splist.push(t),this.over&&this.updateDisplay()},registerCanvas:function(t){var e=I(t.canvas);this.canvas=t,(this.$canvas=e).mouseenter(I.proxy(this.mouseenter,this)),e.mouseleave(I.proxy(this.mouseleave,this)),e.click(I.proxy(this.mouseclick,this))},reset:function(t){this.splist=[],this.tooltip&&t&&(this.tooltip.remove(),this.tooltip=W)},mouseclick:function(t){var e=I.Event("sparklineClick");e.originalEvent=t,e.sparklines=this.splist,this.$el.trigger(e)},mouseenter:function(t){I(C.body).unbind("mousemove.jqs"),I(C.body).bind("mousemove.jqs",I.proxy(this.mousemove,this)),this.over=!0,this.currentPageX=t.pageX,this.currentPageY=t.pageY,this.currentEl=t.target,!this.tooltip&&this.displayTooltips&&(this.tooltip=new n(this.options),this.tooltip.updatePosition(t.pageX,t.pageY)),this.updateDisplay()},mouseleave:function(){I(C.body).unbind("mousemove.jqs");var t,e=this.splist,i=e.length,n=!1;for(this.over=!1,this.currentEl=null,this.tooltip&&(this.tooltip.remove(),this.tooltip=null),t=0;t
      '),this.$input=v('').appendTo(this.$container),this.$element.before(this.$container),this.build(e),this.isInit=!1}function s(t,e){if("function"!=typeof t[e]){var i=t[e];t[e]=function(t){return t[i]}}}function o(t,e){if("function"!=typeof t[e]){var i=t[e];t[e]=function(){return i}}}function y(t){return t?e.text(t).html():""}function h(t){var e=0;if(document.selection){t.focus();var i=document.selection.createRange();i.moveStart("character",-t.value.length),e=i.text.length}else(t.selectionStart||"0"==t.selectionStart)&&(e=t.selectionStart);return e}var u={tagClass:function(t){return"label label-info"},itemValue:function(t){return t?t.toString():t},itemText:function(t){return this.itemValue(t)},itemTitle:function(t){return null},freeInput:!0,addOnBlur:!0,maxTags:void 0,maxChars:void 0,confirmKeys:[13,44],delimiter:",",delimiterRegex:null,cancelConfirmKeysOnEmpty:!1,onTagExists:function(t,e){e.hide().fadeIn()},trimValue:!1,allowDuplicates:!1};a.prototype={constructor:a,add:function(t,e,i){var n=this;if(!(n.options.maxTags&&n.itemsArray.length>=n.options.maxTags)&&(!1===t||t)){if("string"==typeof t&&n.options.trimValue&&(t=v.trim(t)),"object"==typeof t&&!n.objectItems)throw"Can't add objects when itemValue option is not set";if(!t.toString().match(/^\s*$/)){if(n.isSelect&&!n.multiple&&0n.options.maxInputLength)){var d=v.Event("beforeItemAdd",{item:t,cancel:!1,options:i});if(n.$element.trigger(d),!d.cancel){n.itemsArray.push(t);var p=v(''+y(l)+'');p.data("item",t),n.findInputWrapper().before(p),p.after(" ");var f=v('option[value="'+encodeURIComponent(o)+'"]',n.$element).length||v('option[value="'+y(o)+'"]',n.$element).length;if(n.isSelect&&!f){var g=v("");g.data("item",t),g.attr("value",o),n.$element.append(g)}e||n.pushVal(),(n.options.maxTags===n.itemsArray.length||n.items().toString().length===n.options.maxInputLength)&&n.$container.addClass("bootstrap-tagsinput-max"),v(".typeahead, .twitter-typeahead",n.$container).length&&n.$input.typeahead("val",""),this.isInit?n.$element.trigger(v.Event("itemAddedOnInit",{item:t,options:i})):n.$element.trigger(v.Event("itemAdded",{item:t,options:i}))}}}else if(n.options.onTagExists){var m=v(".tag",n.$container).filter(function(){return v(this).data("item")===c});n.options.onTagExists(t,m)}}}},remove:function(e,t,i){var n=this;if(n.objectItems&&(e=(e="object"==typeof e?v.grep(n.itemsArray,function(t){return n.options.itemValue(t)==n.options.itemValue(e)}):v.grep(n.itemsArray,function(t){return n.options.itemValue(t)==e}))[e.length-1]),e){var r=v.Event("beforeItemRemove",{item:e,cancel:!1,options:i});if(n.$element.trigger(r),r.cancel)return;v(".tag",n.$container).filter(function(){return v(this).data("item")===e}).remove(),v("option",n.$element).filter(function(){return v(this).data("item")===e}).remove(),-1!==v.inArray(e,n.itemsArray)&&n.itemsArray.splice(v.inArray(e,n.itemsArray),1)}t||n.pushVal(),n.options.maxTags>n.itemsArray.length&&n.$container.removeClass("bootstrap-tagsinput-max"),n.$element.trigger(v.Event("itemRemoved",{item:e,options:i}))},removeAll:function(){for(v(".tag",this.$container).remove(),v("option",this.$element).remove();0$1")}}))}if(l.options.typeaheadjs){var i,e=null,r=l.options.typeaheadjs;i=v.isArray(r)?(e=r[0],r[1]):r,l.$input.typeahead(e,i).on("typeahead:selected",v.proxy(function(t,e){i.valueKey?l.add(e[i.valueKey]):l.add(e),l.$input.typeahead("val","")},l))}l.$container.on("click",v.proxy(function(t){l.$element.attr("disabled")||l.$input.removeAttr("disabled"),l.$input.focus()},l)),l.options.addOnBlur&&l.options.freeInput&&l.$input.on("focusout",v.proxy(function(t){0===v(".typeahead, .twitter-typeahead",l.$container).length&&(l.add(l.$input.val()),l.$input.val(""))},l)),l.$container.on("keydown","input",v.proxy(function(t){var e=v(t.target),i=l.findInputWrapper();if(l.$element.attr("disabled"))l.$input.attr("disabled","disabled");else{switch(t.which){case 8:if(0===h(e[0])){var n=i.prev();n.length&&l.remove(n.data("item"))}break;case 46:if(0===h(e[0])){var r=i.next();r.length&&l.remove(r.data("item"))}break;case 37:var s=i.prev();0===e.val().length&&s[0]&&(s.before(i),e.focus());break;case 39:var a=i.next();0===e.val().length&&a[0]&&(a.after(i),e.focus())}var o=e.val().length;Math.ceil(o/5),e.attr("size",Math.max(this.inputSize,e.val().length))}},l)),l.$container.on("keypress","input",v.proxy(function(t){var e=v(t.target);if(l.$element.attr("disabled"))l.$input.attr("disabled","disabled");else{var s,i,a,n=e.val(),r=l.options.maxChars&&n.length>=l.options.maxChars;l.options.freeInput&&(s=t,i=l.options.confirmKeys,a=!1,v.each(i,function(t,e){if("number"==typeof e&&s.which===e)return!(a=!0);if(s.which===e.which){var i=!e.hasOwnProperty("altKey")||s.altKey===e.altKey,n=!e.hasOwnProperty("shiftKey")||s.shiftKey===e.shiftKey,r=!e.hasOwnProperty("ctrlKey")||s.ctrlKey===e.ctrlKey;if(i&&n&&r)return!(a=!0)}}),a||r)&&(0!==n.length&&(l.add(r?n.substr(0,l.options.maxChars):n),e.val("")),!1===l.options.cancelConfirmKeysOnEmpty&&t.preventDefault());var o=e.val().length;Math.ceil(o/5),e.attr("size",Math.max(this.inputSize,e.val().length))}},l)),l.$container.on("click","[data-role=remove]",v.proxy(function(t){l.$element.attr("disabled")||l.remove(v(t.target).closest(".tag").data("item"))},l)),l.options.itemValue===u.itemValue&&("INPUT"===l.$element[0].tagName?l.add(l.$element.val()):v("option",l.$element).each(function(){l.add(v(this).attr("value"),!0)}))},destroy:function(){this.$container.off("keypress","input"),this.$container.off("click","[role=remove]"),this.$container.remove(),this.$element.removeData("tagsinput"),this.$element.show()},focus:function(){this.$input.focus()},input:function(){return this.$input},findInputWrapper:function(){for(var t=this.$input[0],e=this.$container[0];t&&t.parentNode!==e;)t=t.parentNode;return v(t)}},v.fn.tagsinput=function(i,n,r){var s=[];return this.each(function(){var t=v(this).data("tagsinput");if(t)if(i||n){if(void 0!==t[i]){if(3===t[i].length&&void 0!==r)var e=t[i](n,null,r);else e=t[i](n);void 0!==e&&s.push(e)}}else s.push(t);else t=new a(this,i),v(this).data("tagsinput",t),s.push(t),"SELECT"===this.tagName&&v("option",v(this)).attr("selected","selected"),v(this).val(v(this).val())}),"string"==typeof i?1");v(function(){v("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput()})}(window.jQuery);var $jscomp={scope:{},findInternal:function(t,e,i){t instanceof String&&(t=String(t));for(var n=t.length,r=0;r a",this.nav),this.container=this.main.children("div"),this.pages=this.container.children("div"),this.current_index=null,this.options.toolbarSettings.toolbarButtonPosition="right"===this.options.toolbarSettings.toolbarButtonPosition?"end":this.options.toolbarSettings.toolbarButtonPosition,this.options.toolbarSettings.toolbarButtonPosition="left"===this.options.toolbarSettings.toolbarButtonPosition?"start":this.options.toolbarSettings.toolbarButtonPosition,this.options.theme=null===this.options.theme||""===this.options.theme?"default":this.options.theme,this.init()}var i={selected:0,keyNavigation:!0,autoAdjustHeight:!0,cycleSteps:!1,backButtonSupport:!0,useURLhash:!0,showStepURLhash:!0,lang:{next:"Next",previous:"Previous"},toolbarSettings:{toolbarPosition:"bottom",toolbarButtonPosition:"end",showNextButton:!0,showPreviousButton:!0,toolbarExtraButtons:[]},anchorSettings:{anchorClickable:!0,enableAllAnchors:!1,markDoneStep:!0,markAllPreviousStepsAsDone:!0,removeDoneStepOnNavigateBack:!1,enableAnchorOnDoneStep:!0},contentURL:null,contentCache:!0,ajaxSettings:{},disabledSteps:[],errorSteps:[],hiddenSteps:[],theme:"default",transitionEffect:"none",transitionSpeed:"400"};l.extend(n.prototype,{init:function(){this._setElements(),this._setToolbar(),this._setEvents();var t=this.options.selected;if(this.options.useURLhash){var e=r.location.hash;if(e&&0").text(this.options.lang.next).addClass("btn btn-secondary sw-btn-next").attr("type","button"):null,n=!1!==this.options.toolbarSettings.showPreviousButton?l("").text(this.options.lang.previous).addClass("btn btn-secondary sw-btn-prev").attr("type","button"):null,r=l("
      ").addClass("btn-group mr-2 sw-btn-group").attr("role","group").append(n,i),s=null;switch(this.options.toolbarSettings.toolbarExtraButtons&&0
      ").addClass("btn-group mr-2 sw-btn-group-extra").attr("role","group"),l.each(this.options.toolbarSettings.toolbarExtraButtons,function(t,e){s.append(e.clone(!0))})),this.options.toolbarSettings.toolbarPosition){case"top":(t=l("
      ").addClass("btn-toolbar sw-toolbar sw-toolbar-top justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),"start"===this.options.toolbarSettings.toolbarButtonPosition?t.prepend(s):t.append(s),this.container.before(t);break;case"bottom":(e=l("
      ").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),"start"===this.options.toolbarSettings.toolbarButtonPosition?e.prepend(s):e.append(s),this.container.after(e);break;case"both":(t=l("
      ").addClass("btn-toolbar sw-toolbar sw-toolbar-top justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),"start"===this.options.toolbarSettings.toolbarButtonPosition?t.prepend(s):t.append(s),this.container.before(t),(e=l("
      ").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r.clone(!0)),null!==s&&("start"===this.options.toolbarSettings.toolbarButtonPosition?e.prepend(s.clone(!0)):e.append(s.clone(!0))),this.container.after(e);break;default:(e=l("
      ").addClass("btn-toolbar sw-toolbar sw-toolbar-bottom justify-content-"+this.options.toolbarSettings.toolbarButtonPosition)).append(r),this.options.toolbarSettings.toolbarButtonPosition,e.append(s),this.container.after(e)}return!0},_setEvents:function(){var i=this;return l(this.steps).on("click",function(t){if(t.preventDefault(),!1===i.options.anchorSettings.anchorClickable)return!0;var e=i.steps.index(this);if(!1===i.options.anchorSettings.enableAnchorOnDoneStep&&i.steps.eq(e).parent("li").hasClass("done"))return!0;e!==i.current_index&&(!1!==i.options.anchorSettings.enableAllAnchors&&!1!==i.options.anchorSettings.anchorClickable?i._showStep(e):i.steps.eq(e).parent("li").hasClass("done")&&i._showStep(e))}),l(".sw-btn-next",this.main).on("click",function(t){t.preventDefault(),i._showNext()}),l(".sw-btn-prev",this.main).on("click",function(t){t.preventDefault(),i._showPrevious()}),this.options.keyNavigation&&l(t).keyup(function(t){i._keyNav(t)}),this.options.backButtonSupport&&l(r).on("hashchange",function(t){if(!i.options.useURLhash)return!0;if(r.location.hash){var e=l("a[href*='"+r.location.hash+"']",i.nav);e&&0")["prepend"==this.insertMode?"prependTo":"appendTo"](this.el)[0]);var t=this.canvas;if(t.width=this.size,t.height=this.size,this.ctx=t.getContext("2d"),1")[0];t.width=i.size,t.height=i.size,t.getContext("2d").drawImage(e,0,0,s,s),i.arcFill=i.ctx.createPattern(t,"no-repeat"),i.drawFrame(i.lastFrameValue)}var e,i=this,n=this.fill,r=this.ctx,s=this.size;if(!n)throw Error("The fill is not specified!");if("string"==typeof n&&(n={color:n}),n.color&&(this.arcFill=n.color),n.gradient){var a=n.gradient;if(1==a.length)this.arcFill=a[0];else if(1n.oldScroll?n.forward:n.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s];if(null!==a.triggerPoint){var o=n.oldScroll=a.triggerPoint;(o&&l||!o&&!l)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}}for(var h in t)t[h].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?m.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?m.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var n=0,r=t.length;n=s.oldScroll,u=!l&&!h,!g&&l&&h?(c.queueTrigger(s.backward),n[c.group.id]=c.group):!g&&u?(c.queueTrigger(s.forward),n[c.group.id]=c.group):g&&s.oldScroll>=c.triggerPoint&&(c.queueTrigger(s.forward),n[c.group.id]=c.group)}}return m.requestAnimationFrame(function(){for(var t in n)n[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in n)n[t].refresh()},e.findByElement=function(t){return n[t.waypointContextKey]},window.onload=function(){t&&t(),e.refreshAll()},m.requestAnimationFrame=function(t){(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}).call(window,t)},m.Context=e}(),function(){"use strict";function a(t,e){return t.triggerPoint-e.triggerPoint}function o(t,e){return e.triggerPoint-t.triggerPoint}function e(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),i[this.axis][this.name]=this}var i={vertical:{},horizontal:{}},n=window.Waypoint;e.prototype.add=function(t){this.waypoints.push(t)},e.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},e.prototype.flushTriggers=function(){for(var t in this.triggerQueues){var e=this.triggerQueues[t],i="up"===t||"left"===t;e.sort(i?o:a);for(var n=0,r=e.length;n - - - - - - Gradido Login Server: Überprüfe Transaktion - - - - - - - -
      - - -
      - -
      -
      -

      Transaktion unterzeichnen

      -
      -

      Überweisung

      -
      -
      - Konto - Gradido -
      -
      - Normaler User <info@software-labor.de> - -10 GDD -
      -
      - dario frodo <dariofrodo@gmx.de> - 10 GDD -
      -
      -
      -
      - Aktives Konto -
      -
      - Normaler User <info@software-labor.de> -
      -
      -
      -
      - Verwendungszweck -
      -
      -   -
      -
      -
      - - -
      -
      -
      -
      -
      -
      - - -
      - 98.597 ms -
      -
      -

      Community Server in Entwicklung

      -

      Alpha 0.21.KW21.05

      -
      -
      - - - \ No newline at end of file diff --git a/community_server/websrc/gulpfile.js b/community_server/websrc/gulpfile.js deleted file mode 100644 index a1cd459f7..000000000 --- a/community_server/websrc/gulpfile.js +++ /dev/null @@ -1,58 +0,0 @@ -var gulp = require('gulp'); -var less = require('gulp-less'); -var concat = require('gulp-concat'); -var merge = require('merge-stream'); -var watch = require('gulp-watch'); -//var minify = require('gulp-minify'); -var cleanCSS = require('gulp-clean-css'); - -var bundleStyles = function() { - - var lessStream = gulp.src('src/less/*.less') - .pipe(concat('src/less-files.less')) - .pipe(less()) - .pipe(gulp.dest('./')) - ; - - var mergedStream = merge(lessStream) - .pipe(concat('grd_styles.css')) - //.pipe(minify()) - .pipe(gulp.dest('../webroot/css/')); - - return mergedStream; -}; - -var compressStyles = function() { - var lessStream = gulp.src('src/less/*.less') - .pipe(concat('src/less-files.less')) - .pipe(less()) - .pipe(gulp.dest('./')) - ; - - var mergedStream = merge(lessStream) - .pipe(concat('grd_styles.min.css')) - .pipe(cleanCSS({ - compatibility: 'ie8', - level: { - 1: { - all: true - }, - 2: { - all: true - } - } - })) - .pipe(gulp.dest('../webroot/css/')); - - return mergedStream; -}; - -gulp.task("bundleStyles", bundleStyles); -gulp.task("compressStyles", compressStyles); - -gulp.task('watchStyles', function() { - bundleStyles(); - watch("src/less/*.less", function() { - bundleStyles(); - }); -}); \ No newline at end of file diff --git a/community_server/websrc/package.json b/community_server/websrc/package.json deleted file mode 100644 index 8d456e83b..000000000 --- a/community_server/websrc/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "gradido_mithriljs_client", - "version": "0.0.1", - "description": "Webinterface Client for Gradido Websites written with mithrilJS", - "main": "app.js", - "scripts": { - "watch:js": "watchify ./src/js/app.js -t [ babelify --presets [ @babel/preset-env ] ] -o ../webroot/js/app.js -v", - "watch:css": "gulp watchStyles", - "bundle:css": "gulp bundleStyles", - "prebuild": "browserify ./src/js/app.js -t [ babelify --presets [ @babel/preset-env ] ] -o ./public/app.rl.js -v", - "build": "gulp compressStyles && browserify ./public/app.rl.js -g uglifyify -p bundle-collapser/plugin | uglifyjs --compress --mangle toplevel,eval > ../webroot/js/app.min.js" - }, - "author": "Dario Rekowski", - "license": "ISC", - "dependencies": { - "google-protobuf": "^3.10.0-rc.1", - "mithril": "github:StephanHoyer/mithril.js#rewrite" - }, - "devDependencies": { - "@babel/core": "^7.6.0", - "@babel/preset-env": "^7.6.0", - "babelify": "^10.0.0", - "browserify": "^16.5.0", - "bs58check": "^2.1.2", - "bundle-collapser": "^1.3.0", - "gulp": "^4.0.2", - "gulp-clean-css": "^4.3.0", - "gulp-concat": "^2.6.1", - "gulp-less": "^4.0.1", - "gulp-minify": "^3.1.0", - "gulp-watch": "^5.0.1", - "merge-stream": "^2.0.0", - "uglify-js": "^3.6.0", - "uglifyify": "^5.0.2" - } -} diff --git a/community_server/websrc/src/less/01-layout.less b/community_server/websrc/src/less/01-layout.less deleted file mode 100644 index 2aed60860..000000000 --- a/community_server/websrc/src/less/01-layout.less +++ /dev/null @@ -1,113 +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 */ -@wide-screen-down: ~'(max-width:1199px)'; -@desktop-down: ~'(max-width:991px)'; -@tablet-down: ~'(max-width:767px)'; -@phone-down: ~'(max-width:480px)'; -@small-phone-down: ~'(max-width:320px)'; - -/* 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 @wide-screen-down { - .layout { - grid-template-areas: "header header header header header" - "left . center center center" - "footer footer footer footer footer" - "bottom bottom bottom bottom bottom"; - } - -} - -@media @tablet-down { - .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 @tablet-down { - .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; -} diff --git a/community_server/websrc/src/less/02-colors.less b/community_server/websrc/src/less/02-colors.less deleted file mode 100644 index 90eff9346..000000000 --- a/community_server/websrc/src/less/02-colors.less +++ /dev/null @@ -1,160 +0,0 @@ -/* ============================================================ - - Generic Color Definitions - - Vars and some generic CSS rules. - - Datei : colors.less - Datum : 2020-05-26 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ - -/* MAIN */ -@main-background: #f9fafb; -@main-text: #212529; -@main-link-text: #000; - -/* MENU */ -@menu-background: #fff; -@menu-link-text: #4F4F4F; -@menu-link-selected: #047006; -@menu-border-color: #f2f4f5; - -/* CONTENT */ -@container-background: #fff; -@container-text: #212529; -@container-header: #21252969; -@container-shadow: rgba(183, 192, 206, .2); -@container-border: rgba(238, 238, 238, .75); - -/* CONTENT-NAV */ -@content-nav: #565656; - -/* CONTENT-ITEMS */ -@action-button-text: #fff; -@action-button-border: #047006; -@action-button-background1: #047006; -@action-button-background: #f9fafb; -@info-item-border: grey; -@form-header-border: #047006; -@form-header-background: #f9fafb; - -/* CONTENT-TABLE */ -@content-table-title: #313131; -@content-table-header: #101010; -@content-table-header-bg: #fafafa; -@content-table-header-border: #f2f4f9; -@content-row-bg: #f0f2f5; - -/* FORMS */ -@form-label: #212529; -@badge-color-warning: #fff; -@badge-background-warning: #00e093; -@badge-color-error: #fff; -@badge-background-error: #ff5f66; - -/* VARIOUS INDIVIDUAL */ -@orange: #ffa600; - -/* XXX TODO XXX */ -@dialog-background: #fff; - -/*rgba(0, 0, 0, 0.5) ??? */ -@dialog-text: #000; -@dialog-background-extra: rgba(0, 0, 0, 0.1); -@dialog-border: grey; -@form-text-background: rgba(0, 0, 0, 0.05); -@form-button-border: grey; -@form-button-text: #444; -@button-text: #000; -@button-border-color: #000; -@button-background-active: lightgray; -@print-background: #111; -@print-text: #000; -@print-link-text: #06c; -@gdt-text: #a27824; - -/* NOTIFICATION */ -@info: grey; -@info-border: gray; -@info-background: #80808026; -@info-background-icon: #80808026; -@error: red; -@error-border: rgba(255, 0, 0, 0.5); -@success: #047006; -@success-message: #1A1A1A; -@success-message-background: #06c50a; -@success-border: #04700675; -@success-background-icon: rgba(4, 112, 6, 0.2); -@success-background-hover: lightgreen; -@alert: #ff5f66; -@alert-color: #fff; -@alert-background: #ff5f669e; -@alert-background-icon: #ff5f662e; -@alert-blink: #ff5f669e; -@notify: #525c5d; -@notify-blink: #525c5d82; - -/* https://www.w3schools.com/colors/colors_shades.asp */ -@unobtrusive: grey; -@light: #F5F5F5; -@verylight: #fbfbfb; - -.info-color { - color: @info; -} - -.success-color { - color: @success; -} - -.alert-color { - color: @alert; -} - -.orange-color { - color: @orange -} - -.blue-color { - color: blue -} - -.unobtrusive { - color: @unobtrusive; -} - -.info-icon { - color: @info; - background-color: @info-background-icon; -} - -.success-icon { - color: @success; - background-color: @success-background-icon; -} - -.alert-icon { - color: @alert; - background-color: @alert-background-icon; -} - -/* ======================= - Gradido - =======================*/ - -/* Gradido */ -.grd-negative-currency { - color: red; -} - -/* Gradido Transform */ -.gdt-text-color { - color: @gdt-text; -} - -.grd_clickable { - cursor: pointer; -} diff --git a/community_server/websrc/src/less/03-typography.less b/community_server/websrc/src/less/03-typography.less deleted file mode 100644 index 06572c9ff..000000000 --- a/community_server/websrc/src/less/03-typography.less +++ /dev/null @@ -1,32 +0,0 @@ -/* ============================================================ - - Typography Definitions - - Datei : typography.less - Datum : 2020-05-26 - Autor : Christine Slotty - Copyright : Gradio - - ============================================================*/ -@body-fs: 100%; -@body-lh: 27px; -@content-lh: 1.75em; -@content-letter-spacing: .03rem; -@nav-fs: .8em; -@nav-bottom-fs: .9em; -@nav-bottom-fs-mobile: .8em; -@nav-btn-large-fs: 35px; -@nav-icon-fs: 1.2em; -@nav-icons-fs: 18px; -@nav-icon-main-fs: 32px; -@footer-fs: 70%; -@sidebar1-header-fs: .75em; -@sidebar1-lh: 2.5em; -@link-title-lh: normal; -@devinfo-fs: smaller; -@devinfo-fs-mobile: .7em; - -.small-font { - font-size: .75em; - font-weight: 300; -} diff --git a/community_server/websrc/src/less/05-screen.less b/community_server/websrc/src/less/05-screen.less deleted file mode 100644 index 975d57dc1..000000000 --- a/community_server/websrc/src/less/05-screen.less +++ /dev/null @@ -1,174 +0,0 @@ -/* ============================================================ - - 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: @body-fs; - line-height: @body-lh; - color: @main-text; - background-color: @main-background; - 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: @menu-background; - } - - /* ======================= - Fußbereich - =======================*/ - .footer { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: center; - font-size: @footer-fs; - font-style: italic; - line-height: 0; - } - - .bottomright { - position: fixed; - bottom: 0; - right: 0; - color: @unobtrusive; - font-size: @devinfo-fs; - line-height: .125em; - padding-right: .25em; - text-align: right; - } - - @media @tablet-down { - .bottomright { - font-size: @devinfo-fs-mobile; - 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; - } - - } - - .bottomleft { - position: fixed; - bottom: 0; - left: 0; - color: @unobtrusive; - font-size: @devinfo-fs; - 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: @menu-background; - color: @main-link-text; - } - - a:focus, - a:active { - outline: none; - } - - a.grd_invisible_link { - color: @main-link-text; - text-decoration: none; - } - - a.grd_invisible_link:hover { - color: @unobtrusive; - } - - [type=button]:not(:disabled), - [type=reset]:not(:disabled), - [type=submit]:not(:disabled), - button:not(:disabled) { - cursor: pointer - } - -} - -/* Ende @media screen */ diff --git a/community_server/websrc/src/less/06-messages.less b/community_server/websrc/src/less/06-messages.less deleted file mode 100644 index 4c4d0fcb7..000000000 --- a/community_server/websrc/src/less/06-messages.less +++ /dev/null @@ -1,89 +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. -*/ - -/* ============================================================ - - 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; - - .alert { - margin: 0; - padding: 1em; - vertical-align: middle; - border-radius: 5px; - } - - .alert-success { - color: @success-message !important; - background-color: @success-message-background; - border: 1px solid @success-border; - } - - .alert-error { - color: @alert-color !important; - background-color: @error; - border: 1px solid @error-border; - } - - .message { - padding: 5px; - } - - .success { - color: @success; - } - - .error { - color: @error; - } - - } - - .flash-messages.hidden { - display: none; - } - - @media @tablet-down { - .flash-messages { - width: 90%; - top: 0; - left: 0; - text-align: center; - } - - } - - /* messages, update flash */ - .grd-error { - color: @error; - border: 1px solid @error-border; - padding: 5px; - } - - .grd-info { - border: 1px dotted @info-border; - padding: 5px; - } - - .grd-success { - padding: 5px; - color: @success; - } - -} diff --git a/community_server/websrc/src/less/07-user.less b/community_server/websrc/src/less/07-user.less deleted file mode 100644 index 50270ff49..000000000 --- a/community_server/websrc/src/less/07-user.less +++ /dev/null @@ -1,134 +0,0 @@ -/* ============================================================ - - 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: @container-background; - border: 1px solid @menu-border-color; - border-radius: 0 0 0 18px; - } - - .user-menu-container { - display: flex; - justify-content: flex-end; - align-items: center; - font-size: .8em; - font-weight: 300; - padding: .25em .5em; - z-index: 20; - height: 40px; - } - - .user-name, - .user-icon { - display: inline-block; - vertical-align: middle; - cursor: pointer; - } - - .user-name { - padding-right: .25em; - } - - .nav-vertical.user-menu { - display: none; - background-color: @container-background; - border-left: 1px solid @menu-border-color; - border-bottom: 1px solid @menu-border-color; - border-radius: 0 0 16px 16px; - z-index: 15; - font-size: .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: .5em; - padding-bottom: 1em; - margin-block-end: 0; - margin-block-start: 0; - } - - .nav-vertical.user-menu li { - padding: .0125em; - } - - .nav-top > ul { - padding: 0; - padding-right: 2em; - } - - .material-icons-outlined.user-info { - color: @unobtrusive; - } - - .material-icons-outlined.user-info.success { - color: @success; - } - - @media @tablet-down { - .header-user { - position: relative; - min-width: 3em; - background-color: transparent; - justify-content: center; - height: 100%; - margin-top: -13px; - margin-left: -16px; - color: @action-button-background1; - } - - .user-menu-container { - margin: 0; - padding: 0; - } - - .user-icon { - - } - .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; - } - - } - -} diff --git a/community_server/websrc/src/less/08-navi.less b/community_server/websrc/src/less/08-navi.less deleted file mode 100644 index e71ce93a2..000000000 --- a/community_server/websrc/src/less/08-navi.less +++ /dev/null @@ -1,451 +0,0 @@ -/* ============================================================ - - 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: .5em; - } - - .logo.big.visible, - .logo.small.visible { - display: block !important; - } - - .logo.mobile { - display: none; - } - - .logo.small.visible { - padding-left: 41px; - } - - /* - SIDEBARS - */ - .sidebar1 { - background-color: @menu-background; - font-size: @nav-fs; - font-weight: 500; - line-height: @sidebar1-lh; - padding: 0; - border-right: 1px solid @menu-border-color; - } - - .sidebar2 { - padding: 1em; - background-color: @main-background; - } - - .sidebar1-header { - font-size: @sidebar1-header-fs; - font-style: italic; - color: @unobtrusive; - } - - /* set general icons size here! */ - .nav-icon { - font-size: @nav-icons-fs !important; - color: @menu-link-text; - vertical-align: middle; - padding-right: 1em; - } - - /* important! order matters! we need to overwrite the main button's size here */ - .nav-main-button { - font-size: @nav-icon-main-fs !important; - color: @unobtrusive; - margin: .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.250, 0.460, 0.450, 0.940) both; - animation: slide-out 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - .nav-menu-minimized { - -webkit-animation: slide-in 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-in 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) 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 - */ - @media @tablet-down { - .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 .link-title { - display: inherit; - } - */ - .nav-menu-minimized .nav-icon, - .nav-menu-minimized .nav-main-button { - padding-left: 0; - } - - /* Here we "revert' maximized / minimized and change the animation */ - .nav-menu-maximized { - -webkit-animation: slide-down 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-down 0.1s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - .nav-menu-minimized { - -webkit-animation: slide-up 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - animation: slide-up 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both; - } - - /** - * ---------------------------------------- - * animations slide-down / slide-up - * ---------------------------------------- - */ - - /* slide-down */ - @-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; - } - - } - - /* slide-up */ - @-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); - } - - } - - } - - /* END navi mobile base */ - .selected { - color: @menu-link-selected; - } - - .link-title { - vertical-align: middle; - line-height: @link-title-lh; - 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: .2em .5em !important; - border: 1px solid @action-button-border; - margin: .1em .3em; - border-radius: 12px; - } - - .nav-smaller .heading { - font-weight: bold; - } - - .nav-vertical { - margin-top: -2em; - } - - .nav-horizontal li { - padding: .5em; - } - - .nav-vertical > ul { - display: flex; - flex-direction: column; - list-style-type: none; - gap: 5%; - padding: 1em; - } - - .nav-vertical li { - padding: .5em; - } - - .nav-top > ul { - padding: 0; - padding-right: 2em; - } - - @media @tablet-down { - .nav-vertical { - margin-top: 55px; - } - - } - - .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: @nav-bottom-fs; - color: @unobtrusive; - margin: 0; - } - - @media @tablet-down { - .nav-bottom p { - font-size: @nav-bottom-fs-mobile; - margin-top: -10px; - } - - } - - nav { - &.grd-left-bar { - position: fixed; - top: 80.5px; - } - - .grd-nav-bn { - width: 100px; - } - - ul { - margin-top: 0; - padding-left: 0; - } - - } - - /* buttons */ - .grd-nav-bn:hover, - .grd-active { - background-color: @button-background-active; - border-color: @main-link-text; - } - - .grd-nav-bn { - padding: 10px; - border: 1px solid @unobtrusive; - display: table-cell; - text-align: center; - vertical-align: middle; - color: @unobtrusive; - } - - .grd-nav-bn-large { - width: 40vw; - height: 18vh; - font-size: @nav-btn-large-fs; - } - - a.grd-nav-bn, - a.grd-nav-bn:visited { - color: @main-link-text; - text-decoration: none; - } - -} diff --git a/community_server/websrc/src/less/09-notification.less b/community_server/websrc/src/less/09-notification.less deleted file mode 100644 index a9bf74c0a..000000000 --- a/community_server/websrc/src/less/09-notification.less +++ /dev/null @@ -1,160 +0,0 @@ -/* ============================================================ - - 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; - } - - @media @tablet-down { - .header-notify { - justify-content: flex-end; - margin-right: 93px; - margin-top: 8px; - } - - } - - .notify { - display: block; - padding: .5rem .3rem; - color: @notify; - animation: blinkingNotifySymbol 1.2s infinite; - } - - .notify-alert { - color: @alert; - animation: blinkingAlertSymbol 1.2s infinite; - } - - @keyframes blinkingNotifySymbol { - 0% { - color: @notify; - } - - 49% { - color: @notify; - } - - 60% { - color: @notify-blink; - } - - 99% { - color: @notify-blink; - } - - 100% { - color: @notify; - } - - } - - @keyframes blinkingAlertSymbol { - 0% { - color: @alert; - } - - 49% { - color: @alert; - } - - 60% { - color: @alert-blink; - } - - 99% { - color: @alert-blink; - } - - 100% { - color: @alert; - } - - } - - /* - .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) - } - */ -} diff --git a/community_server/websrc/src/less/10-center.less b/community_server/websrc/src/less/10-center.less deleted file mode 100644 index 3163e566e..000000000 --- a/community_server/websrc/src/less/10-center.less +++ /dev/null @@ -1,224 +0,0 @@ -/* ============================================================ - - 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: @main-background; - line-height: @content-lh; - letter-spacing: @content-letter-spacing; - font-family: Roboto, sans-serif; - font-weight: 500; - font-size: 1rem; - padding-right: 5em; - } - - @media @tablet-down { - .content { - padding-right: 0; - } - - } - - /* Center Navigation Top */ - .nav-content { - position: relative; - color: @content-nav; - margin: 0 .25em; - } - - .nav-content-list { - display: flex; - list-style-type: none; - padding: 0; - margin-left: .25em; - } - - .nav-content-separator { - margin: 0 1em; - } - - @media @tablet-down { - .nav-content-list { - display: flex; - font-size: small; - margin-bottom: 0; - justify-content: center; - } - - } - - /* Center Content Container */ - .content-container { - background-color: @container-background; - color: @container-text; - border-radius: .5em; - box-shadow: 0 0 10px 0 @container-shadow; - border: 1px solid @container-border; - margin: 1em .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; - } - - @media @wide-screen-down { - .info-container { - flex-direction: column; - max-width: 90%; - line-height: .25em; - } - - } - - /* Main Container */ - .main-container { - width: 100%; - } - - @media @tablet-down { - .main-container { - max-width: 97%; - } - - } - - .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: @container-header; - } - - .content-region { - border-bottom: 1px dashed @light; - padding: 0 25px; - padding-bottom: 2em; - margin: 1em .25em; - } - - .content-collection { - display: flex; - } - - .content-item { - margin: .5em 0; - margin-right: 5em; - width: 220px; - padding: 1em 2em; - } - - .action-button { - background: @action-button-background; - border-left: 3px solid @action-button-border; - } - - .info-item { - border-left: 2px solid @info-item-border; - } - - .inline-header { - display: inline; - } - - .show-profile-img { - display: block; - height: 100px; - vertical-align: middle; - border-radius: 10px; - border: 2px dotted @info-background; - } - - @media @tablet-down { - .content-region { - padding-left: 5px; - } - - .content-collection { - flex-direction: column; - align-items: center; - } - - .content-item { - margin: .5em 0; - margin-right: 0; - width: 160px; - padding: 1em 2em; - } - - } - - /* OTHER */ - .info-item i, - .info-item-link, - .action-button i, - .action-button-link { - vertical-align: middle; - } - -} - -/* Ende @media screen */ diff --git a/community_server/websrc/src/less/12-center-form-single.less b/community_server/websrc/src/less/12-center-form-single.less deleted file mode 100644 index 8179da087..000000000 --- a/community_server/websrc/src/less/12-center-form-single.less +++ /dev/null @@ -1,164 +0,0 @@ -/* ============================================================ - - 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: @container-background; - 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); - } - - @media @tablet-down { - .center-form-header { - margin-bottom: 30px; - margin-top: -50px; - } - - .center-form-single { - width: 97%; - margin: auto; - } - - .center-form-container { - padding: 1em .5em; - } - - } - - .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: .5em; - } - - .center-form-submit { - width: 100%; - margin: 1em 0; - } - - .reset-pwd-link, - .signup-link { - padding: 0 20px; - - & a { - color: @action-button-background1; - } - - & p { - display: inline-block; - margin-block-start: 0; - margin-block-end: 0; - } - - } - - .center-bottom { - color: @unobtrusive; - 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, .2); - 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) - } - - .group-is-invalid .radio label .input-frame::before { - border-color: red; - } - -} - -/* Ende @media screen */ diff --git a/community_server/websrc/src/less/15-facts.less b/community_server/websrc/src/less/15-facts.less deleted file mode 100644 index 3bac37ff7..000000000 --- a/community_server/websrc/src/less/15-facts.less +++ /dev/null @@ -1,62 +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. -*/ - -/* ============================================================ - - 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 @tablet-down { - .fact-list { - margin-block-start: 0; - margin-block-end: 0; - } - - li.fact { - display: flex; - flex-direction: column; - } - - .fact { - padding-left: .5em; - } - - .label { - width: 250px; - text-align: left; - font-size: .9em; - font-weight: normal; - } - - } - -} diff --git a/community_server/websrc/src/less/20-list.less b/community_server/websrc/src/less/20-list.less deleted file mode 100644 index d09fe0594..000000000 --- a/community_server/websrc/src/less/20-list.less +++ /dev/null @@ -1,239 +0,0 @@ -/* ============================================================ - - 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: @content-table-title; - } - - .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: .5s; - transition-duration: .5s; - } - - @media @tablet-down { - .row { - flex-direction: column; - } - - } - - .row:hover { - background-color: #f6f7f9; - } - - .cell { - display: flex; - flex-wrap: wrap; - align-items: center; - padding: 1em 1.5em; - } - - .cell-dense { - padding: .1em .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; - } - - @media @tablet-down { - .cell { - padding: .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; - } - - } - - .header-cell { - border-top: 1px solid @content-table-header-border; - background-color: @content-table-header-bg; - color: @content-table-header; - } - - .content-list-table img, - .content-list-table i { - vertical-align: middle; - } - - .content-list-table > span { - font-size: .8em; - padding: .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, .2); - overflow: hidden; - border-style: none; - box-sizing: border-box; - margin-right: 40px; - } - - .tx-email { - cursor: pointer; - display: block; - color: @content-table-header; - 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 @content-table-header-border; - border-top: none; - margin-bottom: 1.5rem; - } - - .content-row { - display: flex; - justify-content: space-between; - font-weight: 400; - border-top: 1px solid @content-table-header-border; - } - - .content-row-header { - font-weight: 500; - color: @content-table-header; - } - - .content-row-bg { - background-color: @content-row-bg; - } - - .content-cell { - display: block; - border-collapse: collapse; - padding: 10px 15px; - } - - .form-button .material-icons-outlined { - font-size: 1.25em; - } - -} diff --git a/community_server/websrc/src/less/21-tabs.less b/community_server/websrc/src/less/21-tabs.less deleted file mode 100644 index 694dd1dab..000000000 --- a/community_server/websrc/src/less/21-tabs.less +++ /dev/null @@ -1,45 +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 : 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; -} \ No newline at end of file diff --git a/community_server/websrc/src/less/30-form.less b/community_server/websrc/src/less/30-form.less deleted file mode 100644 index df52a684e..000000000 --- a/community_server/websrc/src/less/30-form.less +++ /dev/null @@ -1,238 +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. -*/ - -/* ============================================================ - - 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 @form-header-border; - background: @form-header-background; - padding: 15px 20px; - margin: 0; - margin-bottom: 15px; - border-radius: 0 6px 0 0; - } - - .form-label { - grid-column: 1 / 2; - font-weight: 400; - text-align: right; - padding-right: .5em; - } - - .form-control { - grid-column: 2 / 3; - display: block; - padding: .4em .75em; - padding-left: 20px; - padding-right: 20px; - margin: 0; - margin-right: .5em; - color: rgba(16, 16, 16, .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: .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; - } - - .form-control:focus { - color: #495057; - background-color: #f6f7f9; - border-color: #d7dee5; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25); - } - - textarea { - resize: vertical; - } - - .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 - } - - .badge-warning { - color: @badge-color-warning; - background-color: @badge-background-warning; - } - - .badge-error { - color: @badge-color-error; - background-color: @badge-background-error; - } - - .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: .875rem; - line-height: 1.5; - text-align: center; - vertical-align: middle; - color: @action-button-text; - background-color: @action-button-background1; - border-color: @action-button-border; - border: 1px solid transparent; - border-radius: .2rem; - height: 35px; - max-height: 35px; - padding: 4px 15px; - margin-right: .5em; - box-shadow: 0 0 2px 0 rgba(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: @action-button-background; - color: @action-button-text; - height: 17px; - padding: 1em 2em; - line-height: 1em; - border-radius: 6px; - text-align: center; - vertical-align: middle; - } - - .action-link { - color: @action-button-background1 !important; - } - - .action-link-button { - background-color: @action-button-background1 !important; - color: @action-button-text !important; - margin-top: 1em; - padding: .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: .5s; - transition-duration: .5s; - } - - .justify-end { - justify-content: flex-end; - } - - @media @tablet-down { - .grid-row { - flex-direction: column; - } - - } - - .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 @tablet-down { - .form-body form { - grid-template-columns: 1fr; - margin: 20px; - grid-gap: .25em; - } - - .form-label { - text-align: left; - } - - } - -} diff --git a/configs/community_server/app.php b/configs/community_server/app.php deleted file mode 100644 index d56a43cc0..000000000 --- a/configs/community_server/app.php +++ /dev/null @@ -1,431 +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', '7ddf685a27d997ef36e51bdd626e7fc6b50a3abfb2971e8e59974d421116a150'), - ], - - /** - * 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, - 'className' => 'Smtp', - 'tls' => true - ], - ], - - /** - * 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' => 'mariadb', - /* - * 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' => 'root', - 'password' => '', - 'database' => 'gradido_community', - /* - * 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' => 'mariadb', - //'port' => 'non_standard_port_number', - 'username' => 'root', - 'password' => '', - 'database' => 'gradido_community_test', - //'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://login-server', - 'port' => 1201, - 'url' => 'http://localhost' - ], - - // login server for look up emails from other groups - // workaround for using multiple groups until every code is finished as planned - // normally node server are responsible for email look up from users from other groups - 'NeighborLoginServers' => [ - ['host' => 'login-server', 'port' => 1201] - ], - 'GradidoBlockchain' => [ - // type: - // - db: centralized blockchain in mysql db, no cross group transactions - // - hedera: send transaction over hedera - 'type' => 'db', - // gradido nodes with blockchain (if type != db) - 'nodes' => [ - ['host' => 'node', 'port' => 13702] - ] - ], - - 'GroupAlias' => 'docker', - 'GDTServer' => [ - 'host' => 'https://gdt.gradido.net' // staging - ], - 'API' => [ - 'allowedCaller' => ['login-server'] - ], - 'ServerAdminEmail' => 'info@gradido.net', - 'noReplyEmail' => 'no-reply@gradido.net', - 'disableEmail' => true - -]; diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 250b392db..3d63da9e3 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -78,23 +78,6 @@ services: # bind the local folder to the docker to allow live reload - ./database:/app - ######################################################### - ## COMMUNITY SERVER (cakephp with php-fpm) ############## - ######################################################### - community-server: - build: - context: . - target: community_server - dockerfile: ./community_server/Dockerfile - depends_on: - - mariadb - networks: - - internal-net - - external-net - volumes: - - ./community_server/config/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini - - ./community_server/src:/var/www/cakephp/src - ######################################################### ## MARIADB ############################################## ######################################################### diff --git a/docker-compose.test.yml b/docker-compose.test.yml index a719f8c36..221ecba20 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -35,24 +35,6 @@ services: volumes: - db_test_vol:/var/lib/mysql - ######################################################### - ## COMMUNITY SERVER (cakephp with php-fpm) ############## - ######################################################### - community-server: - build: - context: . - target: test - dockerfile: ./community_server/Dockerfile - depends_on: - - mariadb - networks: - - internal-net - volumes: - - ./community_server/config/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini - - ./community_server/src:/var/www/cakephp/src - - ./coverage/community:/var/www/cakephp/webroot/coverage - - ######################################################### ## PHPMYADMIN ########################################### ######################################################### diff --git a/docker-compose.yml b/docker-compose.yml index 9c92e19ea..213b200cd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -145,25 +145,6 @@ services: ports: - 80:80 - ######################################################### - ## COMMUNITY SERVER (cakephp with php-fpm) ############## - ######################################################### - community-server: - build: - context: . - target: community_server - dockerfile: ./community_server/Dockerfile - environment: - - DB_PASSWORD='' - - DB_USER='root' - - DB_DATABASE='gradido_community' - depends_on: - - mariadb - networks: - - internal-net - volumes: - - ./community_server/config/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini - networks: external-net: internal-net: diff --git a/php-fpm/Dockerfile b/php-fpm/Dockerfile deleted file mode 100644 index d648fb564..000000000 --- a/php-fpm/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -From phpdockerio/php74-fpm as php-fpm - -# Install selected extensions and other stuff -RUN apt-get update \ - && apt-get -y --no-install-recommends install curl php7.4-curl php7.4-fpm php7.4-mbstring php7.4-intl php7.4-xml php7.4-pdo php7.4-mysql\ - && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* - - -WORKDIR "/var/www/cakephp" \ No newline at end of file From abec7d02483a7f6b1150e44e745528f3c23006e9 Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 2 Feb 2022 15:00:41 +0100 Subject: [PATCH 02/38] Remove community_server url call in gitmodules and readme. --- .gitmodules | 4 ---- README.md | 1 - 2 files changed, 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index e884aaf3e..0ea7400c0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,7 +2,3 @@ path = gn url = https://github.com/gradido/gn.git branch = master - -[submodule "community_server/src/protobuf"] - path = community_server/src/protobuf - url = https://github.com/gradido/gradido_protocol.git diff --git a/README.md b/README.md index 4b0a3b6fd..e97055a78 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,6 @@ docker-compose -f docker-compose.yml up - [frontend](./frontend) Wallet frontend - [backend](./backend) GraphQL & Business logic backend - [mariadb](./mariadb) Database backend -- [community_server](./community_server/) Business logic backend We are currently restructuring the service to reduce dependencies and unify business logic into one place. Furthermore the databases defined for each service will be unified into one. From 8b3fcc61839f6f0536d991059b87cdbc8df39e90 Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 2 Feb 2022 15:03:18 +0100 Subject: [PATCH 03/38] Change the documentation of the coin creation to the new admin interface. --- docu/create-coins-as-admin.md | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/docu/create-coins-as-admin.md b/docu/create-coins-as-admin.md index f03da7733..442864cff 100644 --- a/docu/create-coins-as-admin.md +++ b/docu/create-coins-as-admin.md @@ -9,19 +9,7 @@ INSERT INTO user_roles (id, user_id, role_id) VALUES (NULL, '1', '1'); user_id has to be found in users Now when we login in on https://$community_domain/account/ we can create coins but we will be restricted cause we can't sign the creations. -### Signation account -At first we need to enable the server user account creation with uncommenting line: 19 in -community_server/src/Controller/ServerUsersController.php -```php -$this->Auth->allow(['add', 'edit']); -``` -This enable us to use this action without being logged in. -To add a signation account we need to go on the following url: http://$community_domain/server-users/add - ### Coin creation process -The coin creation for work is done in the following url: http://$community_domain/transaction-creations/create-multi -Where we can create coins for a number of as many users as we want excepted for our self. -Furthermore we must sign the transactions we created. Normally after clicking on the left button (Transaktion abschließen) we should be automatically forwarded to http://$community_domain/account/checkTransactions where we can do this. -If not this page can also be reached by clicking on the shield-icon with the hook in it on the Dashboard, which is only shown if at least one transaction is waiting for signing. - -For debug purposes you can check the `pending_tasks` table, which is used to store the transactions which are not signed yet or had errors. \ No newline at end of file +Admin (User needs a certain role) can go through the wallet into the Admin Interface. +Their he has multiple pages, the user search page allows to find user and to create coins for them if their email was verified. He can in the multiple creation page select multiple users for which he want to create a same amount of coins. +After an Admin has proposed a creation every admin has the possibility to validate this creation except for a own creation! Every Admin can also update the proposed creation. \ No newline at end of file From 8aa67dab1e92d599e0646ed7db4f7d5e83572a51 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 2 Feb 2022 05:27:44 +0100 Subject: [PATCH 04/38] removed unnecessary repositories, we can now use the implicit active record functions --- backend/src/typeorm/repository/LoginElopageBuys.ts | 5 ----- backend/src/typeorm/repository/LoginEmailOptIn.ts | 5 ----- backend/src/typeorm/repository/LoginUserBackup.ts | 5 ----- backend/src/typeorm/repository/ServerUser.ts | 5 ----- backend/src/typeorm/repository/TransactionCreation.ts | 5 ----- 5 files changed, 25 deletions(-) delete mode 100644 backend/src/typeorm/repository/LoginElopageBuys.ts delete mode 100644 backend/src/typeorm/repository/LoginEmailOptIn.ts delete mode 100644 backend/src/typeorm/repository/LoginUserBackup.ts delete mode 100644 backend/src/typeorm/repository/ServerUser.ts delete mode 100644 backend/src/typeorm/repository/TransactionCreation.ts diff --git a/backend/src/typeorm/repository/LoginElopageBuys.ts b/backend/src/typeorm/repository/LoginElopageBuys.ts deleted file mode 100644 index 0448c84ee..000000000 --- a/backend/src/typeorm/repository/LoginElopageBuys.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { EntityRepository, Repository } from '@dbTools/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 0906e8b51..000000000 --- a/backend/src/typeorm/repository/LoginEmailOptIn.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { EntityRepository, Repository } from '@dbTools/typeorm' -import { LoginEmailOptIn } from '@entity/LoginEmailOptIn' - -@EntityRepository(LoginEmailOptIn) -export class LoginEmailOptInRepository extends Repository {} diff --git a/backend/src/typeorm/repository/LoginUserBackup.ts b/backend/src/typeorm/repository/LoginUserBackup.ts deleted file mode 100644 index a54b1e8af..000000000 --- a/backend/src/typeorm/repository/LoginUserBackup.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { EntityRepository, Repository } from '@dbTools/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 0ab33c44a..000000000 --- a/backend/src/typeorm/repository/ServerUser.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { EntityRepository, Repository } from '@dbTools/typeorm' -import { ServerUser } from '@entity/ServerUser' - -@EntityRepository(ServerUser) -export class ServerUserRepository extends Repository {} diff --git a/backend/src/typeorm/repository/TransactionCreation.ts b/backend/src/typeorm/repository/TransactionCreation.ts deleted file mode 100644 index 938715574..000000000 --- a/backend/src/typeorm/repository/TransactionCreation.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { EntityRepository, Repository } from '@dbTools/typeorm' -import { TransactionCreation } from '@entity/TransactionCreation' - -@EntityRepository(TransactionCreation) -export class TransactionCreationRepository extends Repository {} From 8005b700c39ea826f81e4b1ea3f97747efc1258a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 2 Feb 2022 05:28:23 +0100 Subject: [PATCH 05/38] removed references and implemented implicit active record queries --- backend/src/graphql/directive/isAuthorized.ts | 5 ++--- backend/src/graphql/resolver/AdminResolver.ts | 11 +++-------- backend/src/graphql/resolver/UserResolver.ts | 10 ++++------ backend/src/webhook/elopage.ts | 4 +--- 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/backend/src/graphql/directive/isAuthorized.ts b/backend/src/graphql/directive/isAuthorized.ts index d5c8495bb..89da13ff7 100644 --- a/backend/src/graphql/directive/isAuthorized.ts +++ b/backend/src/graphql/directive/isAuthorized.ts @@ -5,10 +5,10 @@ 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 '@dbTools/typeorm' import { UserRepository } from '../../typeorm/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 @@ -38,8 +38,7 @@ const isAuthorized: AuthChecker = async ({ context }, rights) => { // 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 }) + const countServerUsers = await ServerUser.count({ email: user.email }) context.role = countServerUsers > 0 ? ROLE_ADMIN : ROLE_USER context.setHeaders.push({ key: 'token', value: encode(decoded.pubKey) }) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 4204c6c2f..d15107ff4 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -9,7 +9,6 @@ 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 { UserRepository } from '../../typeorm/repository/User' import CreatePendingCreationArgs from '../arg/CreatePendingCreationArgs' import UpdatePendingCreationArgs from '../arg/UpdatePendingCreationArgs' @@ -75,8 +74,7 @@ export class AdminResolver { adminPendingCreation.memo = memo adminPendingCreation.moderator = moderator - await AdminPendingCreation.save(adminPendingCreation) - } + await AdminPendingCreation.save(adminPendingCreation) } return getUserCreations(user.id) } @@ -198,13 +196,12 @@ export class AdminResolver { transaction = await transactionRepository.save(transaction) if (!transaction) throw new Error('Could not create transaction') - 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) + transactionCreation = await TransactionCreation.save(transactionCreation) if (!transactionCreation) throw new Error('Could not create transactionCreation') const userTransactionRepository = getCustomRepository(UserTransactionRepository) @@ -256,9 +253,7 @@ async function getUserCreations(id: number): Promise { const lastMonthNumber = moment().subtract(1, 'month').format('M') const currentMonthNumber = moment().format('M') - const transactionCreationRepository = getCustomRepository(TransactionCreationRepository) - const createdAmountsQuery = await transactionCreationRepository - .createQueryBuilder('transaction_creations') + const createdAmountsQuery = await TransactionCreation.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 }) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 14a56b60b..5926a8a95 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -22,12 +22,12 @@ import { LoginUserBackup } from '@entity/LoginUserBackup' import { LoginEmailOptIn } from '@entity/LoginEmailOptIn' import { sendResetPasswordEmail } from '../../mailer/sendResetPasswordEmail' import { sendAccountActivationEmail } from '../../mailer/sendAccountActivationEmail' -import { LoginElopageBuysRepository } from '../../typeorm/repository/LoginElopageBuys' import { klicktippSignIn } 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 { LoginElopageBuys } from '@entity/LoginElopageBuys' +import { ServerUser } from '@entity/ServerUser' const EMAIL_OPT_IN_RESET_PASSWORD = 2 const EMAIL_OPT_IN_REGISTER = 1 @@ -335,8 +335,7 @@ export class UserResolver { 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({ @@ -812,8 +811,7 @@ export class UserResolver { return false } - const loginElopageBuysRepository = getCustomRepository(LoginElopageBuysRepository) - const elopageBuyCount = await loginElopageBuysRepository.count({ payerEmail: userEntity.email }) + const elopageBuyCount = await LoginElopageBuys.count({ payerEmail: userEntity.email }) return elopageBuyCount > 0 } } diff --git a/backend/src/webhook/elopage.ts b/backend/src/webhook/elopage.ts index 9c1aadd2e..a442d2634 100644 --- a/backend/src/webhook/elopage.ts +++ b/backend/src/webhook/elopage.ts @@ -30,14 +30,12 @@ import { LoginElopageBuys } from '@entity/LoginElopageBuys' import { getCustomRepository } from '@dbTools/typeorm' import { UserResolver } from '../graphql/resolver/UserResolver' -import { LoginElopageBuysRepository } from '../typeorm/repository/LoginElopageBuys' import { LoginUserRepository } from '../typeorm/repository/LoginUser' 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 loginElopageBuyRepository = await getCustomRepository(LoginElopageBuysRepository) const loginElopageBuy = new LoginElopageBuys() const { @@ -82,7 +80,7 @@ export const elopageWebhook = async (req: any, res: any): Promise => { } // Save the hook data - await loginElopageBuyRepository.save(loginElopageBuy) + await LoginElopageBuys.save(loginElopageBuy) // create user for certain products /* From 6e26e0748cd234d3810ba036e6c988b95854ef95 Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 3 Feb 2022 07:05:46 +0100 Subject: [PATCH 06/38] Remove protobuf file from community_server. --- community_server/src/protobuf | 1 - 1 file changed, 1 deletion(-) delete mode 160000 community_server/src/protobuf 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 From c101873375b695999ad5252bbb6949db6d148ba2 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 2 Feb 2022 05:27:44 +0100 Subject: [PATCH 07/38] removed unnecessary repositories, we can now use the implicit active record functions --- backend/src/typeorm/repository/LoginElopageBuys.ts | 5 ----- backend/src/typeorm/repository/LoginEmailOptIn.ts | 5 ----- backend/src/typeorm/repository/ServerUser.ts | 5 ----- backend/src/typeorm/repository/TransactionCreation.ts | 5 ----- 4 files changed, 20 deletions(-) delete mode 100644 backend/src/typeorm/repository/LoginElopageBuys.ts delete mode 100644 backend/src/typeorm/repository/LoginEmailOptIn.ts delete mode 100644 backend/src/typeorm/repository/ServerUser.ts delete mode 100644 backend/src/typeorm/repository/TransactionCreation.ts diff --git a/backend/src/typeorm/repository/LoginElopageBuys.ts b/backend/src/typeorm/repository/LoginElopageBuys.ts deleted file mode 100644 index 0448c84ee..000000000 --- a/backend/src/typeorm/repository/LoginElopageBuys.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { EntityRepository, Repository } from '@dbTools/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 0906e8b51..000000000 --- a/backend/src/typeorm/repository/LoginEmailOptIn.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { EntityRepository, Repository } from '@dbTools/typeorm' -import { LoginEmailOptIn } from '@entity/LoginEmailOptIn' - -@EntityRepository(LoginEmailOptIn) -export class LoginEmailOptInRepository extends Repository {} diff --git a/backend/src/typeorm/repository/ServerUser.ts b/backend/src/typeorm/repository/ServerUser.ts deleted file mode 100644 index 0ab33c44a..000000000 --- a/backend/src/typeorm/repository/ServerUser.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { EntityRepository, Repository } from '@dbTools/typeorm' -import { ServerUser } from '@entity/ServerUser' - -@EntityRepository(ServerUser) -export class ServerUserRepository extends Repository {} diff --git a/backend/src/typeorm/repository/TransactionCreation.ts b/backend/src/typeorm/repository/TransactionCreation.ts deleted file mode 100644 index 938715574..000000000 --- a/backend/src/typeorm/repository/TransactionCreation.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { EntityRepository, Repository } from '@dbTools/typeorm' -import { TransactionCreation } from '@entity/TransactionCreation' - -@EntityRepository(TransactionCreation) -export class TransactionCreationRepository extends Repository {} From c63a42009e01061415f4e07540c863ae3fc97171 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 2 Feb 2022 05:28:23 +0100 Subject: [PATCH 08/38] removed references and implemented implicit active record queries --- backend/src/graphql/directive/isAuthorized.ts | 5 ++--- backend/src/graphql/resolver/AdminResolver.ts | 11 +++-------- backend/src/graphql/resolver/UserResolver.ts | 10 ++++------ backend/src/webhook/elopage.ts | 4 +--- 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/backend/src/graphql/directive/isAuthorized.ts b/backend/src/graphql/directive/isAuthorized.ts index d5c8495bb..89da13ff7 100644 --- a/backend/src/graphql/directive/isAuthorized.ts +++ b/backend/src/graphql/directive/isAuthorized.ts @@ -5,10 +5,10 @@ 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 '@dbTools/typeorm' import { UserRepository } from '../../typeorm/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 @@ -38,8 +38,7 @@ const isAuthorized: AuthChecker = async ({ context }, rights) => { // 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 }) + const countServerUsers = await ServerUser.count({ email: user.email }) context.role = countServerUsers > 0 ? ROLE_ADMIN : ROLE_USER context.setHeaders.push({ key: 'token', value: encode(decoded.pubKey) }) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 2c8cbfe27..1527155e8 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -9,7 +9,6 @@ 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 { UserRepository } from '../../typeorm/repository/User' import CreatePendingCreationArgs from '../arg/CreatePendingCreationArgs' import UpdatePendingCreationArgs from '../arg/UpdatePendingCreationArgs' @@ -75,8 +74,7 @@ export class AdminResolver { adminPendingCreation.memo = memo adminPendingCreation.moderator = moderator - await AdminPendingCreation.save(adminPendingCreation) - } + await AdminPendingCreation.save(adminPendingCreation) } return getUserCreations(user.id) } @@ -198,13 +196,12 @@ export class AdminResolver { transaction = await transactionRepository.save(transaction) if (!transaction) throw new Error('Could not create transaction') - 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) + transactionCreation = await TransactionCreation.save(transactionCreation) if (!transactionCreation) throw new Error('Could not create transactionCreation') const userTransactionRepository = getCustomRepository(UserTransactionRepository) @@ -256,9 +253,7 @@ async function getUserCreations(id: number): Promise { const lastMonthNumber = moment().subtract(1, 'month').format('M') const currentMonthNumber = moment().format('M') - const transactionCreationRepository = getCustomRepository(TransactionCreationRepository) - const createdAmountsQuery = await transactionCreationRepository - .createQueryBuilder('transaction_creations') + const createdAmountsQuery = await TransactionCreation.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 }) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index d7ecfa797..60648d632 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -19,11 +19,11 @@ import { UserRepository } from '../../typeorm/repository/User' import { LoginEmailOptIn } from '@entity/LoginEmailOptIn' import { sendResetPasswordEmail } from '../../mailer/sendResetPasswordEmail' import { sendAccountActivationEmail } from '../../mailer/sendAccountActivationEmail' -import { LoginElopageBuysRepository } from '../../typeorm/repository/LoginElopageBuys' import { klicktippSignIn } from '../../apis/KlicktippController' import { RIGHTS } from '../../auth/RIGHTS' -import { ServerUserRepository } from '../../typeorm/repository/ServerUser' import { ROLE_ADMIN } from '../../auth/ROLES' +import { LoginElopageBuys } from '@entity/LoginElopageBuys' +import { ServerUser } from '@entity/ServerUser' const EMAIL_OPT_IN_RESET_PASSWORD = 2 const EMAIL_OPT_IN_REGISTER = 1 @@ -303,8 +303,7 @@ export class UserResolver { 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({ @@ -718,8 +717,7 @@ export class UserResolver { return false } - const loginElopageBuysRepository = getCustomRepository(LoginElopageBuysRepository) - const elopageBuyCount = await loginElopageBuysRepository.count({ payerEmail: userEntity.email }) + const elopageBuyCount = await LoginElopageBuys.count({ payerEmail: userEntity.email }) return elopageBuyCount > 0 } } diff --git a/backend/src/webhook/elopage.ts b/backend/src/webhook/elopage.ts index 0b392abb1..b01106bf3 100644 --- a/backend/src/webhook/elopage.ts +++ b/backend/src/webhook/elopage.ts @@ -30,14 +30,12 @@ import { LoginElopageBuys } from '@entity/LoginElopageBuys' import { getCustomRepository } from '@dbTools/typeorm' import { UserResolver } from '../graphql/resolver/UserResolver' -import { LoginElopageBuysRepository } from '../typeorm/repository/LoginElopageBuys' 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 loginElopageBuyRepository = await getCustomRepository(LoginElopageBuysRepository) const loginElopageBuy = new LoginElopageBuys() const { @@ -82,7 +80,7 @@ export const elopageWebhook = async (req: any, res: any): Promise => { } // Save the hook data - await loginElopageBuyRepository.save(loginElopageBuy) + await LoginElopageBuys.save(loginElopageBuy) // create user for certain products /* From 545aca8ffbe0fdcadfd356ecd202096679601c49 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 4 Feb 2022 00:05:55 +0100 Subject: [PATCH 09/38] lint fix --- backend/src/graphql/resolver/AdminResolver.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 1527155e8..bc07c79ec 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -74,7 +74,8 @@ export class AdminResolver { adminPendingCreation.memo = memo adminPendingCreation.moderator = moderator - await AdminPendingCreation.save(adminPendingCreation) } + await AdminPendingCreation.save(adminPendingCreation) + } return getUserCreations(user.id) } From c21f7da5ce63016bb480c1ecc5af11fc5e007197 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 4 Feb 2022 15:50:24 +0100 Subject: [PATCH 10/38] lint fixes --- backend/src/graphql/resolver/AdminResolver.ts | 3 ++- backend/src/webhook/elopage.ts | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 1527155e8..bc07c79ec 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -74,7 +74,8 @@ export class AdminResolver { adminPendingCreation.memo = memo adminPendingCreation.moderator = moderator - await AdminPendingCreation.save(adminPendingCreation) } + await AdminPendingCreation.save(adminPendingCreation) + } return getUserCreations(user.id) } diff --git a/backend/src/webhook/elopage.ts b/backend/src/webhook/elopage.ts index b01106bf3..af6b5a097 100644 --- a/backend/src/webhook/elopage.ts +++ b/backend/src/webhook/elopage.ts @@ -28,7 +28,6 @@ */ import { LoginElopageBuys } from '@entity/LoginElopageBuys' -import { getCustomRepository } from '@dbTools/typeorm' import { UserResolver } from '../graphql/resolver/UserResolver' import { User as dbUser } from '@entity/User' From 8a107fdf65e10c5304760ce57a42e6bb61e5fd85 Mon Sep 17 00:00:00 2001 From: ogerly Date: Fri, 4 Feb 2022 19:09:59 +0100 Subject: [PATCH 11/38] better style to better identify active tab --- .../src/views/Pages/UserProfileTransactionList.vue | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/frontend/src/views/Pages/UserProfileTransactionList.vue b/frontend/src/views/Pages/UserProfileTransactionList.vue index f9240008d..12ae201d2 100644 --- a/frontend/src/views/Pages/UserProfileTransactionList.vue +++ b/frontend/src/views/Pages/UserProfileTransactionList.vue @@ -1,7 +1,7 @@