set (autostart ${PLUGIN_COBALT_AUTOSTART})
set (preconditions Platform Graphics Internet)
set (resumed false)

if(PLUGIN_COBALT_PERSISTENTPATHPOSTFIX)
  set(persistentpathpostfix ${PLUGIN_COBALT_PERSISTENTPATHPOSTFIX})
endif()

map()
    kv(outofprocess ${PLUGIN_COBALT_OUTOFPROCESS})
end()
ans(rootobject)

map()
    kv(url "https://www.youtube.com/tv")
    if(PLUGIN_COBALT_CLIENTIDENTIFIER)
        kv(clientidentifier ${PLUGIN_COBALT_CLIENTIDENTIFIER})
    endif()
    if(PLUGIN_COBALT_LANGUAGE)
        kv(language ${PLUGIN_COBALT_LANGUAGE})
    endif()
    if(PLUGIN_COBALT_CONTENT_DIR)
        kv(contentdir ${PLUGIN_COBALT_CONTENT_DIR})
    endif()
    if(PLUGIN_COBALT_PRELOAD)
        kv(preload ${PLUGIN_COBALT_PRELOAD})
    endif()
    if(PLUGIN_COBALT_CLOSUREPOLICY)
        kv(closurepolicy ${PLUGIN_COBALT_CLOSUREPOLICY})
    endif()
end()
ans(configuration)

map()
    if(PLUGIN_COBALT_PROP_MODELNAME)
        kv(modelname "${PLUGIN_COBALT_PROP_MODELNAME}")
    endif()
    if(PLUGIN_COBALT_PROP_BRANDNAME)
        kv(brandname "${PLUGIN_COBALT_PROP_BRANDNAME}")
    endif()
    if(PLUGIN_COBALT_PROP_MODELYEAR)
        kv(modelyear "${PLUGIN_COBALT_PROP_MODELYEAR}")
    endif()
    if(PLUGIN_COBALT_PROP_CHIPSETMODELNUMBER)
        kv(chipsetmodelnumber "${PLUGIN_COBALT_PROP_CHIPSETMODELNUMBER}")
    endif()
    if(PLUGIN_COBALT_PROP_FIRMWAREVERSION)
        kv(firmwareversion "${PLUGIN_COBALT_PROP_FIRMWAREVERSION}")
    endif()
    if(PLUGIN_COBALT_PROP_INTEGRATORNAME)
        kv(integratorname "${PLUGIN_COBALT_PROP_INTEGRATORNAME}")
    endif()
    if(PLUGIN_COBALT_PROP_FRIENDLYNAME)
        kv(friendlyname "${PLUGIN_COBALT_PROP_FRIENDLYNAME}")
    endif()
    if(PLUGIN_COBALT_PROP_DEVICETYPE)
        kv(devicetype "${PLUGIN_COBALT_PROP_DEVICETYPE}")
    endif()
end()
ans(systemproperties)

map_isempty(${systemproperties})
ans(systemproperties_isempty)
if (NOT systemproperties_isempty)
  map_append(${configuration} systemproperties ${systemproperties})
endif()

map_append(${configuration} root ${rootobject})
