summary refs log tree commit diff
path: root/synapse/rest (follow)
Commit message (Expand)AuthorAgeFilesLines
* Add GET method to admin API /users/@user:dom/adminOlivier Wilkinson (reivilibre)2019-08-272-9/+33
* Add Admin API capability to set adminship of a user (#5878)reivilibre2019-08-272-0/+78
* Merge pull request #5877 from Awesome-Technologies/remove_shared_secret_regis...Richard van der Hoff2019-08-221-53/+4
|\
| * Remove shared secret registration from client/r0/register endpointManuel Stahl2019-08-221-53/+4
* | Revert "Add "require_consent" parameter for registration"Brendan Abolivier2019-08-221-4/+1
* | Add "require_consent" parameter for registrationHalf-Shot2019-08-221-1/+4
* | Opentrace e2e keys (#5855)Jorik Schellekens2019-08-221-1/+12
* | Servlet to purge old rooms (#5845)Richard van der Hoff2019-08-222-0/+59
|/
* Fix up password reset template config names (#5863)Andrew Morgan2019-08-151-2/+2
* Don't load the media repo when configured to use an external media repo (#5754)Amber Brown2019-08-134-91/+143
* Return 404 instead of 403 when retrieving an event without perms (#5798)Andrew Morgan2019-08-061-3/+11
* LintBrendan Abolivier2019-08-011-4/+2
* Allow defining HTML templates to serve the user on account renewalBrendan Abolivier2019-08-011-6/+17
* Merge tag 'v1.2.0rc2' into developAndrew Morgan2019-07-243-9/+39
|\
| * Fix servlet metric names (#5734)Jorik Schellekens2019-07-243-9/+39
* | Replace returnValue with return (#5736)Amber Brown2019-07-2339-288/+270
|/
* Remove the ability to query relations when the original event was redacted. (...Andrew Morgan2019-07-181-32/+43
* fix typo: backgroud -> backgroundAndrew Morgan2019-07-121-1/+1
* Clean up exception handling for access_tokens (#5656)Richard van der Hoff2019-07-112-4/+15
* Don't bundle aggregations when retrieving the original event (#5654)Andrew Morgan2019-07-101-2/+12
* Include the original event in /relations (#5626)Andrew Morgan2019-07-091-3/+5
* Remove access-token support from RegistrationHandler.register (#5641)Richard van der Hoff2019-07-083-18/+10
* Factor out some redundant code in the login impl (#5639)Richard van der Hoff2019-07-081-39/+10
* Move logging utilities out of the side drawer of util/ and into logging/ (#5606)Amber Brown2019-07-046-18/+14
* Fix media repo breaking (#5593)Amber Brown2019-07-021-0/+1
* Complete the SAML2 implementation (#5422)Richard van der Hoff2019-07-022-43/+48
|\
| * Merge branch 'develop' into rav/saml2_clientRichard van der Hoff2019-07-019-122/+75
| |\
| * | rename BaseSSORedirectServlet for consistencyRichard van der Hoff2019-06-271-3/+3
| * | Move all the saml stuff out to a centralised handlerRichard van der Hoff2019-06-262-44/+4
| * | Merge branch 'develop' into rav/saml2_clientRichard van der Hoff2019-06-2657-1432/+1275
| |\ \
| * | | Code cleanups and simplifications.Richard van der Hoff2019-06-112-45/+42
| * | | Merge remote-tracking branch 'origin/develop' into rav/saml2_clientRichard van der Hoff2019-06-1039-321/+531
| |\ \ \
| * | | | SAML2 Improvements and redirect stuffAlexander Trost2019-06-021-0/+46
* | | | | Fix JWT login with new users (#5586)PauRE2019-07-021-6/+3
* | | | | fix async/await consentresource (#5585)Amber Brown2019-07-011-1/+3
| |_|_|/ |/| | |
* | | | Make the http server handle coroutine-making REST servlets (#5475)Amber Brown2019-06-298-120/+73
* | | | Fix JWT login (#5555)PauRE2019-06-271-1/+1
| |_|/ |/| |
* | | Split public rooms directory auth config in twoBrendan Abolivier2019-06-241-1/+1
* | | Run Black. (#5482)Amber Brown2019-06-2057-1426/+1254
* | | Merge pull request #5390 from matrix-org/erikj/dont_log_on_fail_to_get_fileErik Johnston2019-06-141-2/+4
|\ \ \
| * | | Don't log exception when failing to fetch remote content.Erik Johnston2019-06-071-2/+4
* | | | Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2019-06-111-4/+5
|\ \ \ \
| * | | | Change password reset links to /_matrix.Erik Johnston2019-06-111-4/+5
| |/ / /
* | | / Don't warn user about password reset disabling through config code (#5387)Andrew Morgan2019-06-111-4/+15
| |_|/ |/| |
* | | Merge pull request #5363 from matrix-org/babolivier/account_validity_send_mai...Brendan Abolivier2019-06-101-1/+1
|\ \ \ | |/ / |/| |
| * | Don't check whether the user's account is expired on /send_mail requestsBrendan Abolivier2019-06-051-1/+1
* | | Add ability to perform password reset via email without trusting the identity...Andrew Morgan2019-06-061-5/+238
* | | Neilj/add r0.5 to versions (#5360)Neil Johnson2019-06-051-0/+1
* | | Merge pull request #5333 from matrix-org/rav/server_keys/09_improve_notary_se...Richard van der Hoff2019-06-041-10/+2
|\ \ \
| * | | Notary server: make requests to origins in parallelRichard van der Hoff2019-06-041-10/+2
* | | | Hawkowl/fix missing auth (#5328)Amber Brown2019-06-041-0/+1
|/ / /
* | / Unify v1 and v2 REST client APIs (#5226)Amber Brown2019-06-0337-305/+287
| |/ |/|
* | Fix ignored filter field in `/messages` endpointEisha Chen-yen-su2019-05-301-0/+2
* | Merge pull request #5256 from aaronraimist/logout-correct-errorErik Johnston2019-05-301-18/+9
|\ \
| * | LintAaron Raimist2019-05-291-2/+0
| * | Get rid of try exceptAaron Raimist2019-05-271-16/+9
| * | Show correct error when logging out and access token is missingAaron Raimist2019-05-241-4/+4
* | | Implement the SHHS complexity API (#5216)Amber Brown2019-05-301-3/+9
* | | Serve CAS login over r0 (#5286)Amber Brown2019-05-301-2/+2
* | | Fix error when downloading thumbnail with width/height param missing (#5258)Aaron Raimist2019-05-291-2/+2
|/ /
* | Merge pull request #5220 from matrix-org/erikj/dont_bundle_live_eventsErik Johnston2019-05-241-0/+3
|\ \
| * | Don't bundle events in /sync or /eventsErik Johnston2019-05-211-0/+3
* | | Merge pull request #5244 from matrix-org/rav/server_keys/00-factor-out-fetchersErik Johnston2019-05-231-3/+3
|\ \ \
| * | | Fix remote_key_resourceRichard van der Hoff2019-05-231-3/+3
| |/ /
* / / Add config option for setting homeserver's default room version (#5223)Andrew Morgan2019-05-231-2/+3
|/ /
* | Merge pull request #5209 from matrix-org/erikj/reactions_baseErik Johnston2019-05-202-0/+340
|\ \
| * | Move parsing of tokens out of storage layerErik Johnston2019-05-161-0/+19
| * | Check that event is visible in new APIsErik Johnston2019-05-161-2/+15
| * | Add aggregations APIErik Johnston2019-05-161-1/+140
| * | Actually implement idempotencyErik Johnston2019-05-151-1/+8
| * | Add simple pagination APIErik Johnston2019-05-151-0/+50
| * | Add simple send_relation API and track in DBErik Johnston2019-05-152-0/+112
* | | Fix image orientation when generating thumbnail (#5039)PauRE2019-05-162-0/+44
* | | Merge pull request #5174 from matrix-org/dbkr/add_dummy_flow_to_recaptcha_onlyDavid Baker2019-05-161-5/+17
|\ \ \ | |_|/ |/| |
| * | Merge remote-tracking branch 'origin/develop' into dbkr/add_dummy_flow_to_rec...David Baker2019-05-131-0/+10
| |\ \
| * | | Re-order flows so that email auth is done lastDavid Baker2019-05-101-4/+12
| * | | CommentDavid Baker2019-05-101-0/+4
| * | | Add a DUMMY stage to captcha-only registration flowDavid Baker2019-05-101-1/+1
* | | | Merge pull request #5187 from matrix-org/dbkr/only_check_threepid_not_in_use_...David Baker2019-05-161-18/+22
|\ \ \ \
| * | | | Only check 3pids not in use when registeringDavid Baker2019-05-141-18/+22
* | | | | Make all the rate limiting options more consistent (#5181)Amber Brown2019-05-151-10/+13
* | | | | Drop support for v2_alpha API prefix (#5190)Richard van der Hoff2019-05-156-24/+19
| |_|_|/ |/| | |
* | | | NewsfileErik Johnston2019-05-141-6/+6
* | | | Allow client event serialization to be asyncErik Johnston2019-05-144-43/+48
|/ / /
* | / Migrate all tests to use the dict-based config format instead of hanging item...Amber Brown2019-05-131-0/+1
| |/ |/|
* | URL preview blacklisting fixes (#5155)Andrew Morgan2019-05-101-0/+10
|/
* Revert 085ae346ace418e0fc043ac5f568f85ebf80038eDavid Baker2019-05-101-1/+1
* Add a DUMMY stage to captcha-only registration flowDavid Baker2019-05-101-1/+1
* add options to require an access_token to GET /profile and /publicRooms on CS...Matthew Hodgson2019-05-082-12/+34
* Remove the requirement to authenticate for /admin/server_version. (#5122)Richard van der Hoff2019-05-071-10/+5
* Add admin api for sending server_notices (#5121)Richard van der Hoff2019-05-023-3/+118
* Factor out an "assert_requester_is_admin" function (#5120)Richard van der Hoff2019-05-022-75/+79
* fix examplesRichard van der Hoff2019-05-011-4/+4
* Move admin api impl to its own packageRichard van der Hoff2019-05-012-4/+3
* Move admin API to a new prefixRichard van der Hoff2019-05-012-22/+60
* Move admin API away from ClientV1RestServletRichard van der Hoff2019-05-011-33/+33
* Remove log error for .well-known/matrix/client (#4972)Michael Kaye2019-04-241-1/+1
* Prevent "producer not unregistered" message (#5009)Amber Brown2019-04-241-0/+4
* Merge branch 'develop' of github.com:matrix-org/synapse into babolivier/accou...Erik Johnston2019-04-179-89/+70
|\
| * Merge pull request #5047 from matrix-org/babolivier/account_expirationBrendan Abolivier2019-04-172-0/+64
| |\
| * \ Merge pull request #5071 from matrix-org/babolivier/3pid-checkBrendan Abolivier2019-04-171-0/+18
| |\ \
| | * | Make sure we're not registering the same 3pid twiceBrendan Abolivier2019-04-171-0/+18
| * | | Merge pull request #5070 from matrix-org/erikj/postpathErik Johnston2019-04-171-8/+8
| |\ \ \
| | * | | Remove usage of request.postpathErik Johnston2019-04-161-8/+8
| * | | | Merge pull request #5063 from matrix-org/erikj/move_endpointsErik Johnston2019-04-151-0/+7
| |\| | |
| | * | | Only handle GET requests for /push_rulesErik Johnston2019-04-151-0/+7
| * | | | Remove periods from copyright headers (#5046)Andrew Morgan2019-04-112-2/+2
| |/ / /
| * | | Add admin API for group deletionErik Johnston2019-04-031-0/+26
| * | | Fix grammar and document get_current_users_in_room (#4998)Andrew Morgan2019-04-031-1/+1
| * | | Remove presence lists (#4989)Neil Johnson2019-04-031-67/+0
| * | | Merge pull request #4982 from matrix-org/erikj/msc1915Erik Johnston2019-04-031-2/+3
| |\ \ \
| | * | | Add unbind API to /r0 as it is now stabalisedErik Johnston2019-04-011-1/+1
| | * | | Allowing specifying IS to use in unbind API.Erik Johnston2019-04-011-1/+2
| * | | | Collect room-version variations into one place (#4969)Richard van der Hoff2019-04-012-7/+5
| |/ / /
| * / / remove log line for password (#4965)Neil Johnson2019-03-281-2/+0
| |/ /
* | / Add management endpoints for account validityBrendan Abolivier2019-04-172-1/+69
| |/ |/|
* | Send out emails with links to extend an account's validity periodBrendan Abolivier2019-04-172-0/+64
|/
* Support 3PID login in password providers (#4931)Andrew Morgan2019-03-261-4/+45
* Merge pull request #4904 from matrix-org/erikj/fix_shutdownErik Johnston2019-03-211-20/+35
|\
| * Use flagsErik Johnston2019-03-201-2/+4
| * Gracefully handle failing to kick userErik Johnston2019-03-201-19/+27
| * Log new room IDErik Johnston2019-03-201-1/+6
* | Add option to disable searching in the user dirErik Johnston2019-03-191-0/+6
|/
* Add ratelimiting on login (#4821)Brendan Abolivier2019-03-152-2/+12
* fix incorrect encoding of filenames with spaces in (#2090)Matthew Hodgson2019-03-111-3/+51
* Send message after room has been shutdownErik Johnston2019-03-061-11/+11
* Make registration ratelimiter separate from the main events oneBrendan Abolivier2019-03-061-1/+1
* Revert "Split ratelimiters in two (one for events, one for registration)"Brendan Abolivier2019-03-061-1/+1
* Split ratelimiters in two (one for events, one for registration)Brendan Abolivier2019-03-051-1/+1
* Merge pull request #4772 from jbweston/jbweston/server-version-apiErik Johnston2019-03-051-0/+23
|\
| * Add 'server_version' endpoint to admin APIJoseph Weston2019-03-011-0/+23
* | Add rate-limiting on registration (#4735)Brendan Abolivier2019-03-051-4/+29
|/
* Fix parsing of Content-Disposition headers (#4763)Richard van der Hoff2019-02-271-20/+65
* Don't log stack trace when client has gone away during media download (#4738)Erik Johnston2019-02-251-2/+9
* switch from google.com to recaptcha.net for reCAPTCHA (#4731)Matthew Hodgson2019-02-251-1/+1
* Fix registration on workers (#4682)Erik Johnston2019-02-204-138/+15
* Merge pull request #4666 from matrix-org/erikj/register_login_splitErik Johnston2019-02-182-69/+28
|\
| * Move register_device into handlerErik Johnston2019-02-182-84/+24
| * Update docsErik Johnston2019-02-181-1/+1
| * Split out registration to workerErik Johnston2019-02-181-27/+46
* | FixupErik Johnston2019-02-181-0/+1
* | fix missig importMatthew Hodgson2019-02-181-0/+1
* | tabsMatthew Hodgson2019-02-141-1/+1
* | set CORS on .well-known URI to unbreak modularMatthew Hodgson2019-02-141-0/+1
|/
* Merge pull request #4580 from matrix-org/uhoreg/e2e_backup_add_updatingErik Johnston2019-02-111-0/+34
|\
| * make sure version is in body and wrap in linearizer queueHubert Chathi2019-02-081-1/+2
| * add new endpoint to update backup versionsHubert Chathi2019-02-061-0/+33
* | Allow "unavailable" presence status for /sync (#4592)Valentin Anger2019-02-082-1/+2
|/
* Merge branch 'neilj/room_capabilities' of github.com:matrix-org/synapse into ...Neil Johnson2019-01-302-14/+5
|\
| * Merge branch 'develop' into neilj/room_capabilitiesNeil Johnson2019-01-302-14/+5
| |\
| | * Check consent dir path on startupAndrew Morgan2019-01-291-10/+1
| | * Merge branch 'develop' of github.com:matrix-org/synapse into anoa/dm_room_upg...Andrew Morgan2019-01-251-13/+10
| | |\
| | * | Fix typosAndrew Morgan2019-01-221-4/+4
* | | | isortNeil Johnson2019-01-301-2/+1
|/ / /
* | | formatting and use constants where availableNeil Johnson2019-01-301-19/+17
* | | Populate default room version from ConstantsNeil Johnson2019-01-301-1/+2
* | | reflect that rooms v3 is a stable room versionNeil Johnson2019-01-301-0/+1
* | | rework format of change password capabilityNeil Johnson2019-01-291-1/+3
* | | support change_password in capabilities end-pointNeil Johnson2019-01-291-2/+12
* | | enforce auth for capabilities endpointNeil Johnson2019-01-291-10/+17
* | | register capabilities servletNeil Johnson2019-01-291-0/+2
* | | backout v3Neil Johnson2019-01-251-1/+0
* | | Support room version capabilities in CS API (MSC1804)Neil Johnson2019-01-251-0/+49
| |/ |/|
* | move guard out of is_threepid_reserved and into register.pyNeil Johnson2019-01-221-4/+5
* | Fix None guard in config.server.is_threepid_reservedNeil Johnson2019-01-221-1/+3
* | Config option to disable requesting MSISDN on registrationNeil Johnson2019-01-211-11/+5
|/
* Refactor request sending to have better excpetions (#4358)Erik Johnston2019-01-081-3/+4
* Add GET account data routes (#4303)Travis Ralston2019-01-071-1/+33
* Remove v1 only REST APIs now we don't ship matrix console (#4334)Amber Brown2018-12-294-445/+0
* Return well_known in /login response (#4319)Richard van der Hoff2018-12-241-7/+11
* Fix IP URL previews on Python 3 (#4215)Amber Brown2018-12-221-2/+12
* create support user (#4141)Neil Johnson2018-12-141-1/+10
* Add 'sandbox' to CSP for media repo (#4284)David Baker2018-12-111-1/+2
* Move imports to one lineWill Hunt2018-12-101-4/+1
* Use `send_cors`Will Hunt2018-12-101-4/+1
* changelog & isortWill Hunt2018-12-091-1/+5
* Make /config more CORS-yWill Hunt2018-12-091-1/+3
* Initialise user displayname from SAML2 data (#4272)Richard van der Hoff2018-12-072-0/+8
* Implement SAML2 authentication (#4267)Richard van der Hoff2018-12-073-0/+136
* Factor SSO success handling out of CAS login (#4264)Richard van der Hoff2018-12-071-29/+76
* Rip out half-implemented m.login.saml2 support (#4265)Richard van der Hoff2018-12-061-67/+2
* Implement .well-known handling (#4262)Richard van der Hoff2018-12-051-0/+70
* Fix non-ASCII pushrules (#4248)Amber Brown2018-12-041-12/+23
* fix type errorAmber Brown2018-12-031-1/+1
* Neilj/fix autojoin (#4223)Neil Johnson2018-11-282-0/+3
* Support m.login.sso (#4220)Richard van der Hoff2018-11-271-4/+9
* Fix fallback auth on Python 3 (#4197)Amber Brown2018-11-191-22/+16
* Remove duplicate slashes in generated consent URLsTravis Ralston2018-11-151-2/+2
* Fix Content-Disposition in media repository (#4176)Amber Brown2018-11-153-90/+110
* Use <meta> tags to discover the per-page encoding of html previews (#4183)Amber Brown2018-11-151-9/+22
* Add a test for the public T&Cs formRichard van der Hoff2018-11-141-1/+1
* Fix an internal server error when viewing the public privacy policyRichard van der Hoff2018-11-141-4/+7
* Fix encoding error for consent form on python3hera2018-11-081-1/+3
* Fix URL preview bugs (type error when loading cache from db, content-type inc...Amber Brown2018-11-081-6/+16
* Add config variables for enabling terms auth and the policy name (#4142)Travis Ralston2018-11-062-2/+2
* handle empty backups according to latest spec proposal (#4123)Hubert Chathi2018-11-051-3/+18
* Tests for user consent resource (#4140)Amber Brown2018-11-061-1/+1
* Fix logic error that prevented guests from seeing the privacy policyTravis Ralston2018-11-011-1/+1
* Include a version query string arg for the consent routeTravis Ralston2018-10-311-2/+4
* Merge branch 'develop' into travis/login-termsTravis Ralston2018-10-317-177/+93
|\
| * Remove deprecated v1 key exchange endpoint (#4119)Amber Brown2018-10-312-106/+0
| * Delete the disused & unspecced identicon functionality (#4106)Amber Brown2018-10-292-70/+0
| * Address review commentsRichard van der Hoff2018-10-261-5/+16
| * Basic initial support for room upgradesRichard van der Hoff2018-10-252-0/+80
| * Refactor state group lookup to reduce DB hits (#4011)Erik Johnston2018-10-251-1/+2
* | Merge branch 'develop' into travis/login-termsTravis Ralston2018-10-246-49/+30
|\|
| * Fix a number of flake8 errorsRichard van der Hoff2018-10-242-2/+2
| * Merge pull request #4063 from matrix-org/erikj/cleaup_alias_creationErik Johnston2018-10-241-32/+5
| |\
| | * Clean up room alias creationErik Johnston2018-10-191-32/+5
| * | Correctly account for cpu usage by background threads (#4074)Richard van der Hoff2018-10-233-15/+23
| |/
* | Merge branch 'develop' into travis/login-termsTravis Ralston2018-10-181-2/+5
|\|
| * Fix bug where we raised StopIteration in a generatorErik Johnston2018-10-171-2/+5
* | pep8Travis Ralston2018-10-152-13/+2
* | Merge branch 'develop' into travis/login-termsTravis Ralston2018-10-152-0/+374
|\|
| * missed oneDavid Baker2018-10-121-0/+1
| * Don't mangle exceptionsDavid Baker2018-10-121-4/+2
| * Split /room_keys/version into 2 servletsDavid Baker2018-10-121-9/+21
| * PR feedback pt. 1David Baker2018-10-121-1/+1
| * isortDavid Baker2018-10-091-1/+1
| * Merge remote-tracking branch 'origin/develop' into dbkr/e2e_backupsDavid Baker2018-10-0921-123/+197
| |\
| * | WIP e2e key backupsDavid Baker2018-09-131-4/+10
| * | try to make flake8 and isort happyHubert Chathi2018-09-061-1/+4
| * | Merge branch 'develop' into e2e_backupsHubert Chathi2018-08-2413-79/+143
| |\ \
| * | | missing importMatthew Hodgson2018-08-121-1/+1
| * | | use parse_stringMatthew Hodgson2018-08-121-3/+3
| * | | support DELETE /version with no argsMatthew Hodgson2018-08-121-2/+3
| * | | implement remaining tests and make them workMatthew Hodgson2018-08-121-0/+6
| * | | improve docstringMatthew Hodgson2018-08-121-1/+5
| * | | add a tonne of docstring; make upload_room_keys properly assert versionMatthew Hodgson2018-08-121-1/+10
| * | | more docstring for the e2e_room_keys restMatthew Hodgson2018-08-121-0/+51
| * | | blindly incorporate PR review - needs testing & fixingMatthew Hodgson2018-08-121-0/+2
| * | | make /room_keys/version workMatthew Hodgson2018-08-121-1/+8
| * | | implement /room_keys/version too (untested)Matthew Hodgson2018-08-121-0/+47
| * | | document the APIMatthew Hodgson2018-08-121-0/+133
| * | | make it work and fix pep8Matthew Hodgson2018-08-122-13/+22
| * | | interim WIP checkin; doesn't build yetMatthew Hodgson2018-08-121-4/+33
| * | | total WIP skeleton for /room_keys APIMatthew Hodgson2018-08-121-0/+56
* | | | Rely on the lack of ?u to represent public accessTravis Ralston2018-10-122-10/+6
* | | | Use a flag rather than a new route for the public policyTravis Ralston2018-10-032-16/+24
* | | | Auto-consent to the privacy policy if the user registered with termsTravis Ralston2018-10-031-0/+6
* | | | Make the terms flow requriedTravis Ralston2018-10-031-4/+4
* | | | Flesh out the fallback auth for termsTravis Ralston2018-10-031-7/+67
* | | | Incorporate Dave's work for GDPR login flowsTravis Ralston2018-10-032-0/+35
| |_|/ |/| |
* | | Merge pull request #3932 from matrix-org/erikj/auto_start_expiring_cachesRichard van der Hoff2018-09-251-1/+0
|\ \ \
| * | | Fix some instances of ExpiringCache not expiring cache itemsErik Johnston2018-09-211-1/+0
* | | | added "media-src: 'self'" to CSP for resources (#3578)Jérémy Farnaud2018-09-251-0/+1
|/ / /
* | | Merge pull request #3835 from krombel/fix_3821Amber Brown2018-09-121-1/+5
|\ \ \
| * | | fix VOIP crashes under Python 3 (#3821)Krombel2018-09-101-1/+5
* | | | Port rest/ to Python 3 (#3823)Amber Brown2018-09-1217-100/+112
|/ / /
* | | Merge pull request #3790 from matrix-org/rav/respect_event_format_in_filterRichard van der Hoff2018-09-051-13/+38
|\ \ \