ONEFORALL Universalfernbedienung URC 3741 Protecto für Video-Disk-Recorder (ya)VDR
Zur Bedienung meines VDR benutze ich bis jetzt die Fernbedienung ORC 7562 von ONE FOR ALL. In einem Haushalt mit insgemsammt 12 Beinen passsierte es leider zu oft, dass die Fernbedienung zu Boden fiel und letztendlich in die ewigen Jagdgründe des Elektroschrotts sich wiederfand.
Da ich mit den Geräten von ONE FOR ALL eigentlich gut gefahren bin, habe ich mal umgesehen, ob es da nicht eine Fernbedienung gibt, die ein wenig robuster und somit geschützer für den Hardcore-Familieneinsatz ist. Die Wahl fiel dabei auf die URC 3741 Protecto. Wie auch schon bei der URC 7562 galt es bei der URC 3741 Protecto einen Code zu finden, der die anderen HiFi-Komponenten nicht stört. Der Code 200 hat sich als der bestunterstützte bei den verschiedenen Test herauskristallisiert.
(HD-)VDR auf Basis yaVDR
Bedingt durch meine diversen Projekte, dem Dokuwiki, meiner Wetterstation und der Betrieb meiner Postfix-Installationen hier, habe ich bei meiner dritten VDR-Installation entschieden, auf eine fertige VDR-Distribution zurückzugreifen. Zumal hat sich in den 10 Jahren VDR, doch auch einiges getan in Sachen Anzeige, Bedienung und Co. Nach meiner Um- und Anfrage im VDR-Portal habe ich mir die gängigsten und aktuellst gepflegtesten VDR-Projekte mal genauer angekuckt. Meine Wahl fiel dabei auf das Projekt yaVDR und das owohl ich persöhnliche eine bekannte Aversion gegen Ubuntu habe. Aber ab und an muss man dann doch über seinen Schatten springen und somit wurde der VDR mit yaVDR gebaut.
Als erstes das ISO-Image yavdr64 0.5.0a von der Installationsquelle herunterladen und eine Instalations-CD brennen.
Nach der Installation aktivieren wir als erstes unseren root-Account.
$ sudo passwd root
Als nächstes werden wir root.
$ su -
Anschließend führen wir einen Systemupdate durch.
# apt-get update && apt-get dist-upgrade
Die fehlenden Kernelmodule für die DVB-Karten DD Cine S2 V6 - Twin Tuner Karte DVB-S/S2 müssen nun noch installiert werden.
# apt-get install media-build-experimental-dkms
Nach einem Reboot des Systems, stehen dann die Karten zur Verfügung.
# reboot
# ll /dev/dvb/
insgesamt 0 drwxr-xr-x 8 root root 160 Sep 16 21:51 ./ drwxr-xr-x 18 root root 4700 Sep 16 21:51 ../ drwxr-xr-x 2 root root 120 Sep 16 21:51 adapter0/ drwxr-xr-x 2 root root 120 Sep 16 21:51 adapter1/ drwxr-xr-x 2 root root 80 Sep 16 21:51 adapter2/ drwxr-xr-x 2 root root 120 Sep 16 21:51 adapter3/ drwxr-xr-x 2 root root 120 Sep 16 21:51 adapter4/ drwxr-xr-x 2 root root 80 Sep 16 21:51 adapter5/
Programmierung und Einstellung
Da ich für den Betrieb meiner Fernbedienung einen selbstgebauten LIRC-Empfänger verwende, ist bei der Integration in yaVDR ein wenig mehr Aufwand von Nöten, als bei der Verwendung eine 0815-USB-IR-Fernbedienung.
Damit die URC 3741 Protecto optimal in den yaVDR sind nun ein paar Schritte notwendig.
- Schnittstellendefinition: Zu aller erst definieren wir im yaVDR Web Configuration Frontend bei der einstellung der Fernbedienung den COM-Port an dem der LIRC-Empfänger angeschlossen ist und um welchen Empfängertyp es sich dabei handelt. In unserem Fall ist die Schnittstelle /ev/ttyS0 (COM1) und als Empfänger Home-brew (16×50 UART compatible serial port).
- yaVDR stoppen: Nachdem wir uns mit der Konsole des yaVDR als User Root verwunden haben, stoppen wir den laufenden VDR-Daemon.
# stop vdr
vdr stop/waiting
- eventlircd stoppen: Als nächstes stoppen wir den eventlirc-Daemon, einem Filter, der die Eingaben der Fernbedienungen auswertet und an den VDR-Daemon weiter. Den Daemon stoppen wir nun auch mit:
stop eventlircd
eventlircd stop/waiting
- lirc und Fernbedienung testen: Bevor wir nun die Fernbedinung anlernen, überprüfen wir ob der Empfänger überhaupt funktioniert und die Tastendrücke der Fernbedienung erkennt. Da der verwendete LIRC-Empfänger am COM1-Port angeschlossen ist, verwenden wir die zugehörige Treiberdatei /dev/lirc0.
# mode2 -d /dev/lirc0
space 16777215 pulse 1825 space 1713 pulse 1797 space 1715 pulse 1797 space 856 pulse 915 space 839 pulse 894 space 863 pulse 901 space 1718 pulse 1771 space 1742 pulse 890
Da beim Drücken verschiedener Tasten auf der Fernbedienung entsprechende Rückmeldung auf der Konsole angezeigt werden, können wir den Test schon mal positiv beenden.
- LIRC-Namespace: Da wir beim Anlernen der einzelnen Tasten im nächsten Schritt, die standardisierten Namen der Tasten des lircd-Projektes benötigen, lassen wir uns erst mal anzeigen, welche Tatsennamen dies sind.
# irrecord --list-namespace > /root/lirc.namespace
Diese Datei lassen wir und dann am besten in einer separaten Konsole anzeigen, damit wir später nach den benötigten Key-Names greppen können.
KEY_0 KEY_102ND KEY_10CHANNELSDOWN KEY_10CHANNELSUP KEY_1 KEY_2 KEY_3 KEY_4 KEY_5 KEY_6 KEY_7 KEY_8 KEY_9 KEY_A KEY_AB KEY_ADDRESSBOOK KEY_AGAIN KEY_ALTERASE KEY_ANGLE KEY_APOSTROPHE KEY_ARCHIVE KEY_AUDIO KEY_AUX KEY_B KEY_BACK KEY_BACKSLASH KEY_BACKSPACE KEY_BASSBOOST KEY_BATTERY KEY_BLUE KEY_BLUETOOTH KEY_BOOKMARKS KEY_BREAK KEY_BRIGHTNESS_CYCLE KEY_BRIGHTNESSDOWN KEY_BRIGHTNESSUP KEY_BRIGHTNESS_ZERO KEY_BRL_DOT10 KEY_BRL_DOT1 KEY_BRL_DOT2 KEY_BRL_DOT3 KEY_BRL_DOT4 KEY_BRL_DOT5 KEY_BRL_DOT6 KEY_BRL_DOT7 KEY_BRL_DOT8 KEY_BRL_DOT9 KEY_C KEY_CALC KEY_CALENDAR KEY_CAMERA KEY_CANCEL KEY_CAPSLOCK KEY_CD KEY_CHANNEL KEY_CHANNELDOWN KEY_CHANNELUP KEY_CHAT KEY_CLEAR KEY_CLOSE KEY_CLOSECD KEY_COFFEE KEY_COMMA KEY_COMPOSE KEY_COMPUTER KEY_CONFIG KEY_CONNECT KEY_CONTEXT_MENU KEY_COPY KEY_CUT KEY_CYCLEWINDOWS KEY_D KEY_DASHBOARD KEY_DATABASE KEY_DEL_EOL KEY_DEL_EOS KEY_DELETE KEY_DELETEFILE KEY_DEL_LINE KEY_DIGITS KEY_DIRECTION KEY_DIRECTORY KEY_DISPLAY_OFF KEY_DISPLAYTOGGLE KEY_DOCUMENTS KEY_DOLLAR KEY_DOT KEY_DOWN KEY_DVD KEY_E KEY_EDIT KEY_EDITOR KEY_EJECTCD KEY_EJECTCLOSECD KEY_EMAIL KEY_END KEY_ENTER KEY_EPG KEY_EQUAL KEY_ESC KEY_EURO KEY_EXIT KEY_F10 KEY_F11 KEY_F12 KEY_F13 KEY_F14 KEY_F15 KEY_F1 KEY_F16 KEY_F17 KEY_F18 KEY_F19 KEY_F20 KEY_F21 KEY_F22 KEY_F23 KEY_F24 KEY_F2 KEY_F KEY_F3 KEY_F4 KEY_F5 KEY_F6 KEY_F7 KEY_F8 KEY_F9 KEY_FASTFORWARD KEY_FAVORITES KEY_FILE KEY_FINANCE KEY_FIND KEY_FIRST KEY_FN KEY_FN_1 KEY_FN_2 KEY_FN_B KEY_FN_D KEY_FN_E KEY_FN_ESC KEY_FN_F KEY_FN_F10 KEY_FN_F1 KEY_FN_F11 KEY_FN_F12 KEY_FN_F2 KEY_FN_F3 KEY_FN_F4 KEY_FN_F5 KEY_FN_F6 KEY_FN_F7 KEY_FN_F8 KEY_FN_F9 KEY_FN_S KEY_FORWARD KEY_FORWARDMAIL KEY_FRAMEBACK KEY_FRAMEFORWARD KEY_FRONT KEY_G KEY_GAMES KEY_GOTO KEY_GRAPHICSEDITOR KEY_GRAVE KEY_GREEN KEY_H KEY_HANGEUL KEY_HANJA KEY_HELP KEY_HENKAN KEY_HIRAGANA KEY_HOME KEY_HOMEPAGE KEY_HP KEY_I KEY_INFO KEY_INSERT KEY_INS_LINE KEY_ISO KEY_J KEY_K KEY_KATAKANA KEY_KATAKANAHIRAGANA KEY_KBDILLUMDOWN KEY_KBDILLUMTOGGLE KEY_KBDILLUMUP KEY_KEYBOARD KEY_KP0 KEY_KP1 KEY_KP2 KEY_KP3 KEY_KP4 KEY_KP5 KEY_KP6 KEY_KP7 KEY_KP8 KEY_KP9 KEY_KPASTERISK KEY_KPCOMMA KEY_KPDOT KEY_KPENTER KEY_KPEQUAL KEY_KPJPCOMMA KEY_KPLEFTPAREN KEY_KPMINUS KEY_KPPLUS KEY_KPPLUSMINUS KEY_KPRIGHTPAREN KEY_KPSLASH KEY_L KEY_LANGUAGE KEY_LAST KEY_LEFT KEY_LEFTALT KEY_LEFTBRACE KEY_LEFTCTRL KEY_LEFTMETA KEY_LEFTSHIFT KEY_LINEFEED KEY_LIST KEY_LOGOFF KEY_M KEY_MACRO KEY_MAIL KEY_MAX KEY_MEDIA KEY_MEDIA_REPEAT KEY_MEMO KEY_MENU KEY_MESSENGER KEY_MHP KEY_MINUS KEY_MODE KEY_MOVE KEY_MP3 KEY_MSDOS KEY_MUHENKAN KEY_MUTE KEY_N KEY_NEW KEY_NEWS KEY_NEXT KEY_NEXTSONG KEY_NUMERIC_0 KEY_NUMERIC_1 KEY_NUMERIC_2 KEY_NUMERIC_3 KEY_NUMERIC_4 KEY_NUMERIC_5 KEY_NUMERIC_6 KEY_NUMERIC_7 KEY_NUMERIC_8 KEY_NUMERIC_9 KEY_NUMERIC_POUND KEY_NUMERIC_STAR KEY_NUMLOCK KEY_O KEY_OK KEY_OPEN KEY_OPTION KEY_P KEY_PAGEDOWN KEY_PAGEUP KEY_PASTE KEY_PAUSE KEY_PAUSECD KEY_PC KEY_PHONE KEY_PLAY KEY_PLAYCD KEY_PLAYER KEY_PLAYPAUSE KEY_POWER KEY_POWER2 KEY_PRESENTATION KEY_PREVIOUS KEY_PREVIOUSSONG KEY_PRINT KEY_PROG1 KEY_PROG2 KEY_PROG3 KEY_PROG4 KEY_PROGRAM KEY_PROPS KEY_PVR KEY_Q KEY_QUESTION KEY_R KEY_RADIO KEY_RECORD KEY_RED KEY_REDO KEY_REFRESH KEY_REPLY KEY_RESERVED KEY_RESTART KEY_REWIND KEY_RFKILL KEY_RIGHT KEY_RIGHTALT KEY_RIGHTBRACE KEY_RIGHTCTRL KEY_RIGHTMETA KEY_RIGHTSHIFT KEY_RO KEY_S KEY_SAT KEY_SAT2 KEY_SAVE KEY_SCALE KEY_SCREEN KEY_SCROLLDOWN KEY_SCROLLLOCK KEY_SCROLLUP KEY_SEARCH KEY_SELECT KEY_SEMICOLON KEY_SEND KEY_SENDFILE KEY_SETUP KEY_SHOP KEY_SHUFFLE KEY_SLASH KEY_SLEEP KEY_SLOW KEY_SOUND KEY_SPACE KEY_SPELLCHECK KEY_SPORT KEY_SPREADSHEET KEY_STOP KEY_STOPCD KEY_SUBTITLE KEY_SUSPEND KEY_SWITCHVIDEOMODE KEY_SYSRQ KEY_T KEY_TAB KEY_TAPE KEY_TEEN KEY_TEXT KEY_TIME KEY_TITLE KEY_TUNER KEY_TV KEY_TV2 KEY_TWEN KEY_U KEY_UNDO KEY_UNKNOWN KEY_UP KEY_UWB KEY_V KEY_VCR KEY_VCR2 KEY_VENDOR KEY_VIDEO KEY_VIDEO_NEXT KEY_VIDEOPHONE KEY_VIDEO_PREV KEY_VOICEMAIL KEY_VOLUMEDOWN KEY_VOLUMEUP KEY_W KEY_WAKEUP KEY_WIMAX KEY_WLAN KEY_WORDPROCESSOR KEY_WWW KEY_X KEY_XFER KEY_Y KEY_YELLOW KEY_YEN KEY_Z KEY_ZENKAKUHANKAKU KEY_ZOOM KEY_ZOOMIN KEY_ZOOMOUT KEY_ZOOMRESET BTN_0 BTN_1 BTN_2 BTN_3 BTN_4 BTN_5 BTN_6 BTN_7 BTN_8 BTN_9 BTN_A BTN_B BTN_BACK BTN_BASE BTN_BASE2 BTN_BASE3 BTN_BASE4 BTN_BASE5 BTN_BASE6 BTN_C BTN_DEAD BTN_DIGI BTN_EXTRA BTN_FORWARD BTN_GAMEPAD BTN_GEAR_DOWN BTN_GEAR_UP BTN_JOYSTICK BTN_LEFT BTN_MIDDLE BTN_MISC BTN_MODE BTN_MOUSE BTN_PINKIE BTN_RIGHT BTN_SELECT BTN_SIDE BTN_START BTN_STYLUS BTN_STYLUS2 BTN_TASK BTN_THUMB BTN_THUMB2 BTN_THUMBL BTN_THUMBR BTN_TL BTN_TL2 BTN_TOOL_AIRBRUSH BTN_TOOL_BRUSH BTN_TOOL_DOUBLETAP BTN_TOOL_FINGER BTN_TOOL_LENS BTN_TOOL_MOUSE BTN_TOOL_PEN BTN_TOOL_PENCIL BTN_TOOL_QUADTAP BTN_TOOL_RUBBER BTN_TOOL_TRIPLETAP BTN_TOP BTN_TOP2 BTN_TOUCH BTN_TR BTN_TR2 BTN_TRIGGER BTN_WHEEL BTN_X BTN_Y BTN_Z
- Fernbedienung anlernen. Nach der Vorarbeit ist es jetzt an der Zeit die einzelnen Tasten den standardisierten KEY_NAMES zuzuweisen. Als Device geben wir auch hier wieder die Gerätedatei /dev/lirc0 der zugehörigen COM-Schnittstelle an.
# irrecord -d /dev/lirc0 /etc/lirc/lircd.conf
irrecord - application for recording IR-codes for usage with lirc Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de) This program will record the signals from your remote control and create a config file for lircd. A proper config file for lircd is maybe the most vital part of this package, so you should invest some time to create a working config file. Although I put a good deal of effort in this program it is often not possible to automatically recognize all features of a remote control. Often short-comings of the receiver hardware make it nearly impossible. If you have problems to create a config file READ THE DOCUMENTATION of this package, especially section "Adding new remote controls" for how to get help. If there already is a remote control of the same brand available at https://www.lirc.org/remotes/ you might also want to try using such a remote as a template. The config files already contain all parameters of the protocol used by remotes of a certain brand and knowing these parameters makes the job of this program much easier. There are also template files for the most common protocols available in the remotes/generic/ directory of the source distribution of this package. You can use a template files by providing the path of the file as command line parameter. Please send the finished config files to <lirc@bartelmus.de> so that I can make them available to others. Don't forget to put all information that you can get about the remote control in the header of the file. Press RETURN to continue. Now start pressing buttons on your remote control. It is very important that you press many different buttons and hold them down for approximately one second. Each button should generate at least one dot but in no case more than ten dots of output. Don't stop pressing buttons until two lines of dots (2x80) have been generated. Press RETURN now to start recording. ................................................................................ Found const length: 112784 Please keep on pressing buttons like described above. ................................................................................ RC-5 remote control found. No header found. Found hidden lead pulse: 923 No repeat code found. Signals are biphase encoded. Signal length is 13 Now enter the names for the buttons. Please enter the name for the next button (press <ENTER> to finish recording) KEY_POWER Now hold down button "KEY_POWER". Please enter the name for the next button (press <ENTER> to finish recording) KEY_POWER2 Now hold down button "KEY_POWER2". Please enter the name for the next button (press <ENTER> to finish recording) KEY_0 Now hold down button "KEY_0". Please enter the name for the next button (press <ENTER> to finish recording) KEY_1 Now hold down button "KEY_1". Please enter the name for the next button (press <ENTER> to finish recording) KEY_2 Now hold down button "KEY_2". Please enter the name for the next button (press <ENTER> to finish recording) KEY_3 Now hold down button "KEY_3". Please enter the name for the next button (press <ENTER> to finish recording) KEY_4 Now hold down button "KEY_4". Please enter the name for the next button (press <ENTER> to finish recording) KEY_5 Now hold down button "KEY_5". Please enter the name for the next button (press <ENTER> to finish recording) KEY_6 Now hold down button "KEY_6". Please enter the name for the next button (press <ENTER> to finish recording) KEY_7 Now hold down button "KEY_7". Please enter the name for the next button (press <ENTER> to finish recording) KEY_8 Now hold down button "KEY_8". Please enter the name for the next button (press <ENTER> to finish recording) KEY_9 Now hold down button "KEY_9". Please enter the name for the next button (press <ENTER> to finish recording) KEY_OK Now hold down button "KEY_OK". Please enter the name for the next button (press <ENTER> to finish recording) KEY_UP Now hold down button "KEY_UP". Please enter the name for the next button (press <ENTER> to finish recording) KEY_DOWN Now hold down button "KEY_DOWN". Please enter the name for the next button (press <ENTER> to finish recording) KEY_LEFT Now hold down button "KEY_LEFT". Please enter the name for the next button (press <ENTER> to finish recording) KEY_RIGHT Now hold down button "KEY_RIGHT". Please enter the name for the next button (press <ENTER> to finish recording) KEY_RED Now hold down button "KEY_RED". Please enter the name for the next button (press <ENTER> to finish recording) KEY_GREEN Now hold down button "KEY_GREEN". Please enter the name for the next button (press <ENTER> to finish recording) KEY_YELLOW Now hold down button "KEY_YELLOW". Please enter the name for the next button (press <ENTER> to finish recording) KEY_BLUE Now hold down button "KEY_BLUE". Please enter the name for the next button (press <ENTER> to finish recording) KEY_VOLUMEUP Now hold down button "KEY_VOLUMEUP". Please enter the name for the next button (press <ENTER> to finish recording) KEY_VOLUMEDOWN Now hold down button "KEY_VOLUMEDOWN". Please enter the name for the next button (press <ENTER> to finish recording) KEY_MUTE Now hold down button "KEY_MUTE". Please enter the name for the next button (press <ENTER> to finish recording) KEY_CHANNELUP Now hold down button "KEY_CHANNELUP". Please enter the name for the next button (press <ENTER> to finish recording) KEY_CHANNELDOWN Now hold down button "KEY_CHANNELDOWN". Please enter the name for the next button (press <ENTER> to finish recording) KEY_MENU Now hold down button "KEY_MENU". Please enter the name for the next button (press <ENTER> to finish recording) KEY_BACK Now hold down button "KEY_BACK". Please enter the name for the next button (press <ENTER> to finish recording) KEY_PAUSE Now hold down button "KEY_PAUSE". Please enter the name for the next button (press <ENTER> to finish recording) KEY_PLAY Now hold down button "KEY_PLAY". Please enter the name for the next button (press <ENTER> to finish recording) KEY_STOP Now hold down button "KEY_STOP". Please enter the name for the next button (press <ENTER> to finish recording) KEY_RECORD Now hold down button "KEY_RECORD". Please enter the name for the next button (press <ENTER> to finish recording) KEY_FORWARD Now hold down button "KEY_FORWARD". Please enter the name for the next button (press <ENTER> to finish recording) KEY_FASTFORWARD Now hold down button "KEY_FASTFORWARD". Please enter the name for the next button (press <ENTER> to finish recording) KEY_REWIND Now hold down button "KEY_REWIND". Please enter the name for the next button (press <ENTER> to finish recording) KEY_102ND Now hold down button "KEY_102ND". Please enter the name for the next button (press <ENTER> to finish recording) KEY_RESERVED Now hold down button "KEY_RESERVED". Please enter the name for the next button (press <ENTER> to finish recording) KEY_102ND Now hold down button "KEY_102ND". Please enter the name for the next button (press <ENTER> to finish recording) Checking for toggle bit mask. Please press an arbitrary button repeatedly as fast as possible. Make sure you keep pressing the SAME button and that you DON'T HOLD the button down!. If you can't see any dots appear, then wait a bit between button presses. Press RETURN to continue. .............................. Toggle bit mask is 0x800. Successfully written config file.
Die generierte Konfigurationsdatei lircd.conf ist dann bereits an Ort und Stelle.
- /etc/lirc/lircd.conf
# Please make this file available to others # by sending it to <lirc@bartelmus.de> # # this config file was automatically generated # using lirc-0.9.0(default) on Sat Jan 19 00:51:21 2013 # # contributed by # # brand: /root/lircd.conf.OfA_URC-3741 # model no. of remote control: # devices being controlled by this remote: # # Django : 2013-01-18 # One for ALL Fernbedienung URC 3741 Protecto # für Home-brew (16x50 UART compatible serial port) begin remote name /root/lircd.conf.OfA_URC-3741 bits 13 flags RC5|CONST_LENGTH eps 30 aeps 100 one 895 860 zero 895 860 plead 923 gap 112784 toggle_bit_mask 0x800 begin codes KEY_POWER 0x120C # KEY_POWER2 0x120C KEY_0 0x1200 KEY_1 0x1201 KEY_2 0x1202 KEY_3 0x1203 KEY_4 0x1204 KEY_5 0x1205 KEY_6 0x1206 KEY_7 0x1207 KEY_8 0x1208 KEY_9 0x1209 KEY_OK 0x0217 KEY_UP 0x0210 KEY_DOWN 0x0211 KEY_LEFT 0x0215 KEY_RIGHT 0x0216 KEY_RED 0x022B KEY_GREEN 0x022C KEY_YELLOW 0x022D KEY_BLUE 0x022E KEY_VOLUMEUP 0x1210 KEY_VOLUMEDOWN 0x1211 KEY_MUTE 0x120D KEY_CHANNELUP 0x1220 KEY_CHANNELDOWN 0x1221 KEY_MENU 0x0212 KEY_BACK 0x0212 KEY_PAUSE 0x1239 KEY_PLAY 0x1210 KEY_STOP 0x122B KEY_RECORD 0x1229 KEY_FORWARD 0x1211 KEY_FASTFORWARD 0x1208 KEY_REWIND 0x1222 KEY_RESERVED 0x123C KEY_102ND 0x120A end codes end remote
- eventlircd starten: Die Konfiguration ist somit abgeschlossen und wor können den eventlirc-Daemon wieder starten.
# start eventlircd
eventlircd start/running, process 3036
- VDR starten: Zum Schluß können wir nun unseren VDR wieder starten.
# start vdr
vdr start/running, process 3057
Voila, das wars auch schon mit der Integration und Anpassung der Konfiguration unserer OfA URC 3741 mit Hilfe von LIRCD am yaVDR.