1 phpMyAdmin - ChangeLog
4 3.4.3.0 (not yet released)
5 - bug #3311170 [sync] Missing helper icons in Synchronize
6 - patch #3304473 [setup] Redefine a lable that was wrong
7 - bug #3304544 [parser] master is not a reserved word
8 - bug #3307616 [edit] Inline edit updates multiple duplicate rows
9 - patch #3311539 [edit] Inline edit does not escape backslashes
12 - bug #3301249 [interface] Iconic table operations does not remove inline edit label
13 - bug #3303869 [interface] Unnecessary scrolling on Databases page
14 - patch #3303813 [setup] Define a label that was missing
15 - bug #3305606 [interface] Show all button wraps on privileges page
16 - bug #3305517 [config] Config for export compression not used
17 - bug #3305883 [interface] Table is dropped regardless of confirmation
18 - [auth] Fixed error handling for signon auth method.
19 - bug #3276001 [core] Avoid caching of index.php.
20 - bug #3306958 [interface] Unnecessary Details slider
21 - bug #3308476 [interface] "Show all" not persistent after a sort
22 - bug #3308072 [auth] Version disclosure to anonymous visitors
23 - bug #3306981 [interface] pmahomme and table statistics
26 - bug #3301108 [interface] Synchronize and already configured host
27 - bug #3302457 Inline edit and $cfg['PropertiesIconic']
28 - Patch #3302313 Show a translated label
29 - bug #3300981 [navi] Table filter is case sensitive
30 - bug #3285929 [privileges] Revert temporary fix
31 - bug #3302872 [synchronize] Synchronize and user name
32 - bug #3302733 [core] Some browsers report an insecure https connection
33 - [security] Make redirector require valid token
36 + rfe #2890226 [view] Enable VIEW rename
37 + rfe #838637 [privileges] Export a user's privileges
38 - [core] Updated mootools to fix some glitches with Safari.
39 + rfe #2816943 [interface] Add REGEXP ^...$ to select dialog.
40 + rfe #2924956 [interface] Add insert ignore option to editing row.
41 + rfe #2838080 [interface] Show warning when javascript is disabled.
42 + rfe #2823707 [edit] Call UUID function separately to show it in insert.
43 + rfe #2420684 [export] Allow export of timestamps in UTC.
44 + [core] Remove config data from session as it brings chicken-egg problem.
45 + [core] Cookie path now honors PmaAbsoluteUri.
46 + rfe #2393597 [core] phpMyAdmin honors https in PmaAbsoluteUri.
47 + rfe #1778337 [core] Try moving tables by RENAME and fail to CREATE/INSERT if that fails.
48 + rfe #1721189 [core] Force reload js on code change.
49 + rfe #1954161 [interface] Do not display long numbers in server status.
50 + rfe #2033616 [edit] Add option to just display insert query.
51 + rfe #1435032 [interface] Move SSL status to the end, it is usually empty.
52 + rfe #1340812 [interface] Show numbers of columns in table structure.
53 + rfe #1186511 [inrerface] Add link to reload navigation frame.
54 + rfe #2936156 [auth] Signon authentication forwards error message through session data.
55 + rfe #2835109 [interface] Move ^1 to the end of message.
56 + rfe #854911 [interface] Grey out non applicable actions in structure
57 + [interface] Allow to create new table from navigation frame (in light mode).
58 + rfe #1025696 [browse] Add direct download of binary fields.
59 - [browse] Properly display NULL value for BLOB.
60 - rfe #1516803 [edit] Allow to set BLOB to/from NULL with ProtectBinary.
61 - [edit] Do not default to UNHEX when using file upload.
62 - rfe #1379201 [core] Add option to configure session_save_path.
63 + [interface] Provide links to documentation in highlighted SQL.
64 + [interface] It is now possible to bookmark most pages in JS capable browser.
65 - bug #2936482 [core] Fix SSL detection.
66 + rfe #2937850 [doc] Add some hints to chk_rel.php for quick setup.
67 + rfe #2938579 [interface] Add class to some elements for easier theming.
68 + rfe #2937840 [doc] Add some interesting configs to config.sample.inc.php.
69 + rfe #2792992 [doc] Added advice to re-login after changing pmadb settings
70 + patch #2952353 [interface] Prefill "Copy table to" in tbl_operations.php, thanks to iinl
71 + [lang] Add English (United Kingdom) translation, thanks to Robert Readman.
72 + patch #2948421 [auth] HTTP Basic auth realm name,
73 thanks to Harald Jenny - haraldj
74 - bug #2954916 [interface] Do not insert doc links to not formatted SQL.
75 + [lang] Chinese Simplified update, thanks to Shanyan Baishui - rimyxp
76 + [lang] Turkish update, thanks to Burak Yavuz
77 + rfe #2963310 [interface] Focus TEXTAREA "sql_query" on click on "SQL" link
78 + [lang] Uzbek update, thanks to Orzu Samarqandiy
79 + rfe #2958013 [import] After import, also list uploaded filename, thanks
80 to Pavel Konnikov and Herman van Rink
81 + patch #2974341 [structure] Clicking on table name in db Structure should
82 Browse the table if possible, thanks to bhdouglass - dougboybhd
83 + patch #2975533 [search] New search operators, thanks to
85 + patch #2967320 [designer] Colored relations based on the primary key,
86 thanks to GreenRover - greenrover
87 - [core] Provide way for vendors to easily change paths to config files.
88 + patch #2979922, rfe #2804874 [interface] Add inline query editing, thanks to Muhammd Adnan.
89 - bug #2966752 [setup] Allow to configure changes tracking in setup script.
90 + patch #2981165 [edit] Optionally disable the Type column,
91 thanks to Brian Douglass - bhdouglass
92 + patch #2984058 [edit] Buttons for quicky creating common SQL queries, thanks
94 + patch #2984337 [interface] Convert loading of export/import to jQuery ready
95 event, thanks to sutharshan.
96 - [edit] CURRENT_TIMESTAMP is also valid for datetime fields.
97 - patch #2985068 [engines] Fix parsing of PBXT status, thanks to Madhura Jayaratne.
98 - patch #2986073 [interface] Convert upload progress bar to jQuery, thanks to
100 - patch #2983960 [interface] Add javascript validation of datetime input,
101 thanks to Sutharshan Balachandren.
102 - rfe #2981999 [interface] Default sort order is now SMART.
103 - rfe #2972969 [interface] Fix flipping of headers in non-IE browsers.
104 + rfe #2964518 [interface] Allow to choose servers from configuration for
106 + rfe #2988633 [relation] Improve ON DELETE/ON UPDATE drop-downs
107 + rfe #2988629 [relation] Improve labels in relation view
108 + rfe #2983207, patch #2988715 [interface] Use jQuery calendar dialog, thanks
110 + [doc] Incorporate synchronisation docs into main document.
111 + [core] Include Content Security Policy HTTP headers.
112 - bug #3004216 [CSS] Field attributes use inline CSS
113 - patch #2999595, rfe #2998130 [interface] Cleanup navigation frame.
114 - patch #3025161 [core] Prevent sending of unnecessary cookies,
115 thanks to Piotr Przybylski - crackpl
116 - bug [password] Generate password only available if JS is enabled
117 (fixed for Privileges and Change password)
118 - [core] RecodingEngine now accepts none as valid option.
119 + [core] Dropped AllowAnywhereRecoding configuration variable.
120 - rfe #3016457 [interface] Define tab order in SQL form to allow easier tab
122 + [core] Centralized format string expansion, @VARIABLES@ are recommended way
123 now, used by file name templates, default queries, export and title
125 + [validator] SQL validator works also with SOAP PHP extension.
126 - [interface] Better formatting for SQL validator results.
127 - [doc] The linked-tables infrastructure is now called phpMyAdmin
128 configuration storage.
129 - [interface] Move drop/empty links from being tabs to Operations tab.
130 - [interface] Fixed rendering of error/notice/info titles background.
131 - patch #3038293 [doc] Language and grammar fixes,
132 thanks to Isaac Bennetch - ibennetch
133 - patch #3038312 [export] JSON export,
134 thanks to Hauke Henningsen - blubberkeks152
135 - rfe #1494550 [interface] Editor for SET/ENUM fields.
136 - rfe #2649375 [interface] Simplified interface to backup/restore.
137 - rfe #2973909 Users preferences
138 - [relations] Dropped WYSIWYG-PDF configuration variable.
139 - rfe #806035, #686260 [relations] Export relations to Dia, SVG and others
140 + [interface] Added charts to status tab, profiling page and query results
141 + [interface] AJAXification on various pages
142 - [core] Remove last remaining parts of profiling code which was removed in 2006.
143 - bug #3042665 [parser] Add workaround for MySQL way of handling backtick.
144 - bug #3056610 [interface] Removed modification options for information_schema
145 + patch #3055886 [config] Add Left frame table filter visibility config option, thanks to eesau
146 - [core] Force generating of new session on login
147 + rfe #1105678 [interface] Drop page-break-before as it is useless for smaller
149 + rfe #2956556 [interface] Allow to wrap enum values.
150 - bug #1669459 [interface] Do not automatically mark PDF schema rows to delete
151 - bug #3087682 [interface] Do not apply LeftFrameDBSeparator on first character.
152 + rfe #3111455 [interface] Column highlighting and marking in table view
153 + Visual query builder
154 - bug #3115519 [interface] Prevent long queries from being shown in confirmation popup
155 - patch #3112792 [navi] Left panel table grouping incorrect,
156 thanks to garas - garas
157 - bug #3123433 [interface] Avoid double escaping of MySQL errors.
158 - [interface] Use less noisy message and remove disable link on server charts and database statistics.
159 + rfe #3141330 [relation] When displaying results, show a link to the foreign
160 table even when phpMyAdmin configuration storage is not active
161 - bug #3141327 [relation] Foreign key input options
162 - [export] Better handling of export to PHP array.
163 - rfe #3158867 [privileges] No DROP DATABASE warning if you delete a user
164 - [interface] Add link to documentation for status variables.
165 - [security] Redirect external links to avoid Referer leakage.
166 - [interface] Default to not count tables in database.
167 - patch #3172172 [interface] Shortcut for copying table row.
168 - bug #3175227 [auth] Reset user cache on login.
169 - rfe #3148361 [interface] Replace hard coded limit with $cfg['LimitChars'].
170 - bug #3177136 [interface] Indicate that bookmark is being used on browse.
171 - [interface] Indicate shared bookmarks in interface.
172 - patch #3176420 [Search] Ajaxify browse and delete criteria in DB Search,
173 thanks to Thilanka Kaushalya
174 - [interface] New default theme pmahomme, dropped darkblue_orange theme.
175 - rfe #2936155 [auth] Allow to pass additional parameters using signon method.
176 - rfe #1640812 [auth] Add example for OpenID authentication using signon method.
177 - rfe #1312657 [dbi] Default to mysqli extension.
178 - rfe #1168350 [interface] Add clear button to SQL edit box.
179 - [core] Update library PHPExcel to version 1.7.6
180 - bug #3206876 [core] Work without mbstring installed.
181 - rfe #3196075, patch #3212068 [interface] Add links to variables documentation.
182 - bug #3208723 [import] Fix import of utf-8 XML files.
183 - bug #3039384 [auth] Force signon auth on signon URL change.
184 - bug #3168733 [core] Synchronization does not honor AllowArbitraryServer
185 - bug #3134495 [synchronization] Data containing single quotes prevents sync,
187 - Remove the custom color picker feature
188 - bug #3285929 [privileges] Don't fail silently on missing priviledge to execute REVOKE ALL PRIVILEGES
190 3.3.11.0 (not yet released)
192 3.3.10.1 (2011-05-20)
193 - [security] XSS on Tracking page
195 3.3.10.0 (2011-03-19)
196 - patch #3147400 [structure] Aria table size printed as unknown,
197 thanks to erickoh75 - erickoh75
198 - patch #3150164 [structure] Ordering by size gives incorrect results,
199 thanks to Madhura Jayaratne - madhuracj
200 - bug #3153409 [core] 0 row(s) affected
201 - bug #3155842 [core] Edit relational page and page number
202 - [security] Minor security fixes, see PMASA-2010-9 and PMASA-2010-10
203 - [lang] German update, thanks to to jannicars@users.sourceforge.net.
206 - [security] SQL injection, see PMASA-2011-2
209 - [security] Path disclosure, see PMASA-2011-1
212 - bug [doc] Fix references to MySQL doc
213 - patch #3101490 Default function for TIMESTAMP, thanks to jirand - jirand
214 - bug #3103853 [js] Double quotes were not escaped in generated js
215 - bug #3077463 [core] Events were not copied when copying/renaming database
216 - bug #1762306 [core] Copy database with view of a view
217 - patch #3117535 [replication] Add quotes to database in initial statement,
218 thanks to Craig Duncan - duncan3dc
219 - bug #3112614 [pdf schema] Scratchboard for PDF pages not working
220 - bug #3125606 [parser] Query for table "level" causes strange display
221 - bug #3127904 [parser] Close all opened round brackets indents
224 - bug #3115519 (private) [security] XSS on db search, see PMASA-2010-8
227 - bug #3059311 [import] BIGINT field type added to table analysis
228 - [core] Update library PHPExcel to version 1.7.4
229 - bug #3062455 [core] copy procedures and routines before tables
230 - bug #3062455 [export] with SQL, export procedures and routines before tables
231 - bug #3056023 [import] USE query not working
232 - bug #3038193 [display] Error when editing row with GEOMETRY column
233 - bug #3062454 [interface] Display routines/events also when no tables are defined
234 - support ARIA storage engine as well as its previous name MARIA
237 - patch #3050492 [PDF scratchboard] Cannot drag table box to the edge after
238 a page size increase, thanks to Martin Schönberger - mad05
241 - bug #3033063 [core] Navi gets wrong db name
242 - bug #3031705 [core] Fix generating condition for real numbers by comparing
244 - bug #3034026 [confirmation] TRUNCATE queries get no confirmation request
245 - bug #3036132 [core] Triggers not fetched if dbname has an hyphen
246 - patch #3039269 [dbi] Wrong variable checked for nopassword option,
247 thanks to Will Palmer - wpalmer
248 - bug #3040226 [XHTML] LockFromUpdate checkbox not checked by default
249 - bug [doc] Withdraw or edit FAQ entries related to older MySQL or PHP
250 - bug #3042706 [pmadb] Relations, bookmarks, etc deleted after table drop
251 - bug #3044189 [doc] Cleared documentation for hide_db.
252 - bug #3042495 [core] Move PMA_sendHeaderLocation to core.lib.php.
255 - [core] Fixed various XSS issues, see PMASA-2010-5 for more details.
258 - patch #2932113 [information_schema] Slow export when having lots of
259 databases, thanks to Stéphane Pontier - shadow_walker
260 - bug #3022705 [import] Import button does not work in Catalan when there
261 is no progress bar possible
262 - bug [replication] Do not offer information_schema in the list of databases
263 - bug [js] Avoid loading twice a js file
264 - bug #3024344 [setup] Setup forces numeric MemoryLimit
265 - bug #3025975 [auth] Odd LoginCookieValidity default value
266 - bug #3026400 [PHP] ereg functions are deprecated
267 - bug #3027557 [PHP] split() deprecated in PHP 5.3 (backport fixes from master)
268 - bug #3023507 [core] No result set display from stored procedure SELECT
269 - bug [export] CSV for MS Excel (Windows) should have semi-colon as separator
270 - [core] Update library PHPExcel to version 1.7.3c
271 - bug #2994885, bug #3029168 [import] Convert Excel column name correctly
272 - bug [scripts] MySQL 5.5.5 does not accept TIMESTAMP(14) in create_tables.sql
275 - bug #2996161 [import] properly escape import value
276 - bug #2998889 [import] Import button does not work in Catalan
277 - [browse] Fix handling of sort order if only column is specified.
278 + [lang] Greek update, thanks to Panagiotis Papazoglou - panos78
279 + [lang] Updated lot of translation based on work done in master branch.
280 - bug #3008411 [databases] Last dropped database remains active in navi
281 - bug #2986383 [parser] Not all data being shown / counted
282 - bug [synchronize] Rows were deleted in target table regardless of the
283 "Would you like to delete..." option
284 - bug [privileges] List of tables not shown when the db name has a wildcard
285 - bug #3011126 [display] Edit link missing after long query
286 - patch #3013264 [doc] FAQ 1.40 uses a comma instead of a period,
287 thanks to Isaac Bennetch - ibennetch
288 - [engines] Fix getting InnoDB status.
289 - bug #2986422 [import] Results for query are not displayed
292 - patch #2982480 [navi] Do not group if there would be one table in group,
293 thanks to Lorikeet Lee.
294 - patch #2983492 [sync] When asking to synchronize Structure and Data,
295 only Structure is done, thanks to Ankit Gupta - ankitgupta3
296 - patch #2984893 [engines] InnoDB storage page emits a warning,
297 thanks to Madhura Jayaratne - madhuracj
298 - bug #2974687, bug #2974692 [compatibility] PHPExcel : IBM AIX iconv() does not work,
299 thanks to Björn Wiberg - bwiberg
300 - bug #2983066 [interface] Flush table on table operations shows the query twice,
301 thanks to Martynas Mickevičius - BlinK_
302 - bug #2983060, patch #2987900 [interface] Fix initial state of tables in
303 designer, thanks to Sutharshan Balachandren.
304 - bug #2983062, patch #2989408 [engines] Fix warnings when changing table
305 engine to Maria, thanks to Madhura Jayaratne.
306 - bug #2974067 [display] non-binary fields shown as hex
307 - bug #2983065 [operations] Error when changing from Maria to MyISAM engine
308 - bug #2975408 [tracking] Data too long for column data_sql
309 - bug [tracking] Tracking report should obey MaxCharactersInDisplayedSQL
310 - bug [edit] Avoid selecting UNHEX function by default for a BLOB column for
311 which editing is protected
312 - bug #2994168 [structure] Show auto_increment in uppercase
313 - bug #2993970 [pdf schema] Page numbering in Table of Contents
316 - patch #2969449 [core] Name for MERGE engine varies depending on the
317 MySQL version, thanks to Dieter Adriaenssens - ruleant
318 - bug #2966078 [browse] Incorrect LIMIT is saved and sticks while browsing
319 - bug #2967366 [Structure] Some results of Propose table structure are
321 - bug #2967565 [insert] UNHEX not selected by default when inserting BINARY
322 - [navi] Changed link to git repository on main page
323 - bug #2972232 [menu] Import menu tab not present on main page
324 - patch #2976790 [menu] Go to the upper level after table DROP,
325 thanks to Kaarel Nummert - kaarelnu
326 - patch #2978815 [pdf] Fix generating PDF with table dimensions, thanks to BlinK_
327 - patch #2977725 [export] XML wrongly encoded, thanks to Victor Volkov - hanut
328 - patch #2979234 [import] Create tables with current charset and collation.
329 - patch #2979234, bug #2960105 [import] Properly import unicode text from ODS.
330 - bug #2973280 [export] Proper handling of temporary directory in XLS export.
331 - bug #2980582 [interface] Properly format server status parameter.
332 - bug #2973949 [session] SQL History broken (revert patch #2899969),
333 thanks to Dieter Adriaenssens - ruleant
334 - [doc] Be more specific about problems with Suhosin.
337 - bug #2941037 [core] Database structure not sorted by table correctly
338 - bug #2948492 [interface] Slide effect masks some fields on search page
339 - bug #2959746 [interface] Unknown table status: TABLE_TYPE
340 - bug #2953050 [export] export VIEW as SQL includes INSERT statement
341 - bug #2942032 [core] Cannot detect PmaAbsoluteUri correctly on Windows
342 - bug #2961609 [auth] Potential information disclosure at login page
343 - patch #2961540 [export] Do not export data of MERGE table,
344 thanks to Dieter Adriaenssens - ruleant
345 - bug #2961198 [parser] Querying a table named "data"
346 - bug #2931429 [structure] Editing long triggers
347 - bug #2970769 [structure] Incorrect reference to mootools-more.js
350 + rfe #2308632 [edit] Use hex for (var)binary fields,
351 thanks to Maarten Dieleman - maartendieleman
352 + patch #2794819 [navi] Filter for displayed table names,
353 thanks to Michael Valushko - dylfin
354 - bug #2794840 [core] Cannot redeclare pma_tableheader()
355 - rfe #2726479 [core] configurable maximal length of URL
356 + patch #2724755 [display] Full/partial text links (big T) are back,
357 thanks to nullbarriere - nullbarriere
358 - bug [display] handle NavigationBarIconic as documented for navi buttons
359 + rfe #2726479 [export] Export tables preselect
360 + patch #2805828 [export] PHP array export plugin,
361 thanks to Geoffray Warnants - amnsk
362 + patch #2798592 [import] Progress bar,
363 thanks to Tomas Srnka - tomassrnka
364 - bug [gui] Generate Password not working for 'Change Login Information', only for 'Change password'
365 + [lang] Arabic update, thanks to Meno25 - meno25
366 + rfe #2822190 [structure] BOOLEAN is standard SQL
367 + [lang] German update, thanks to knittl
368 + [lang] German update, thanks to virsacer
369 + rfe #2813867 [structure] Default sorting order in list of tables
370 + [import] Added MySQL type-detection functionality to import library,
371 thanks to Derek Schaefer
372 + [import] Added ODS, Excel XLS, Excel XLSX, and XML import modules,
373 thanks to Derek Schaefer
374 + [export] Added Excel XLSX export module,
375 thanks to Derek Schaefer
376 + [core] Added ability for tracking changes made through phpMyAdmin
377 + rfe #2839504 [engines] Support InnoDB plugin's new row formats
378 + [core] Added ability for synchronizing databases among servers.
379 + [lang] #2843101 Dutch update, thanks to scavenger2008
380 + [lang] Galician update, thanks to Xosé Calvo - xosecalvo
381 + [export] Added MediaWiki export module,
382 thanks to Derek Schaefer - drummingds1
383 + [lang] Turkish update, thanks to Burak Yavuz
384 + [auth] Add custom port configuration in signon, thanks to Gary Smith
385 - [core] Removed context from the error handler
386 - bug #2883633 [export] Export of InnoDB table is incomplete
387 + rfe #2862575 [status] Order query statistics by % desc, skip rows with 0
388 + rfe #2823686 [interface] Increase default height of query window
389 + rfe #2129902 [structure] Don't hide indexes
390 + patch #2812070 [interface] Allow selecting a range of rows by holding shift, thanks to Joolee
391 + [lang] Russian update, thanks to Victor Volkov
392 + [lang] Greek update, thanks to Panagiotis Papazoglou
393 + [lang] Norwegian update, thanks to Sven-Erik Andersen
394 - bug #2929958 [import] Cannot import (French interface)
395 - [security] Use X-Frame-Options header to protect against ClickJacking.
396 + [lang] Finnish update, thanks to Jouni Kahkonen
397 + [lang] Lithuanian update, thanks to Rytis Slatkevicius - rytis_s
398 - bug #2931939 [status] Seeing "m" as unit is confusing
399 - bug #2926613 [edit] Copy database shows errors when DB has foreign key
400 + [lang] Catalan update, thanks to Xavier Navarro
402 3.2.6.0 (not released)
403 - bug #2938492 [display] information_schema sorting order
404 - bug #2941101 [import] import timeout when table already created and
406 - bug #2944069 [config] Extraneus dot from dirname() when installed in root, thanks to ayanamist
409 - patch #2903400 [bookmarks] Status of bookmark table,
410 thanks to Virsacer - virsacer
411 - bug [history] QueryHistoryDB is not respected
412 - bug #2905629 [auth] Blowfish secret is not hashed
413 - bug #2910000 [gui] ShowServerInfo should hide all server info from main page
414 - bug #2910568 [structure] Table size for ARCHIVE tables is not displayed
415 - patch #2899969 [core] Session lock blocks working from a second window,
416 thanks to Greg Roach - fisharebest
417 - patch #2915168 [import] Incorrect parsing of DELIMITER keyword,
418 thanks to Greg Roach - fisharebest
419 - patch #2918831 [export] Missing backquotes on reserved words,
420 thanks to Virsacer - virsacer
421 - [core] Fix broken cleanup of $_GET
422 - bug #2924357 [operations] Cannot rename a database that has foreign key
424 - bug #869006 [structure] Ignore number of records for MRG_MyISAM tables
425 - bug [browse] "Show BLOB contents" should display HTML code that is present
426 in a BLOB, thanks to Vincent van der Tuin
427 - [privileges] Improve escaping of hostname
429 --- Older ChangeLogs can be found on our project website ---
430 http://www.phpmyadmin.net/old-stuff/ChangeLogs/
432 # vim: et ts=4 sw=4 sts=4
433 # vim: ft=changelog fenc=utf-8
434 # vim: fde=getline(v\:lnum-1)=~'^\\s*$'&&getline(v\:lnum)=~'\\S'?'>1'\:1&&v\:lnum>4&&getline(v\:lnum)!~'^#'
435 # vim: fdn=1 fdm=expr