KML2

Programmer’s reference manual


Version 0.3
November 10, 2004
Sonny Windstrup
Joachim Michaelis






If you wish to be notified when a new version of this document is available, please write to

sonny.windstrup@kiss-technology.com with the subject “KML DOCUMENT SUBSCRIBE”.


Legal stuff

KML (KiSS Markup Language) is a proprietary scripting language developed and owned by KiSS Technology. KML is still very much “in the works”, and the specifications are accordingly still subject to change. This document may be considered a Developer’s Alpha Release, and must be considered confidential. It may not be duplicated or re-distributed in any way without prior permission from KiSS Technology.

Pre-release developer contact information:

Principal contact :

Sonny Windstrup
KiSS Technology A/S

Slotsmarken 10

DK-2970 Hørsholm

Denmark


Phone (direct) : (+45) 45 17 00 83
Phone (main) : (+45) 45 17 00 00
Fax (main) : (+45) 45 17 00 60
Email : sonny.windstrup@kiss-technology.com

Introduction

What is KML?

KML was initially developed by KiSS Technology as a simple and efficient platform for interactive online applications on low-cost embedded devices and set-top boxes (STBs). We had already built a network enabled DVD player, the KiSS DP-500 (which was the World’s first and so far (Sept 2003) the World’s only DivXTM certified DVD player!) – The device was initially capable of using its network connection for retrieval and playback of local media content (MPEG4, MP3, JPEGs, etc) shared from a PC on the same network; a hugely popular feature.


The product had to have online applications as an obvious next step up from the local in-home network services. But how to implement them? We considered, most obvious, embedding a ‘thin’ web client such as Opera or Mozilla Firebird. Other STB manufacturers have tried this approach with limited success.

If such an STB web browser could be succesfully implemented, it would have many useful advantages in areas of portability, code maturity, javascript support and general availability of pre-existing content and online applications. However, the web-browser approach was abandoned when we determined that conventional web technology simply don’t work very well for STB use. Limited guaranteed TV screen resolution must be considered, as well as numerous other annoyance factors and concerns compromising the would-be usefulness of the solution:



By contrast, DVD-like menus and teletext content works well on a STB. The DVD menus are pretty simple, and are designed to be usable on a lowest-common-denominator TV-set, navigated with basically just the cursor keys on a remote control. DVD graphics can easily be designed to look good on a TV screen using correct gamma, pixel aspect, color space and detail level.

KML is designed with these considerations in mind. KML had to be TV-screen compatible and designed to work natively with basic remote control operation. The KML baseline specs are very similar to DVD content : The DP-500 implementation of KML has a pixel resolution and aspect ratio identical to NTSC DVD content (720 x 480 pixels @ 4:3 Pixel aspect (4/3)/(720/480) =~ 0.889 ; 16:9 Pixel aspect (16/9)/(720/480) =~ 1.185 ). Both PAL and NTSC systems use the same pixel resolution on this platform; in PAL mode the video buffers are hardware scaled from NTSC resolution to fit the screen (480 becomes 576 visible scanlines – KML is intended to ultimately not be client implementation specific, but at present it remains tied quite firmly with the KiSS EM85xx/EM86xx hardware platform, namely the KiSS DP-500 and derived products.)

The whole of the screen area can be controlled, including the overscan area. For these products, pixel coordinates begins at 0,0 (top left) and ends at 719,479 (bottom right). Overscan is implemented differently on every TV set, so you have to use very conservative allowances for the content area of the screen. Rules of thumb for designing content is to keep text and important graphical elements within the so-called ‘title safe’ area on a TV screen, which is the middle 80%. (subtract 10% of the screen size from either side and top and bottom). The actual screen edge usually occurs around the Action Safe border which extends to the middle 90% of the display area. Adobe Premiere and AfterEffects both have a title/action-safe overlay box in their preview windows, which may be helpful for content design.

The KiSS EM85xx hardware has two video buffers; one for overlay graphics (the OSD – On Screen Display buffer) and one for video/background art (YUV, or video buffer). The OSD buffer consists of a 720x480 pixel 8-bit bitmap spanning the entire scan area of the display. Each pixel may have one of 256 colors. Each of the 256 colors are index-mapped to a set of corresponding RGB 8-bit values and a 4-bit alpha (opacity) value, which is used to control OSD layer pixel transparency (zero alpha allows unobscured see-thru to the video layer beneath). A ‘blank’ OSD buffer is simply filled with color zero, which has 0% alpha opacity, making it effectively invisible.

The default OSD 8-bit palette has all primary and secondary colors with intensity and saturation gradients, as well as a mix of generally useful hues and gradients. Many of the colors exist in semi-transparent versions, and Photoshop color map files and OSD graphics processing macros are available for content developers. OEMs may design their own color palettes. Colors may also be specified as hex triplets (#RRGGBB, web/x-windows style) which are then mapped by the client to the closest matching color index value.

KML consists of an XML format data stream retrieved and parsed by a KML client. The data stream can be retrieved from a local file or (more commonly) an online host (via HTTP or HTTPS). The data stream contains instructions for the client to carry out. Typical simple actions/instructions:

Notice, loading a KML “page” does not imply that the client clears the graphics display. Instead, the host has to tell the client specifically to draw a solid filled rectangle spanning the screen with the desired color of transparency in order to clear the screen. This is intentional and serves to allow a response from a host application to only update a portion of the screen.


Other types of instructions define event-triggered action blocks. These are simply sequences of instructions like those above, which are performed when certain events occur, such as button presses on the remote control, or the activation of a highlighted menu item. Actions can also be timed to occur at intervals, after a delay, when a page is loaded or unloaded, when a menuitem is highlighted or becomes inactive, or when an audio or video stream stops. A KML action block can make the client load a new KML document for parsing, or render graphics to indicate a state change on a menu item, or control the playback of audio and video streams, etc.

Unlike HTML, KML clients aren’t themselves supposed to organize content and format quantities of text and embedded graphical content. The host system must manage the entire session and specify pixel coordinates for every element that is to be rendered on the client system screen. If you have content spanning more than a page, this is achived using simulated scroll (retrieving a KML page redrawing the portion of the content that is supposed to move, etc).

The current practical implementation solution we use for our own KML applications involves managing virtual screens on the object-oriented host system. A ghost cursor controls the placement of the individual objects, so the content author need not worry about having to keep track of these numbers. This situation is not dissimilar to that of designing an ANSI-type terminal system where the host system also controls screen coordinates of rendered text.

Obviously, there are advantages and disadvantage to this model: KML benefits precision control of the user experience – all clients should see the precise same layout and design. The downside is obviously, the client is ‘dumb’ and by design incapable of reformatting received content intelligently. It is not really a problem since the host system should know enough about the client to support the session and provide the needed intelligence. (The client tells the host system about its own capabilities.) Applications can thus be designed to accomodate a variety of different client types.

The long-term goal is to remove all of the client specific details from application design by the use of an sophisticated application support layer that sits between the client and the application. This layer is presently still being developed by KiSS, but a simple prototype of the concept is freely available for content developers to examine.

Combined, these features permit the implementation of simple but very persuasive applications.

A typical application could be a video on demand service, where a host application on a webserver can present the available video content by generating menus in the form of KML pages which are rendered on the client’s OSD graphics layer, perhaps on top of live video loops retrieved from in-player harddisk cache, which could be used for motion background art. By navigating the different KML pages with the remote control, the user can then select a video stream which can subsequently be purchased/activated with a KML scripted action tying in with local DRM/key-exchange functions.

Suggested types of applications suitable for KMLimplementation:


A KML application may be developed using standard off-the-shelf components, and can be hosted on any webserver platform or file system. KML documents can be retrieved by the client using plain vanilla HTTP GETs on port 80. For OEM products, KML documents can be embedded in firmware ROM or system partition on harddisk. We have developed a number of PHP-based tools for assisting development, hosting and deployment of KML-based content, services and applications. These will be made available shortly.

The future

KML will continue to grow as we discover new features that should be fitted to the model in order to help application developers and improve user experience. There are a number of improvements already planned, and client-side scripting is just one of them.

The tag syntax, choice of wording and semantic conventions used in KML needs to be tightened up substantially, and we’re aware of these issues. We want to tidy up the namespace so all used tag and parameter names are structurally logical. It must be understood that KML was initially created to solve some very specific problems, and this mostly explains its present shape and nature. In any case, KML remains very useful and we’ve succesfully implemented a number of increasingly complex applications using the platform.

In the near future, KiSS will launch a virtual developer’s pavillion with a substantial emphasis on getting feedback from content/application developers into the KML core development cycle and implementing new features to meet demand. We fully intend KML to be a living platform, flexible enough to be ‘bent’ to meet individual OEM demand while still maintaining compatibility.

KML document anatomy


KML is implemented as well-formed XML documents with a number of levels of nodes and subnodes describing the client commands. There are currently still no officially endorsed DTDs or schemas provided by KiSS to validate KML documents. Such will be made available when language specifications stabilize.


Quick primer on XML:
http://studio.tellme.com/general/xmlprimer.html

KMLPAGE

The KML page should have a proper XML header (UTF-8 encoding recommended ) followed by the <KMLPAGE> container tag. This is the KML document root node. Everything else KML related in the document must be attached to this node, or a chain of nodes rooted in this tag.

Sample valid KML page:


<?xml version='1.0' encoding='UTF-8' standalone='yes'?>

<KMLPAGE version=”2.0”>

(...page content...)


</KMLPAGE>


Example:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>

<KMLPAGE version="2.0">


<BACKGROUND vgradient="0,0,0-0,0,128" />

<FILLRECT coords="0,0,719,479" pen="0" />

<TEXT coords="60,60" font="0" pen="255"> Hello, world </TEXT>


</KMLPAGE>


The above very simple example renders a blue screen fading to black, with a plain white text in the top left hand corner stating ‘Hello World’ (Fig. 1).



There are no events of any kind on this page, which makes it a dead end. You can basically only press STOP, which shuts down the KML client and reverts the device to normal operation.


Usually, KML documents have at least some actions and events associated with remote button presses so that interactive operation is possible. We recommend that pages on logical dead-end paths should be equipped with at least some kind of means for returning the user to the previous page they came from.


Fig. 2 shows logical KML document structure.


Simple KML Commands

The commands in this section can all be attached to either the main KMLPAGE node or any of the action blocks on the miscellaneous event nodes.

GOTO

Does the following:
  1. Cancels all events associated with current KML document (except ONUNLOAD)
  2. Excecutes ONUNLOAD event action block (if present)
  3. Unloads (discards) current KML document
  4. Loads new KML document.

Notes:


Usage:


<GOTO href="destination" />


Node Parameters:



Example:


<GOTO href="http://www.host.com/kml/page2.xml" />


FILLRECT

Draws solid filled rectangle on graphics layer.

Notes:


Usage:

<FILLRECT coords=”x,y,w,h” pen=”color” />


Node Parameters:



Parameter data for “coords” :



Example:


<FILLRECT coords="100,100,400,100" pen="255" />

<FILLRECT coords="150,150,200,200" pen="16" />


Draws a 200 x 200 pixel black solid rectangle on top of an 400 x 100 white solid rectangle (Fig. 3).

RECT

Draws rectangle (1 pixel line diameter) on graphics layer.

Notes:


Usage:

<FILLRECT coords=”x,y,w,h” pen=”color” />


Parameters:



Parameter data for “coords” :



Example:


<RECT coords="100,100,400,100" pen="255" />

<RECT coords="150,150,200,200" pen="16" />


Draws a 200 x 200 pixel black rectangle on top of an 400 x 100 white rectangle (Fig. 3).


FIP

Replaces message on alphanumeric fluorescent display on device front.

Usage:

<FIP [speed='a'] [intensity='b']> (text) </FIP>


Parameters:


Example:

<FIP speed='2' intensity='6'>SCROLLING MESSAGE</FIP>


TEXT

Draws text on graphics layer.

Notes:


Usage:

<TEXT coords='x,y' [font='(0-3)’] [pen='color']>

(..actual message text...)

</TEXT>


Example:

<TEXT coords='101,180' font='1' pen='0'>

Large text

</TEXT>


<TEXT coords='101,250' font='0' pen='31'>

Small text

</TEXT>



Draws black text (large) at pixel coordinates (101,180) with font 1 and white text at pixel coordinates (101,250) with font 0


LOADIMAGE (obsolete)

Loads, decodes and caches a GIF image to an image buffer for later use.

Notes:


Usage:

<LOADIMAGE id="name" href="source" />


Example:

<LOADIMAGE id="logo" href="http://host/graphics/logo.gif" />


Loads the ‘logo.gif’ graphic, decodes and caches it in the graphics buffer named ‘logo’, unless that graphics buffer was already in use, in which case nothing happens.

IMAGE

Draws a pre-cached GIF image on graphics layer.

Notes:


Usage:

<IMAGE coords='x,y' src='name' />


Example:

<IMAGE coords='74,84' src='logo' />


Draws pre-cached image buffer labeled ‘logo’ with top-left corner of graphic starting at specified pixel position .

CLEARIMAGE

Clears image buffer

(TBD)

STOPMEDIA

Stops all currently playing media streams.

(TBD)

SYSTEM

Calls system process.
<SYSTEM function='' param1='' param2='' param3='' param4='' param5='' param6='' />


(TBD)

MENUSELECT

Activates specified menu item.

Usage:

<MENUSELECT item='<id>' />


Example:

<MENUSELECT item='one' />

Selects the menuitem labeled ‘one’. If the menuitem has an ONHILITE event action block associated, this will execute. Typically, it will cause a state change in visible graphics to indicate that the menuitem has become activated, or selected. Similarly, if a menuitem was already selected (active) before the MENUSELECT command was executed, an UNHILITE event action block will be executed if associated with that menuitem.

PLAYMEDIA

Activates playback of specified media content retrieved via http or from a file on a local file system. Buffering and playback starts immediately. Any current audio or video media playback process stops; Video media content is rendered in media layer (overlay graphics layer and menu operation are not affected.). Starting an audio stream halts any running video stream playback process, but does not clear the video (YUV) layer.

Please refer to appendix A for media compatibility information.

Usage:

<PLAYMEDIA href=”source” />


Node Parameters:


Notes:


Examples:

<PLAYMEDIA href="http://www.host.com/media/test.mp3" />


This function can be used in association with the ONMEDIASTOP event. This allows application designers to specify a sequence of commands to be executed when the media streams is interrupted from the source or by user intervention (pressing STOP, etc)

KML action blocks

Action blocks are collections of actions to be carried out when an associated event occurs. According to present specification, the action blocks are container tags with their attached command nodes isolated inside XML CDATA escape blocks. Please refer to W3C spec on CDATA for proper usage:

http://www.w3.org/TR/REC-xml#sec-cdata-sect


Most action blocks are tied to specific events and may only be attached to the main KMLPAGE node. Some action blocks are nested with their parent objects such as BUTTON and MENUITEM event types. Menuitems are further described later.


ONUNLOAD

Admittedly counter-intuitively labeled, executes when a GOTO command fetches another KML document. (GOTO causes the current KML document to unload.)

Notes:


Usage:

<ONUNLOAD><![CDATA[


(...commands to be executed...)


]]></ONUNLOAD>


Example:

<ONUNLOAD><![CDATA[

<FILLRECT coords=”0,0,719,479” pen=”0” />

]]></ONUNLOAD>


ONINTERVAL

Waits for x seconds where x is 0.1 sec. This only works on DP-558 with firmware 1.0.7 and up and newer models. For older models, the maximum value will be capped to 10, thus this call should not be used for older firmwares and players.

Example (wait 5 seconds):

<ONINTERVAL interval='50'><![CDATA[

<FILLRECT coords='0,0,719,479' pen='249' />

]]></ONUNLOAD>


ONTIMER

Waits for x seconds where x is 1 ms. This only works on DP-558 with firmware 1.0.8 and up and newer models. For older models, the maximum value will be capped to 10000 (10 secs). The minimum value is 100 (0.1 sec.)

Example (wait 10 seconds):

<ONTIMER timeout='10000'><![CDATA[

<FILLRECT coords='0,0,719,479' pen='216' />

]]></ONTIMER>


ONMETADATA

Executes when a playing media stream delivers updated metadata information.

Notes:

Usage:

<ONMETADATA><![CDATA[


(...commands to be executed...)


]]></ONMETADATA>


Example:

<PLAYMEDIA href="http://172.15.4.24/mp3/domino.pls" />

<ONMETADATA><![CDATA[

<TEXT coords="100,100" font="0" pen="255"> $$MP3_Title$$ </TEXT>

]]></ONMETADATA>


The above example updates


ONMEDIASTOPPED

Executes when a PLAYMEDIA file or stream playback completes.

Notes:

Usage:

<ONMEDIASTOPPED><![CDATA[


(...commands to be executed...)


]]></ONMEDIASTOPPED>


Example:

<PLAYMEDIA href="http://host/mp3/domino.pls" />

<ONMEDIASTOPPED><![CDATA[

<TEXT coords="100,100" font="0" pen="255">

Media playback has ceased.

</TEXT>

]]></ONMEDIASTOPPED>



The above example prints a text on the screen when the media playback of a stream stops.



MAIN

Main action block is a ‘virtual’ block. There’s no ‘main’ container tag other than KMLPAGE itself. All command nodes within KMLPAGE not associated with any specific action block, are parsed and executed in the order they’re listed. These command nodes basically constitute the ‘meat’ of the KML document, and may be used for any purpose.

KML MENUITEMS

Menuitems are special objects used to draw ‘hot spots’ for interactive menu navigation. They are comparable to DVD menu hotspots in terms of functionality. Up to 7 action blocks can be associated with any one menuitem: There’s one action block for each of the four cursor key directions, so that makes four. These are labeled ONUP, ONDOWN, ONLEFT, ONRIGHT.

Then there are two action blocks representing activation and deactivation states of the menu item (Activation means the menu item has been selected. Deactivation means the menu item is no longer active – another item has been selected.) These two action blocks are labened ONHILITE and ONUNHILITE, and are primarily used to draw ‘highlight’ bars around active menu hotspots. The four cursour directions can be linked to run MENUSELECT on neighboring items.

Unless defined otherwise, ONDOWN and ONRIGHT are linked to the ‘next’ item in order of definition, and ONUP / ONLEFT links to ‘previous’ items. The automatic linking ‘wraps’ so when you press DOWN or RIGHT at the last item, the first item becomes active. UP or LEFT similarly makes the last item active when at the first item.

The final menuitem event action block is ONCLICK, and it’s executed when the ENTER key is pressed on the remote control while the menuitem is highlighted.
Notes:


Usage:


<MENUITEM id='name'>

<ONCLICK><![CDATA[
{event}
]]></ONCLICK>

<ONHILITE><![CDATA[
{event}
]]></ONHILITE>

<ONUNHILITE><![CDATA[
{event}
]]></ONUNHILITE>

<ONLEFT><![CDATA[
{event}
]]></ONLEFT>

<ONRIGHT><![CDATA[
{event}
]]></ONRIGHT>

<ONUP><![CDATA[
{event}
]]></ONUP>

<ONDOWN><![CDATA[
{event}
]]></ONDOWN>

</MENUITEM>

Example:

<MENUITEM id='1'>

<ONCLICK><![CDATA[
<FILLRECT coords="60,200,300,45" pen="22" />
<TEXT coords="65,205" font="1" pen="255">One was clicked</TEXT>
]]></ONCLICK>

<ONHILITE><![CDATA[
<TEXT coords="60,100" font="0" pen="255">Item one is selected</TEXT>
<TEXT coords="60,130" font="0" pen="0">Item two is not selected</TEXT>
]]></ONHILITE>

<ONUNHILITE><![CDATA[
<FILLRECT coords="55,95,250,65" pen="22" />
]]></ONUNHILITE>

</MENUITEM>

<MENUITEM id='2'>

<ONCLICK><![CDATA[
<FILLRECT coords="60,200,300,45" pen="22" />
<TEXT coords="65,205" font="1" pen="255">Two was clicked</TEXT>
]]></ONCLICK>

<ONHILITE><![CDATA[
<TEXT coords="60,100" font="0" pen="0">Item one is not selected</TEXT>
<TEXT coords="60,130" font="0" pen="255">Item two is selected</TEXT>
]]></ONHILITE>

<ONUNHILITE><![CDATA[
<FILLRECT coords="55,95,250,65" pen="22" />
]]></ONUNHILITE>

</MENUITEM>

This example has two active menuitems. The cursor directions aren’t specified by the KML code, so the menuitems are tied using only automatic bindings. Each of the menuitems have ONUNHILITE and ONHILITE events defined which alters the text to reflect the active state. Note, the ‘menuitems’ need not occupy distinct areas of the screen – multiple states can share one screen area.

Appendix : KiSS hardware specific information


Appendix A : Media compatibility chart

DP-500 / DP-508

The KiSS EM85xx platform supports hardware decoding of a variety of MPEG, MPEG2 and MPEG4 media formats. Additional formats are supported through software decoding.

Supported media types:


Content authoring guidelines with specific bitrate and codec specs are being developed and will appear here in future revisions of the document.

Appendix B : Remote control button codes

DP-500 / DP-508 / DP-558

For use with the KEY action event, refer to the decimal scancodes.

Button Code Name

Button
Title

Scancode (Decimal)

Scancode (Hex)

SHOW_ONE_KEYDOWN

1

74

0x004A

SHOW_TWO_KEYDOWN

2

75

0x004B

SHOW_THREE_KEYDOWN

3

76

0x004C

SHOW_FOUR_KEYDOWN

4

77

0x004D

SHOW_FIVE_KEYDOWN

5

79

0x004F

SHOW_SIX_KEYDOWN

6

80

0x0050

SHOW_SEVEN_KEYDOWN

7

81

0x0051

SHOW_EIGHT_KEYDOWN

8

82

0x0052

SHOW_NINE_KEYDOWN

9

83

0x0053

SHOW_ZERO_KEYDOWN

0

73 or 78

0x0049

SHOW_TITLE_KEYDOWN

Title Menu

84

0x0054

SHOW_MENU_KEYDOWN

Root Menu

65

0x0041

SHOW_RETURN_KEYDOWN

Return

93

0x005D

SHOW_UP_KEYDOWN

Up

67

0x0043

SHOW_DOWN_KEYDOWN

Down

68

0x0044

SHOW_LEFT_KEYDOWN

Left

69

0x0045

SHOW_RIGHT_KEYDOWN

Right

70

0x0046

SHOW_ENTER_KEYDOWN

Enter

71 or 115

0x0047

SHOW_REV_KEYDOWN

Fast Reverse

94

0x005E

SHOW_PLAY_KEYDOWN

Play/Pause

16387

0x4003

SHOW_FWD_KEYDOWN

Fast Forward

95

0x005F

SHOW_PREV_KEYDOWN

Previous

3 or 16389

0x4005

SHOW_NEXT_KEYDOWN

Next

2 or 16388

0x4004

SHOW_STEP_KEYDOWN

Single Step

96

0x0060

SHOW_AUDIO_KEYDOWN

Audio

97

0x0061

SHOW_SUBTITLE_KEYDOWN

Subtitle

98

0x0062

SHOW_ANGLE_KEYDOWN

Angle

100

0x0064

SHOW_ZOOM_KEYDOWN

Zoom

99

0x0063

SHOW_REPEAT_KEYDOWN

Repeat

101

0x0065

SHOW_BOOKMARK_KEYDOWN

Bookmark

102

0x0066

SHOW_SETUP_KEYDOWN

Setup

768

0x0300

SHOW_CLEAR_KEYDOWN

Clear

103

0x0067

SHOW_SEARCH_KEYDOWN

Search

104

0x0068


Appendix C : OSD color palette

DP-500 / DP-508

The Sigma EM85XX platform has a 720x480 pixel 8-bit (256 color) buffer on the OSD overlay graphics layer. Each of the 256 indexed colors corresponds to a set of RGB 8-bit values and a 4-bit alpha value. Specific pixel color references in the current KML implementation indicates indexed color values.

Enclosed in this archive, the file etc/osdpalette.png shows the color palette in a handy, printable reference chart.


The raw data table follows, an excerpt from KiSS EM85xx graphics source code:

RGBDEF( 51, 51, 51 ), // index: 000 [00] color: #333333 alpha: 000 [00] [0] ...............
RGBDEF( 22, 27, 88 ), // index: 001 [01] color: #161b58 alpha: 255 [ff] [f] ***************
RGBDEF( 128, 128, 128 ), // index: 002 [02] color: #808080 alpha: 064 [40] [4] ****...........
RGBDEF( 128, 128, 128 ), // index: 003 [03] color: #808080 alpha: 128 [80] [8] ********.......
RGBDEF( 128, 128, 128 ), // index: 004 [04] color: #808080 alpha: 191 [bf] [b] ***********....
RGBDEF( 22, 27, 88 ), // index: 005 [05] color: #161b58 alpha: 064 [40] [4] ****...........
RGBDEF( 22, 27, 88 ), // index: 006 [06] color: #161b58 alpha: 102 [66] [6] ******.........
RGBDEF( 22, 27, 88 ), // index: 007 [07] color: #161b58 alpha: 191 [bf] [b] ***********....
RGBDEF( 249, 162, 57 ), // index: 008 [08] color: #f9a239 alpha: 064 [40] [4] ****...........
RGBDEF( 249, 162, 57 ), // index: 009 [09] color: #f9a239 alpha: 128 [80] [8] ********.......
RGBDEF( 249, 162, 57 ), // index: 010 [0a] color: #f9a239 alpha: 191 [bf] [b] ***********....
RGBDEF( 253, 31, 31 ), // index: 011 [0b] color: #fd1f1f alpha: 255 [ff] [f] ***************
RGBDEF( 253, 64, 31 ), // index: 012 [0c] color: #fd401f alpha: 255 [ff] [f] ***************
RGBDEF( 253, 109, 31 ), // index: 013 [0d] color: #fd6d1f alpha: 255 [ff] [f] ***************
RGBDEF( 253, 160, 31 ), // index: 014 [0e] color: #fda01f alpha: 255 [ff] [f] ***************
RGBDEF( 253, 203, 31 ), // index: 015 [0f] color: #fdcb1f alpha: 255 [ff] [f] ***************
RGBDEF( 0, 0, 0 ), // index: 016 [10] color: #000000 alpha: 255 [ff] [f] ***************
RGBDEF( 17, 17, 17 ), // index: 017 [11] color: #111111 alpha: 255 [ff] [f] ***************
RGBDEF( 34, 34, 34 ), // index: 018 [12] color: #222222 alpha: 255 [ff] [f] ***************
RGBDEF( 51, 51, 51 ), // index: 019 [13] color: #333333 alpha: 255 [ff] [f] ***************
RGBDEF( 68, 68, 68 ), // index: 020 [14] color: #444444 alpha: 255 [ff] [f] ***************
RGBDEF( 85, 85, 85 ), // index: 021 [15] color: #555555 alpha: 255 [ff] [f] ***************
RGBDEF( 102, 102, 102 ), // index: 022 [16] color: #666666 alpha: 255 [ff] [f] ***************
RGBDEF( 119, 119, 119 ), // index: 023 [17] color: #777777 alpha: 255 [ff] [f] ***************
RGBDEF( 136, 136, 136 ), // index: 024 [18] color: #888888 alpha: 255 [ff] [f] ***************
RGBDEF( 153, 153, 153 ), // index: 025 [19] color: #999999 alpha: 255 [ff] [f] ***************
RGBDEF( 170, 170, 170 ), // index: 026 [1a] color: #aaaaaa alpha: 255 [ff] [f] ***************
RGBDEF( 187, 187, 187 ), // index: 027 [1b] color: #bbbbbb alpha: 255 [ff] [f] ***************
RGBDEF( 204, 204, 204 ), // index: 028 [1c] color: #cccccc alpha: 255 [ff] [f] ***************
RGBDEF( 221, 221, 221 ), // index: 029 [1d] color: #dddddd alpha: 255 [ff] [f] ***************
RGBDEF( 238, 238, 238 ), // index: 030 [1e] color: #eeeeee alpha: 255 [ff] [f] ***************
RGBDEF( 255, 255, 255 ), // index: 031 [1f] color: #ffffff alpha: 255 [ff] [f] ***************
RGBDEF( 22, 27, 88 ), // index: 032 [20] color: #161b58 alpha: 102 [66] [6] ******.........
RGBDEF( 34, 39, 97 ), // index: 033 [21] color: #222761 alpha: 116 [74] [7] *******........
RGBDEF( 63, 67, 118 ), // index: 034 [22] color: #3f4376 alpha: 136 [88] [8] ********.......
RGBDEF( 97, 101, 143 ), // index: 035 [23] color: #61658f alpha: 160 [a0] [a] *********......
RGBDEF( 129, 133, 166 ), // index: 036 [24] color: #8185a6 alpha: 184 [b8] [b] ***********....
RGBDEF( 166, 168, 191 ), // index: 037 [25] color: #a6a8bf alpha: 211 [d3] [d] ************...
RGBDEF( 198, 200, 215 ), // index: 038 [26] color: #c6c8d7 alpha: 234 [ea] [e] **************.
RGBDEF( 235, 236, 241 ), // index: 039 [27] color: #ebecf1 alpha: 254 [fe] [f] ***************
RGBDEF( 29, 29, 249 ), // index: 040 [28] color: #1d1df9 alpha: 255 [ff] [f] ***************
RGBDEF( 29, 39, 249 ), // index: 041 [29] color: #1d27f9 alpha: 255 [ff] [f] ***************
RGBDEF( 29, 57, 249 ), // index: 042 [2a] color: #1d39f9 alpha: 255 [ff] [f] ***************
RGBDEF( 29, 80, 249 ), // index: 043 [2b] color: #1d50f9 alpha: 255 [ff] [f] ***************
RGBDEF( 29, 110, 249 ), // index: 044 [2c] color: #1d6ef9 alpha: 255 [ff] [f] ***************
RGBDEF( 29, 141, 249 ), // index: 045 [2d] color: #1d8df9 alpha: 255 [ff] [f] ***************
RGBDEF( 29, 167, 249 ), // index: 046 [2e] color: #1da7f9 alpha: 255 [ff] [f] ***************
RGBDEF( 29, 187, 249 ), // index: 047 [2f] color: #1dbbf9 alpha: 255 [ff] [f] ***************
RGBDEF( 22, 27, 88 ), // index: 048 [30] color: #161b58 alpha: 102 [66] [6] ******.........
RGBDEF( 35, 37, 84 ), // index: 049 [31] color: #232554 alpha: 116 [74] [7] *******........
RGBDEF( 64, 60, 72 ), // index: 050 [32] color: #403c48 alpha: 136 [88] [8] ********.......
RGBDEF( 99, 88, 59 ), // index: 051 [33] color: #63583b alpha: 160 [a0] [a] *********......
RGBDEF( 134, 116, 46 ), // index: 052 [34] color: #86742e alpha: 184 [b8] [b] ***********....
RGBDEF( 167, 141, 33 ), // index: 053 [35] color: #a78d21 alpha: 211 [d3] [d] ************...
RGBDEF( 202, 169, 20 ), // index: 054 [36] color: #caa914 alpha: 234 [ea] [e] **************.
RGBDEF( 233, 194, 9 ), // index: 055 [37] color: #e9c209 alpha: 254 [fe] [f] ***************
RGBDEF( 6, 1, 0 ), // index: 056 [38] color: #060100 alpha: 255 [ff] [f] ***************
RGBDEF( 41, 8, 0 ), // index: 057 [39] color: #290800 alpha: 255 [ff] [f] ***************
RGBDEF( 75, 15, 0 ), // index: 058 [3a] color: #4b0f00 alpha: 255 [ff] [f] ***************
RGBDEF( 109, 22, 0 ), // index: 059 [3b] color: #6d1600 alpha: 255 [ff] [f] ***************
RGBDEF( 143, 29, 0 ), // index: 060 [3c] color: #8f1d00 alpha: 255 [ff] [f] ***************
RGBDEF( 178, 36, 0 ), // index: 061 [3d] color: #b22400 alpha: 255 [ff] [f] ***************
RGBDEF( 212, 42, 0 ), // index: 062 [3e] color: #d42a00 alpha: 255 [ff] [f] ***************
RGBDEF( 247, 49, 0 ), // index: 063 [3f] color: #f73100 alpha: 255 [ff] [f] ***************
RGBDEF( 0, 0, 255 ), // index: 064 [40] color: #0000ff alpha: 255 [ff] [f] ***************
RGBDEF( 255, 0, 0 ), // index: 065 [41] color: #ff0000 alpha: 255 [ff] [f] ***************
RGBDEF( 255, 0, 255 ), // index: 066 [42] color: #ff00ff alpha: 255 [ff] [f] ***************
RGBDEF( 0, 255, 0 ), // index: 067 [43] color: #00ff00 alpha: 255 [ff] [f] ***************
RGBDEF( 0, 255, 255 ), // index: 068 [44] color: #00ffff alpha: 255 [ff] [f] ***************
RGBDEF( 255, 255, 0 ), // index: 069 [45] color: #ffff00 alpha: 255 [ff] [f] ***************
RGBDEF( 0, 153, 255 ), // index: 070 [46] color: #0099ff alpha: 255 [ff] [f] ***************
RGBDEF( 255, 153, 0 ), // index: 071 [47] color: #ff9900 alpha: 255 [ff] [f] ***************
RGBDEF( 255, 0, 153 ), // index: 072 [48] color: #ff0099 alpha: 255 [ff] [f] ***************
RGBDEF( 236, 190, 155 ), // index: 073 [49] color: #ecbe9b alpha: 255 [ff] [f] ***************
RGBDEF( 195, 206, 220 ), // index: 074 [4a] color: #c3cedc alpha: 255 [ff] [f] ***************
RGBDEF( 165, 228, 128 ), // index: 075 [4b] color: #a5e480 alpha: 255 [ff] [f] ***************
RGBDEF( 149, 176, 206 ), // index: 076 [4c] color: #95b0ce alpha: 255 [ff] [f] ***************
RGBDEF( 236, 152, 111 ), // index: 077 [4d] color: #ec986f alpha: 255 [ff] [f] ***************
RGBDEF( 236, 206, 106 ), // index: 078 [4e] color: #ecce6a alpha: 255 [ff] [f] ***************
RGBDEF( 179, 133, 174 ), // index: 079 [4f] color: #b385ae alpha: 255 [ff] [f] ***************
RGBDEF( 65, 65, 221 ), // index: 080 [50] color: #4141dd alpha: 255 [ff] [f] ***************
RGBDEF( 221, 65, 65 ), // index: 081 [51] color: #dd4141 alpha: 255 [ff] [f] ***************
RGBDEF( 221, 65, 220 ), // index: 082 [52] color: #dd41dc alpha: 255 [ff] [f] ***************
RGBDEF( 65, 221, 65 ), // index: 083 [53] color: #41dd41 alpha: 255 [ff] [f] ***************
RGBDEF( 65, 220, 221 ), // index: 084 [54] color: #41dcdd alpha: 255 [ff] [f] ***************
RGBDEF( 220, 221, 65 ), // index: 085 [55] color: #dcdd41 alpha: 255 [ff] [f] ***************
RGBDEF( 65, 158, 221 ), // index: 086 [56] color: #419edd alpha: 255 [ff] [f] ***************
RGBDEF( 221, 158, 65 ), // index: 087 [57] color: #dd9e41 alpha: 255 [ff] [f] ***************
RGBDEF( 221, 65, 158 ), // index: 088 [58] color: #dd419e alpha: 255 [ff] [f] ***************
RGBDEF( 214, 185, 164 ), // index: 089 [59] color: #d6b9a4 alpha: 255 [ff] [f] ***************
RGBDEF( 190, 196, 205 ), // index: 090 [5a] color: #bec4cd alpha: 255 [ff] [f] ***************
RGBDEF( 169, 208, 146 ), // index: 091 [5b] color: #a9d092 alpha: 255 [ff] [f] ***************
RGBDEF( 159, 176, 194 ), // index: 092 [5c] color: #9fb0c2 alpha: 255 [ff] [f] ***************
RGBDEF( 212, 160, 136 ), // index: 093 [5d] color: #d4a088 alpha: 255 [ff] [f] ***************
RGBDEF( 212, 193, 133 ), // index: 094 [5e] color: #d4c185 alpha: 255 [ff] [f] ***************
RGBDEF( 176, 149, 173 ), // index: 095 [5f] color: #b095ad alpha: 255 [ff] [f] ***************
RGBDEF( 146, 146, 250 ), // index: 096 [60] color: #9292fa alpha: 255 [ff] [f] ***************
RGBDEF( 250, 146, 146 ), // index: 097 [61] color: #fa9292 alpha: 255 [ff] [f] ***************
RGBDEF( 250, 146, 249 ), // index: 098 [62] color: #fa92f9 alpha: 255 [ff] [f] ***************
RGBDEF( 146, 250, 146 ), // index: 099 [63] color: #92fa92 alpha: 255 [ff] [f] ***************
RGBDEF( 146, 249, 250 ), // index: 100 [64] color: #92f9fa alpha: 255 [ff] [f] ***************
RGBDEF( 249, 250, 146 ), // index: 101 [65] color: #f9fa92 alpha: 255 [ff] [f] ***************
RGBDEF( 146, 208, 250 ), // index: 102 [66] color: #92d0fa alpha: 255 [ff] [f] ***************
RGBDEF( 250, 208, 146 ), // index: 103 [67] color: #fad092 alpha: 255 [ff] [f] ***************
RGBDEF( 250, 146, 208 ), // index: 104 [68] color: #fa92d0 alpha: 255 [ff] [f] ***************
RGBDEF( 245, 226, 212 ), // index: 105 [69] color: #f5e2d4 alpha: 255 [ff] [f] ***************
RGBDEF( 229, 233, 239 ), // index: 106 [6a] color: #e5e9ef alpha: 255 [ff] [f] ***************
RGBDEF( 215, 241, 200 ), // index: 107 [6b] color: #d7f1c8 alpha: 255 [ff] [f] ***************
RGBDEF( 208, 220, 232 ), // index: 108 [6c] color: #d0dce8 alpha: 255 [ff] [f] ***************
RGBDEF( 244, 209, 193 ), // index: 109 [6d] color: #f4d1c1 alpha: 255 [ff] [f] ***************
RGBDEF( 244, 231, 191 ), // index: 110 [6e] color: #f4e7bf alpha: 255 [ff] [f] ***************
RGBDEF( 220, 201, 218 ), // index: 111 [6f] color: #dcc9da alpha: 255 [ff] [f] ***************
RGBDEF( 77, 77, 246 ), // index: 112 [70] color: #4d4df6 alpha: 255 [ff] [f] ***************
RGBDEF( 246, 77, 77 ), // index: 113 [71] color: #f64d4d alpha: 255 [ff] [f] ***************
RGBDEF( 246, 77, 245 ), // index: 114 [72] color: #f64df5 alpha: 255 [ff] [f] ***************
RGBDEF( 77, 246, 77 ), // index: 115 [73] color: #4df64d alpha: 255 [ff] [f] ***************
RGBDEF( 77, 245, 246 ), // index: 116 [74] color: #4df5f6 alpha: 255 [ff] [f] ***************
RGBDEF( 245, 246, 77 ), // index: 117 [75] color: #f5f64d alpha: 255 [ff] [f] ***************
RGBDEF( 77, 178, 246 ), // index: 118 [76] color: #4db2f6 alpha: 255 [ff] [f] ***************
RGBDEF( 246, 178, 77 ), // index: 119 [77] color: #f6b24d alpha: 255 [ff] [f] ***************
RGBDEF( 246, 77, 178 ), // index: 120 [78] color: #f64db2 alpha: 255 [ff] [f] ***************
RGBDEF( 238, 207, 184 ), // index: 121 [79] color: #eecfb8 alpha: 255 [ff] [f] ***************
RGBDEF( 212, 219, 228 ), // index: 122 [7a] color: #d4dbe4 alpha: 255 [ff] [f] ***************
RGBDEF( 189, 231, 165 ), // index: 123 [7b] color: #bde7a5 alpha: 255 [ff] [f] ***************
RGBDEF( 179, 197, 217 ), // index: 124 [7c] color: #b3c5d9 alpha: 255 [ff] [f] ***************
RGBDEF( 236, 180, 153 ), // index: 125 [7d] color: #ecb499 alpha: 255 [ff] [f] ***************
RGBDEF( 236, 216, 150 ), // index: 126 [7e] color: #ecd896 alpha: 255 [ff] [f] ***************
RGBDEF( 197, 167, 194 ), // index: 127 [7f] color: #c5a7c2 alpha: 255 [ff] [f] ***************
RGBDEF( 34, 34, 229 ), // index: 128 [80] color: #2222e5 alpha: 255 [ff] [f] ***************
RGBDEF( 229, 34, 34 ), // index: 129 [81] color: #e52222 alpha: 255 [ff] [f] ***************
RGBDEF( 229, 34, 228 ), // index: 130 [82] color: #e522e4 alpha: 255 [ff] [f] ***************
RGBDEF( 34, 229, 34 ), // index: 131 [83] color: #22e522 alpha: 255 [ff] [f] ***************
RGBDEF( 34, 228, 229 ), // index: 132 [84] color: #22e4e5 alpha: 255 [ff] [f] ***************
RGBDEF( 228, 229, 34 ), // index: 133 [85] color: #e4e522 alpha: 255 [ff] [f] ***************
RGBDEF( 34, 150, 229 ), // index: 134 [86] color: #2296e5 alpha: 255 [ff] [f] ***************
RGBDEF( 229, 150, 34 ), // index: 135 [87] color: #e59622 alpha: 255 [ff] [f] ***************
RGBDEF( 229, 34, 150 ), // index: 136 [88] color: #e52296 alpha: 255 [ff] [f] ***************
RGBDEF( 219, 184, 157 ), // index: 137 [89] color: #dbb89d alpha: 255 [ff] [f] ***************
RGBDEF( 189, 198, 208 ), // index: 138 [8a] color: #bdc6d0 alpha: 255 [ff] [f] ***************
RGBDEF( 163, 212, 135 ), // index: 139 [8b] color: #a3d487 alpha: 255 [ff] [f] ***************
RGBDEF( 151, 172, 195 ), // index: 140 [8c] color: #97acc3 alpha: 255 [ff] [f] ***************
RGBDEF( 217, 153, 122 ), // index: 141 [8d] color: #d9997a alpha: 255 [ff] [f] ***************
RGBDEF( 217, 194, 118 ), // index: 142 [8e] color: #d9c276 alpha: 255 [ff] [f] ***************
RGBDEF( 172, 138, 169 ), // index: 143 [8f] color: #ac8aa9 alpha: 255 [ff] [f] ***************
RGBDEF( 25, 25, 168 ), // index: 144 [90] color: #1919a8 alpha: 255 [ff] [f] ***************
RGBDEF( 168, 25, 25 ), // index: 145 [91] color: #a81919 alpha: 255 [ff] [f] ***************
RGBDEF( 168, 25, 167 ), // index: 146 [92] color: #a819a7 alpha: 255 [ff] [f] ***************
RGBDEF( 25, 168, 25 ), // index: 147 [93] color: #19a819 alpha: 255 [ff] [f] ***************
RGBDEF( 25, 167, 168 ), // index: 148 [94] color: #19a7a8 alpha: 255 [ff] [f] ***************
RGBDEF( 167, 168, 25 ), // index: 149 [95] color: #a7a819 alpha: 255 [ff] [f] ***************
RGBDEF( 25, 110, 168 ), // index: 150 [96] color: #196ea8 alpha: 255 [ff] [f] ***************
RGBDEF( 168, 110, 25 ), // index: 151 [97] color: #a86e19 alpha: 255 [ff] [f] ***************
RGBDEF( 168, 25, 110 ), // index: 152 [98] color: #a8196e alpha: 255 [ff] [f] ***************
RGBDEF( 160, 135, 115 ), // index: 153 [99] color: #a08773 alpha: 255 [ff] [f] ***************
RGBDEF( 138, 145, 152 ), // index: 154 [9a] color: #8a9198 alpha: 255 [ff] [f] ***************
RGBDEF( 119, 155, 99 ), // index: 155 [9b] color: #779b63 alpha: 255 [ff] [f] ***************
RGBDEF( 111, 126, 143 ), // index: 156 [9c] color: #6f7e8f alpha: 255 [ff] [f] ***************
RGBDEF( 159, 112, 89 ), // index: 157 [9d] color: #9f7059 alpha: 255 [ff] [f] ***************
RGBDEF( 159, 142, 86 ), // index: 158 [9e] color: #9f8e56 alpha: 255 [ff] [f] ***************
RGBDEF( 126, 101, 124 ), // index: 159 [9f] color: #7e657c alpha: 255 [ff] [f] ***************
RGBDEF( 16, 16, 111 ), // index: 160 [a0] color: #10106f alpha: 255 [ff] [f] ***************
RGBDEF( 111, 16, 16 ), // index: 161 [a1] color: #6f1010 alpha: 255 [ff] [f] ***************
RGBDEF( 111, 16, 110 ), // index: 162 [a2] color: #6f106e alpha: 255 [ff] [f] ***************
RGBDEF( 16, 111, 16 ), // index: 163 [a3] color: #106f10 alpha: 255 [ff] [f] ***************
RGBDEF( 16, 110, 111 ), // index: 164 [a4] color: #106e6f alpha: 255 [ff] [f] ***************
RGBDEF( 110, 111, 16 ), // index: 165 [a5] color: #6e6f10 alpha: 255 [ff] [f] ***************
RGBDEF( 16, 73, 111 ), // index: 166 [a6] color: #10496f alpha: 255 [ff] [f] ***************
RGBDEF( 111, 73, 16 ), // index: 167 [a7] color: #6f4910 alpha: 255 [ff] [f] ***************
RGBDEF( 111, 16, 73 ), // index: 168 [a8] color: #6f1049 alpha: 255 [ff] [f] ***************
RGBDEF( 107, 89, 77 ), // index: 169 [a9] color: #6b594d alpha: 255 [ff] [f] ***************
RGBDEF( 92, 96, 101 ), // index: 170 [aa] color: #5c6065 alpha: 255 [ff] [f] ***************
RGBDEF( 79, 103, 66 ), // index: 171 [ab] color: #4f6742 alpha: 255 [ff] [f] ***************
RGBDEF( 73, 84, 95 ), // index: 172 [ac] color: #49545f alpha: 255 [ff] [f] ***************
RGBDEF( 106, 74, 59 ), // index: 173 [ad] color: #6a4a3b alpha: 255 [ff] [f] ***************
RGBDEF( 106, 94, 57 ), // index: 174 [ae] color: #6a5e39 alpha: 255 [ff] [f] ***************
RGBDEF( 84, 67, 82 ), // index: 175 [af] color: #544352 alpha: 255 [ff] [f] ***************
RGBDEF( 11, 11, 72 ), // index: 176 [b0] color: #0b0b48 alpha: 255 [ff] [f] ***************
RGBDEF( 72, 11, 11 ), // index: 177 [b1] color: #480b0b alpha: 255 [ff] [f] ***************
RGBDEF( 72, 11, 72 ), // index: 178 [b2] color: #480b48 alpha: 255 [ff] [f] ***************
RGBDEF( 11, 72, 11 ), // index: 179 [b3] color: #0b480b alpha: 255 [ff] [f] ***************
RGBDEF( 11, 72, 72 ), // index: 180 [b4] color: #0b4848 alpha: 255 [ff] [f] ***************
RGBDEF( 72, 72, 11 ), // index: 181 [b5] color: #48480b alpha: 255 [ff] [f] ***************
RGBDEF( 11, 47, 72 ), // index: 182 [b6] color: #0b2f48 alpha: 255 [ff] [f] ***************
RGBDEF( 72, 47, 11 ), // index: 183 [b7] color: #482f0b alpha: 255 [ff] [f] ***************
RGBDEF( 72, 11, 47 ), // index: 184 [b8] color: #480b2f alpha: 255 [ff] [f] ***************
RGBDEF( 69, 58, 50 ), // index: 185 [b9] color: #453a32 alpha: 255 [ff] [f] ***************
RGBDEF( 60, 63, 66 ), // index: 186 [ba] color: #3c3f42 alpha: 255 [ff] [f] ***************
RGBDEF( 52, 67, 43 ), // index: 187 [bb] color: #34432b alpha: 255 [ff] [f] ***************
RGBDEF( 47, 55, 62 ), // index: 188 [bc] color: #2f373e alpha: 255 [ff] [f] ***************
RGBDEF( 69, 48, 38 ), // index: 189 [bd] color: #453026 alpha: 255 [ff] [f] ***************
RGBDEF( 69, 61, 37 ), // index: 190 [be] color: #453d25 alpha: 255 [ff] [f] ***************
RGBDEF( 55, 44, 54 ), // index: 191 [bf] color: #372c36 alpha: 255 [ff] [f] ***************
RGBDEF( 8, 8, 52 ), // index: 192 [c0] color: #080834 alpha: 255 [ff] [f] ***************
RGBDEF( 52, 8, 8 ), // index: 193 [c1] color: #340808 alpha: 255 [ff] [f] ***************
RGBDEF( 52, 8, 51 ), // index: 194 [c2] color: #340833 alpha: 255 [ff] [f] ***************
RGBDEF( 8, 52, 8 ), // index: 195 [c3] color: #083408 alpha: 255 [ff] [f] ***************
RGBDEF( 8, 51, 52 ), // index: 196 [c4] color: #083334 alpha: 255 [ff] [f] ***************
RGBDEF( 51, 52, 8 ), // index: 197 [c5] color: #333408 alpha: 255 [ff] [f] ***************
RGBDEF( 8, 34, 52 ), // index: 198 [c6] color: #082234 alpha: 255 [ff] [f] ***************
RGBDEF( 52, 34, 8 ), // index: 199 [c7] color: #342208 alpha: 255 [ff] [f] ***************
RGBDEF( 52, 8, 34 ), // index: 200 [c8] color: #340822 alpha: 255 [ff] [f] ***************
RGBDEF( 50, 42, 36 ), // index: 201 [c9] color: #322a24 alpha: 255 [ff] [f] ***************
RGBDEF( 43, 45, 47 ), // index: 202 [ca] color: #2b2d2f alpha: 255 [ff] [f] ***************
RGBDEF( 37, 48, 30 ), // index: 203 [cb] color: #25301e alpha: 255 [ff] [f] ***************
RGBDEF( 34, 39, 44 ), // index: 204 [cc] color: #22272c alpha: 255 [ff] [f] ***************
RGBDEF( 49, 35, 28 ), // index: 205 [cd] color: #31231c alpha: 255 [ff] [f] ***************
RGBDEF( 49, 44, 27 ), // index: 206 [ce] color: #312c1b alpha: 255 [ff] [f] ***************
RGBDEF( 39, 31, 38 ), // index: 207 [cf] color: #271f26 alpha: 255 [ff] [f] ***************
RGBDEF( 27, 27, 183 ), // index: 208 [d0] color: #1b1bb7 alpha: 128 [80] [8] ********.......
RGBDEF( 183, 27, 27 ), // index: 209 [d1] color: #b71b1b alpha: 128 [80] [8] ********.......
RGBDEF( 183, 27, 182 ), // index: 210 [d2] color: #b71bb6 alpha: 128 [80] [8] ********.......
RGBDEF( 27, 183, 27 ), // index: 211 [d3] color: #1bb71b alpha: 128 [80] [8] ********.......
RGBDEF( 27, 182, 183 ), // index: 212 [d4] color: #1bb6b7 alpha: 128 [80] [8] ********.......
RGBDEF( 182, 183, 27 ), // index: 213 [d5] color: #b6b71b alpha: 128 [80] [8] ********.......
RGBDEF( 27, 120, 183 ), // index: 214 [d6] color: #1b78b7 alpha: 128 [80] [8] ********.......
RGBDEF( 183, 120, 27 ), // index: 215 [d7] color: #b7781b alpha: 128 [80] [8] ********.......
RGBDEF( 183, 27, 120 ), // index: 216 [d8] color: #b71b78 alpha: 128 [80] [8] ********.......
RGBDEF( 175, 147, 126 ), // index: 217 [d9] color: #af937e alpha: 128 [80] [8] ********.......
RGBDEF( 151, 158, 166 ), // index: 218 [da] color: #979ea6 alpha: 128 [80] [8] ********.......
RGBDEF( 130, 169, 108 ), // index: 219 [db] color: #82a96c alpha: 128 [80] [8] ********.......
RGBDEF( 121, 138, 156 ), // index: 220 [dc] color: #798a9c alpha: 128 [80] [8] ********.......
RGBDEF( 174, 122, 97 ), // index: 221 [dd] color: #ae7a61 alpha: 128 [80] [8] ********.......
RGBDEF( 174, 155, 94 ), // index: 222 [de] color: #ae9b5e alpha: 128 [80] [8] ********.......
RGBDEF( 138, 110, 135 ), // index: 223 [df] color: #8a6e87 alpha: 128 [80] [8] ********.......
RGBDEF( 41, 98, 65 ), // index: 224 [e0] color: #296241 alpha: 255 [ff] [f] ***************
RGBDEF( 90, 27, 125 ), // index: 225 [e1] color: #5a1b7d alpha: 255 [ff] [f] ***************
RGBDEF( 233, 133, 9 ), // index: 226 [e2] color: #e98509 alpha: 255 [ff] [f] ***************
RGBDEF( 46, 184, 111 ), // index: 227 [e3] color: #2eb86f alpha: 255 [ff] [f] ***************
RGBDEF( 27, 65, 152 ), // index: 228 [e4] color: #1b4198 alpha: 255 [ff] [f] ***************
RGBDEF( 220, 71, 30 ), // index: 229 [e5] color: #dc471e alpha: 255 [ff] [f] ***************
RGBDEF( 198, 71, 171 ), // index: 230 [e6] color: #c647ab alpha: 255 [ff] [f] ***************
RGBDEF( 106, 71, 171 ), // index: 231 [e7] color: #6a47ab alpha: 255 [ff] [f] ***************
RGBDEF( 79, 122, 214 ), // index: 232 [e8] color: #4f7ad6 alpha: 255 [ff] [f] ***************
RGBDEF( 214, 149, 95 ), // index: 233 [e9] color: #d6955f alpha: 255 [ff] [f] ***************
RGBDEF( 128, 149, 174 ), // index: 234 [ea] color: #8095ae alpha: 255 [ff] [f] ***************
RGBDEF( 128, 195, 174 ), // index: 235 [eb] color: #80c3ae alpha: 255 [ff] [f] ***************
RGBDEF( 76, 114, 146 ), // index: 236 [ec] color: #4c7292 alpha: 255 [ff] [f] ***************
RGBDEF( 179, 68, 65 ), // index: 237 [ed] color: #b34441 alpha: 255 [ff] [f] ***************
RGBDEF( 179, 255, 0 ), // index: 238 [ee] color: #b3ff00 alpha: 255 [ff] [f] ***************
RGBDEF( 247, 130, 100 ), // index: 239 [ef] color: #f78264 alpha: 255 [ff] [f] ***************
RGBDEF( 100, 57, 30 ), // index: 240 [f0] color: #64391e alpha: 255 [ff] [f] ***************
RGBDEF( 237, 196, 5 ), // index: 241 [f1] color: #edc405 alpha: 064 [40] [4] ****...........
RGBDEF( 237, 196, 5 ), // index: 242 [f2] color: #edc405 alpha: 128 [80] [8] ********.......
RGBDEF( 237, 196, 5 ), // index: 243 [f3] color: #edc405 alpha: 191 [bf] [b] ***********....
RGBDEF( 237, 196, 5 ), // index: 244 [f4] color: #edc405 alpha: 255 [ff] [f] ***************
RGBDEF( 255, 255, 255 ), // index: 245 [f5] color: #ffffff alpha: 064 [40] [4] ****...........
RGBDEF( 255, 255, 255 ), // index: 246 [f6] color: #ffffff alpha: 128 [80] [8] ********.......
RGBDEF( 255, 255, 255 ), // index: 247 [f7] color: #ffffff alpha: 191 [bf] [b] ***********....
RGBDEF( 0, 0, 0 ), // index: 248 [f8] color: #000000 alpha: 191 [bf] [b] ***********....
RGBDEF( 0, 0, 0 ), // index: 249 [f9] color: #000000 alpha: 128 [80] [8] ********.......
RGBDEF( 0, 0, 0 ), // index: 250 [fa] color: #000000 alpha: 064 [40] [4] ****...........
RGBDEF( 0, 0, 0 ), // index: 251 [fb] color: #000000 alpha: 102 [66] [6] ******.........
RGBDEF( 0, 0, 0 ), // index: 252 [fc] color: #000000 alpha: 255 [ff] [f] ***************
RGBDEF( 249, 162, 57 ), // index: 253 [fd] color: #f9a239 alpha: 255 [ff] [f] ***************
RGBDEF( 0, 0, 0 ), // index: 254 [fe] color: #000000 alpha: 143 [8f] [8] ********.......
RGBDEF( 255, 255, 255 ), // index: 255 [ff] color: #ffffff alpha: 255 [ff] [f] ***************

// KiSS DVD player color palette for use with Quasar OSD
// This file generated by ppcon.php (Sonny Windstrup) 1 Apr 2003

Appendix D : System Variables

System variables are retrieved in TEXT and GOTO references using the following syntax: $$VARNAME$$. Example:

<TEXT coords=”120,100” pen=”255” font=”0”> $$MP3_Title$$ </TEXT>

The above example prints the current title obtained from ID3 stream data during MP3 playback. When used together with ONMETADATA event action block, can be used to render a dynamically updating media playback status area.

DP-500 / DP-508


Label

Description

$$MP3_BitRate$$

Most recent bitrate data from ID3 metadata MP3 stream parser

$$MP3_URL$$

Most recent URL from ID3 metadata MP3 stream parser

$$MP3_Genre$$

Most recent genre data from ID3 metadata MP3 stream parser

$$MP3_Title$$

Most recent titledata from ID3 metadata MP3 stream parser

$$FirmwareVersion$$

Firmware version (ex. 2.7.1)

$$PlayerID$$

12-digit player ID

$$PlayerType$$

Model number : DP-500, DP-508, etc.



Appendix E : System Calls

System calls can be used to control player parameters and spawn non-KML local applications. See KML command reference for SYSTEM syntax.

DP-500 / DP-508


(Complete table of system calls to be inserted here)