<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n for(var n in doc.chapters)\n {\n var chapter = doc.chapters[n];\n emit([doc.episode, doc.user], chapter);\n }\n }\n}">>,
nil,[],[]},
{view,10,0,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n for(var n=doc.actions.length-1; n>=0; n--)\n {\n var action = doc.actions[n];\n if(action.action == \"play\")\n {\n var day = action.timestamp.slice(0, 10);\n emit([doc.episode, day], doc.user);\n return;\n }\n }\n }\n}">>,
nil,
[{<<"listeners_by_episode">>,<<"_count">>}],
[]},
{view,11,0,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n for(var n=doc.actions.length-1; n>=0; n--)\n {\n var action = doc.actions[n];\n if(action.action == \"play\")\n {\n var day = action.timestamp.slice(0, 10);\n emit([doc.podcast, day], doc.user);\n return;\n }\n }\n }\n}">>,
nil,
[{<<"listeners_by_podcast">>,
<<"function (keys, values, rereduce)\n{\n function unique(arr) {\n var a = [];\n var l = arr.length;\n for(var i=0; i<l; i++) {\n for(var j=i+1; j<l; j++) {\n if (arr[i] === arr[j])\n j = ++i;\n }\n a.push(arr[i]);\n }\n return a;\n };\n\n if (rereduce)\n {\n return sum(values)\n }\n {\n /* We count one per user, not per play-event */\n val = unique(values);\n return val.length;\n }\n}">>}],
<<"function (keys, values, rereduce)\n{\n function unique(arr) {\n var a = [];\n var l = arr.length;\n for(var i=0; i<l; i++) {\n for(var j=i+1; j<l; j++) {\n if (arr[i] === arr[j])\n j = ++i;\n }\n a.push(arr[i]);\n }\n return a;\n };\n\n if (rereduce)\n {\n return sum(values)\n }\n {\n /* We count one per user, not per play-event */\n val = unique(values);\n return val.length;\n }\n}">>}],
[]},
{view,13,0,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n if(doc.actions == null || doc.actions.length == 0)\n {\n return;\n }\n\n function sortByStarted(a, b)\n {\n var x = a.started;\n var y = b.started;\n return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n }\n\n function hasTimeValues(action)\n {\n return ((action != null) && (action.started != null) && (action.playmark != null));\n }\n\n var actions = doc.actions.slice(0); // creates a copy\n actions = actions.filter(hasTimeValues);\n actions.sort(sortByStarted);\n\n var played_parts = [];\n var flat_date = null;\n\n for(var n in actions)\n {\n var action = actions[n];\n\n if(flat_date == null)\n {\n flat_date = {start: action.started, end: action.playmark};\n played_parts.push(flat_date);\n continue;\n }\n\n if(action.started <= flat_date.end && action.playmark >= flat_date.end)\n {\n flat_date.end = action.playmark;\n }\n else if(action.started >= flat_date.start && action.playmark <= flat_date.end)\n {\n // part already contained\n continue;\n }\n else\n {\n flat_date = {start: action.started, end: action.playmark};\n played_parts.push(flat_date);\n }\n }\n\n if (played_parts.length == 0)\n {\n return;\n }\n\n var sections = [];\n for(var n in played_parts)\n {\n var part = played_parts[n];\n sections.push(part.start);\n sections.push(part.end);\n }\n\n emit([doc.podcast, doc.episode, doc.user], sections);\n }\n}">>,
nil,
[{<<"episode_heatmap">>,
<<"function (keys, values, rereduce)\n{\n function unique(arr) {\n var a = [];\n var l = arr.length;\n for(var i=0; i<l; i++) {\n for(var j=i+1; j<l; j++) {\n if (arr[i] === arr[j])\n j = ++i;\n }\n a.push(arr[i]);\n }\n return a;\n };\n\n function flatten(arr)\n {\n var flattened = []\n for(var n in arr)\n {\n for(var x in arr[n])\n {\n flattened.push(arr[n][x]);\n }\n }\n return flattened\n };\n\n function sortNumerical(a, b)\n {\n if(a < b)\n {\n return -1;\n }\n else if (a > b)\n {\n return 1;\n }\n else\n {\n return 0;\n }\n };\n\n function mergeBorders(borders, maxBorders)\n {\n last = null;\n newBorders = [];\n\n lastBorder = borders[borders.length-1];\n minDist = lastBorder / maxBorders;\n\n for(var n in borders)\n {\n border = borders[n];\n\n if(last == null)\n {\n }\n else if (border == lastBorder)\n {\n }\n else if ((border - last) < minDist)\n {\n continue;\n }\n\n newBorders.push(border);\n last = border;\n }\n\n return newBorders;\n };\n\n var all_borders = [];\n\n if (rereduce)\n {\n for(var n in values)\n {\n all_borders.push(values[n].borders);\n }\n }\n else\n {\n all_borders = values;\n }\n\n var borders = flatten(all_borders);\n borders = unique(borders);\n borders.sort(sortNumerical);\n borders = mergeBorders(borders, 50);\n\n var heatmap = [];\n\n for(var n=0; n<borders.length-1; n++)\n {\n heatmap.push(0);\n }\n\n for(var n in values)\n {\n j = 0;\n var length = 0;\n var increment = 1;\n\n if(rereduce)\n {\n length = values[n].borders.length-1;\n increment = 1;\n }\n else\n {\n length = values[n].length;\n increment = 2;\n }\n\n\n for(var i=0; i<length; i+=increment)\n {\n var from = 0;\n var until = 0;\n\n if(rereduce)\n {\n from = values[n].borders[i];\n until = values[n].borders[i+1];\n }\n else\n {\n from = values[n][i];\n until = values[n][i+1];\n }\n\n while(borders[j] < from)\n {\n j++;\n }\n\n while(borders[j] < until)\n {\n if(rereduce)\n {\n heatmap[j++] += values[n].heatmap[i];\n }\n else\n {\n heatmap[j++] += 1;\n }\n }\n }\n }\n\n return {heatmap: heatmap, borders: borders};\n}">>}],
<<"function(doc)\n{\n if(doc.doc_type == \"PodcastUserState\")\n {\n var affected_devices = [];\n\n for(var n in doc.actions)\n {\n var action = doc.actions[n];\n if (affected_devices.indexOf(action.device) == -1)\n {\n affected_devices.push(action.device);\n }\n }\n\n for(var n in affected_devices)\n {\n var device = affected_devices[n];\n\n emit([device, doc.podcast], null);\n }\n }\n}">>,
nil,[],[]},
{view,18,0,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"PodcastUserState\")\n {\n var subscribed_devices = [];\n\n for(var n in doc.actions)\n {\n var action = doc.actions[n];\n\n if(action.action == \"subscribe\")\n {\n subscribed_devices.push(action.device);\n }\n else\n {\n var index = subscribed_devices.indexOf(action.device);\n subscribed_devices.splice(index, 1);\n }\n }\n\n for(var n in subscribed_devices)\n {\n var device = subscribed_devices[n];\n\n if(doc.disabled_devices && (doc.disabled_devices.indexOf(device) > -1))\n {\n continue;\n }\n\n\n if(doc.settings == null || doc.settings.public_subscription == null)\n {\n var is_public = true;\n }\n else\n {\n var is_public = doc.settings.public_subscription;\n }\n\n emit([doc.user, is_public, doc.podcast, device], null);\n }\n }\n}">>,
nil,
[{<<"subscribed_podcasts_by_user">>,
<<"_count">>}],
[]},
{view,19,0,0,
[<<"subscribed_podcasts_by_device">>],
<<"function(doc)\n{\n if(doc.doc_type == \"PodcastUserState\")\n {\n var subscribed_devices = [];\n\n for(var n in doc.actions)\n {\n var action = doc.actions[n];\n\n if(action.action == \"subscribe\")\n {\n subscribed_devices.push(action.device);\n }\n else\n {\n var index = subscribed_devices.indexOf(action.device);\n subscribed_devices.splice(index, 1);\n }\n }\n\n for(var n in subscribed_devices)\n {\n var device = subscribed_devices[n];\n\n if(doc.disabled_devices && (doc.disabled_devices.indexOf(device) > -1))\n {\n continue;\n }\n\n emit([device, doc.podcast], null);\n }\n }\n}">>,
nil,[],[]},
{view,20,0,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"PodcastUserState\")\n {\n var subscribed_devices = [];\n\n for(var n in doc.actions)\n {\n var action = doc.actions[n];\n\n if(action.action == \"subscribe\")\n {\n subscribed_devices.push(action.device);\n }\n else\n {\n var index = subscribed_devices.indexOf(action.device);\n subscribed_devices.splice(index, 1);\n }\n }\n\n for(var n in subscribed_devices)\n {\n var device = subscribed_devices[n];\n\n if(doc.disabled_devices && (doc.disabled_devices.indexOf(device) > -1))\n {\n continue;\n }\n\n emit([doc.podcast, doc.user, device], null);\n }\n }\n}">>,
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n for(var n in doc.chapters)\n {\n var chapter = doc.chapters[n];\n emit([doc.episode, doc.user], chapter);\n }\n }\n}">>,
{btree,<0.165.0>,
{65286549651,{253,[]},13900},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[],[]},
{view,10,154765459,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n for(var n=doc.actions.length-1; n>=0; n--)\n {\n var action = doc.actions[n];\n if(action.action == \"play\")\n {\n var day = action.timestamp.slice(0, 10);\n emit([doc.episode, day], doc.user);\n return;\n }\n }\n }\n}">>,
{btree,<0.165.0>,
{174515602943,{2882075,[2882075]},199075115},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[{<<"listeners_by_episode">>,<<"_count">>}],
[]},
{view,11,154765459,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n for(var n=doc.actions.length-1; n>=0; n--)\n {\n var action = doc.actions[n];\n if(action.action == \"play\")\n {\n var day = action.timestamp.slice(0, 10);\n emit([doc.podcast, day], doc.user);\n return;\n }\n }\n }\n}">>,
{btree,<0.165.0>,
{174515607726,{2882075,[745247]},160815714},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[{<<"listeners_by_podcast">>,
<<"function (keys, values, rereduce)\n{\n function unique(arr) {\n var a = [];\n var l = arr.length;\n for(var i=0; i<l; i++) {\n for(var j=i+1; j<l; j++) {\n if (arr[i] === arr[j])\n j = ++i;\n }\n a.push(arr[i]);\n }\n return a;\n };\n\n if (rereduce)\n {\n return sum(values)\n }\n {\n /* We count one per user, not per play-event */\n val = unique(values);\n return val.length;\n }\n}">>}],
<<"function (keys, values, rereduce)\n{\n function unique(arr) {\n var a = [];\n var l = arr.length;\n for(var i=0; i<l; i++) {\n for(var j=i+1; j<l; j++) {\n if (arr[i] === arr[j])\n j = ++i;\n }\n a.push(arr[i]);\n }\n return a;\n };\n\n if (rereduce)\n {\n return sum(values)\n }\n {\n /* We count one per user, not per play-event */\n val = unique(values);\n return val.length;\n }\n}">>}],
[]},
{view,13,154765697,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n if(doc.actions == null || doc.actions.length == 0)\n {\n return;\n }\n\n function sortByStarted(a, b)\n {\n var x = a.started;\n var y = b.started;\n return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n }\n\n function hasTimeValues(action)\n {\n return ((action != null) && (action.started != null) && (action.playmark != null));\n }\n\n var actions = doc.actions.slice(0); // creates a copy\n actions = actions.filter(hasTimeValues);\n actions.sort(sortByStarted);\n\n var played_parts = [];\n var flat_date = null;\n\n for(var n in actions)\n {\n var action = actions[n];\n\n if(flat_date == null)\n {\n flat_date = {start: action.started, end: action.playmark};\n played_parts.push(flat_date);\n continue;\n }\n\n if(action.started <= flat_date.end && action.playmark >= flat_date.end)\n {\n flat_date.end = action.playmark;\n }\n else if(action.started >= flat_date.start && action.playmark <= flat_date.end)\n {\n // part already contained\n continue;\n }\n else\n {\n flat_date = {start: action.started, end: action.playmark};\n played_parts.push(flat_date);\n }\n }\n\n if (played_parts.length == 0)\n {\n return;\n }\n\n var sections = [];\n for(var n in played_parts)\n {\n var part = played_parts[n];\n sections.push(part.start);\n sections.push(part.end);\n }\n\n emit([doc.podcast, doc.episode, doc.user], sections);\n }\n}">>,
{btree,<0.165.0>,
{174516182266,
{710222,
[{[{<<"heatmap">>,
[502747,472976,420462,394372,378930,367863,
278749,260118,226577,197559,142217,114262,
17976]},
{<<"borders">>,
[0,53893900,55948338,59075545,61846547,
64402477,68750666,80158983,83051922,
86398351,90634192,96316257,99695977,
102195099]}]}]},
76966115},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[{<<"episode_heatmap">>,
<<"function (keys, values, rereduce)\n{\n function unique(arr) {\n var a = [];\n var l = arr.length;\n for(var i=0; i<l; i++) {\n for(var j=i+1; j<l; j++) {\n if (arr[i] === arr[j])\n j = ++i;\n }\n a.push(arr[i]);\n }\n return a;\n };\n\n function flatten(arr)\n {\n var flattened = []\n for(var n in arr)\n {\n for(var x in arr[n])\n {\n flattened.push(arr[n][x]);\n }\n }\n return flattened\n };\n\n function sortNumerical(a, b)\n {\n if(a < b)\n {\n return -1;\n }\n else if (a > b)\n {\n return 1;\n }\n else\n {\n return 0;\n }\n };\n\n function mergeBorders(borders, maxBorders)\n {\n last = null;\n newBorders = [];\n\n lastBorder = borders[borders.length-1];\n minDist = lastBorder / maxBorders;\n\n for(var n in borders)\n {\n border = borders[n];\n\n if(last == null)\n {\n }\n else if (border == lastBorder)\n {\n }\n else if ((border - last) < minDist)\n {\n continue;\n }\n\n newBorders.push(border);\n last = border;\n }\n\n return newBorders;\n };\n\n var all_borders = [];\n\n if (rereduce)\n {\n for(var n in values)\n {\n all_borders.push(values[n].borders);\n }\n }\n else\n {\n all_borders = values;\n }\n\n var borders = flatten(all_borders);\n borders = unique(borders);\n borders.sort(sortNumerical);\n borders = mergeBorders(borders, 50);\n\n var heatmap = [];\n\n for(var n=0; n<borders.length-1; n++)\n {\n heatmap.push(0);\n }\n\n for(var n in values)\n {\n j = 0;\n var length = 0;\n var increment = 1;\n\n if(rereduce)\n {\n length = values[n].borders.length-1;\n increment = 1;\n }\n else\n {\n length = values[n].length;\n increment = 2;\n }\n\n\n for(var i=0; i<length; i+=increment)\n {\n var from = 0;\n var until = 0;\n\n if(rereduce)\n {\n from = values[n].borders[i];\n until = values[n].borders[i+1];\n }\n else\n {\n from = values[n][i];\n until = values[n][i+1];\n }\n\n while(borders[j] < from)\n {\n j++;\n }\n\n while(borders[j] < until)\n {\n if(rereduce)\n {\n heatmap[j++] += values[n].heatmap[i];\n }\n else\n {\n heatmap[j++] += 1;\n }\n }\n }\n }\n\n return {heatmap: heatmap, borders: borders};\n}">>}],
<<"function(doc)\n{\n if(doc.doc_type == \"PodcastUserState\")\n {\n var affected_devices = [];\n\n for(var n in doc.actions)\n {\n var action = doc.actions[n];\n if (affected_devices.indexOf(action.device) == -1)\n {\n affected_devices.push(action.device);\n }\n }\n\n for(var n in affected_devices)\n {\n var device = affected_devices[n];\n\n emit([device, doc.podcast], null);\n }\n }\n}">>,
{btree,<0.165.0>,
{174505728883,{403564,[]},30533795},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[],[]},
{view,18,154765309,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"PodcastUserState\")\n {\n var subscribed_devices = [];\n\n for(var n in doc.actions)\n {\n var action = doc.actions[n];\n\n if(action.action == \"subscribe\")\n {\n subscribed_devices.push(action.device);\n }\n else\n {\n var index = subscribed_devices.indexOf(action.device);\n subscribed_devices.splice(index, 1);\n }\n }\n\n for(var n in subscribed_devices)\n {\n var device = subscribed_devices[n];\n\n if(doc.disabled_devices && (doc.disabled_devices.indexOf(device) > -1))\n {\n continue;\n }\n\n\n if(doc.settings == null || doc.settings.public_subscription == null)\n {\n var is_public = true;\n }\n else\n {\n var is_public = doc.settings.public_subscription;\n }\n\n emit([doc.user, is_public, doc.podcast, device], null);\n }\n }\n}">>,
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n for(var n in doc.chapters)\n {\n var chapter = doc.chapters[n];\n emit([doc.episode, doc.user], chapter);\n }\n }\n}">>,
{btree,<0.165.0>,
{65286549651,{253,[]},13900},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[],[]},
{view,10,154765459,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n for(var n=doc.actions.length-1; n>=0; n--)\n {\n var action = doc.actions[n];\n if(action.action == \"play\")\n {\n var day = action.timestamp.slice(0, 10);\n emit([doc.episode, day], doc.user);\n return;\n }\n }\n }\n}">>,
{btree,<0.165.0>,
{174515602943,{2882075,[2882075]},199075115},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[{<<"listeners_by_episode">>,<<"_count">>}],
[]},
{view,11,154765459,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n for(var n=doc.actions.length-1; n>=0; n--)\n {\n var action = doc.actions[n];\n if(action.action == \"play\")\n {\n var day = action.timestamp.slice(0, 10);\n emit([doc.podcast, day], doc.user);\n return;\n }\n }\n }\n}">>,
{btree,<0.165.0>,
{174515607726,{2882075,[745247]},160815714},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[{<<"listeners_by_podcast">>,
<<"function (keys, values, rereduce)\n{\n function unique(arr) {\n var a = [];\n var l = arr.length;\n for(var i=0; i<l; i++) {\n for(var j=i+1; j<l; j++) {\n if (arr[i] === arr[j])\n j = ++i;\n }\n a.push(arr[i]);\n }\n return a;\n };\n\n if (rereduce)\n {\n return sum(values)\n }\n {\n /* We count one per user, not per play-event */\n val = unique(values);\n return val.length;\n }\n}">>}],
<<"function (keys, values, rereduce)\n{\n function unique(arr) {\n var a = [];\n var l = arr.length;\n for(var i=0; i<l; i++) {\n for(var j=i+1; j<l; j++) {\n if (arr[i] === arr[j])\n j = ++i;\n }\n a.push(arr[i]);\n }\n return a;\n };\n\n if (rereduce)\n {\n return sum(values)\n }\n {\n /* We count one per user, not per play-event */\n val = unique(values);\n return val.length;\n }\n}">>}],
[]},
{view,13,154765697,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"EpisodeUserState\")\n {\n if(doc.actions == null || doc.actions.length == 0)\n {\n return;\n }\n\n function sortByStarted(a, b)\n {\n var x = a.started;\n var y = b.started;\n return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n }\n\n function hasTimeValues(action)\n {\n return ((action != null) && (action.started != null) && (action.playmark != null));\n }\n\n var actions = doc.actions.slice(0); // creates a copy\n actions = actions.filter(hasTimeValues);\n actions.sort(sortByStarted);\n\n var played_parts = [];\n var flat_date = null;\n\n for(var n in actions)\n {\n var action = actions[n];\n\n if(flat_date == null)\n {\n flat_date = {start: action.started, end: action.playmark};\n played_parts.push(flat_date);\n continue;\n }\n\n if(action.started <= flat_date.end && action.playmark >= flat_date.end)\n {\n flat_date.end = action.playmark;\n }\n else if(action.started >= flat_date.start && action.playmark <= flat_date.end)\n {\n // part already contained\n continue;\n }\n else\n {\n flat_date = {start: action.started, end: action.playmark};\n played_parts.push(flat_date);\n }\n }\n\n if (played_parts.length == 0)\n {\n return;\n }\n\n var sections = [];\n for(var n in played_parts)\n {\n var part = played_parts[n];\n sections.push(part.start);\n sections.push(part.end);\n }\n\n emit([doc.podcast, doc.episode, doc.user], sections);\n }\n}">>,
{btree,<0.165.0>,
{174516182266,
{710222,
[{[{<<"heatmap">>,
[502747,472976,420462,394372,378930,
367863,278749,260118,226577,197559,
142217,114262,17976]},
{<<"borders">>,
[0,53893900,55948338,59075545,61846547,
64402477,68750666,80158983,83051922,
86398351,90634192,96316257,99695977,
102195099]}]}]},
76966115},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[{<<"episode_heatmap">>,
<<"function (keys, values, rereduce)\n{\n function unique(arr) {\n var a = [];\n var l = arr.length;\n for(var i=0; i<l; i++) {\n for(var j=i+1; j<l; j++) {\n if (arr[i] === arr[j])\n j = ++i;\n }\n a.push(arr[i]);\n }\n return a;\n };\n\n function flatten(arr)\n {\n var flattened = []\n for(var n in arr)\n {\n for(var x in arr[n])\n {\n flattened.push(arr[n][x]);\n }\n }\n return flattened\n };\n\n function sortNumerical(a, b)\n {\n if(a < b)\n {\n return -1;\n }\n else if (a > b)\n {\n return 1;\n }\n else\n {\n return 0;\n }\n };\n\n function mergeBorders(borders, maxBorders)\n {\n last = null;\n newBorders = [];\n\n lastBorder = borders[borders.length-1];\n minDist = lastBorder / maxBorders;\n\n for(var n in borders)\n {\n border = borders[n];\n\n if(last == null)\n {\n }\n else if (border == lastBorder)\n {\n }\n else if ((border - last) < minDist)\n {\n continue;\n }\n\n newBorders.push(border);\n last = border;\n }\n\n return newBorders;\n };\n\n var all_borders = [];\n\n if (rereduce)\n {\n for(var n in values)\n {\n all_borders.push(values[n].borders);\n }\n }\n else\n {\n all_borders = values;\n }\n\n var borders = flatten(all_borders);\n borders = unique(borders);\n borders.sort(sortNumerical);\n borders = mergeBorders(borders, 50);\n\n var heatmap = [];\n\n for(var n=0; n<borders.length-1; n++)\n {\n heatmap.push(0);\n }\n\n for(var n in values)\n {\n j = 0;\n var length = 0;\n var increment = 1;\n\n if(rereduce)\n {\n length = values[n].borders.length-1;\n increment = 1;\n }\n else\n {\n length = values[n].length;\n increment = 2;\n }\n\n\n for(var i=0; i<length; i+=increment)\n {\n var from = 0;\n var until = 0;\n\n if(rereduce)\n {\n from = values[n].borders[i];\n until = values[n].borders[i+1];\n }\n else\n {\n from = values[n][i];\n until = values[n][i+1];\n }\n\n while(borders[j] < from)\n {\n j++;\n }\n\n while(borders[j] < until)\n {\n if(rereduce)\n {\n heatmap[j++] += values[n].heatmap[i];\n }\n else\n {\n heatmap[j++] += 1;\n }\n }\n }\n }\n\n return {heatmap: heatmap, borders: borders};\n}">>}],
<<"function(doc)\n{\n if(doc.doc_type == \"PodcastUserState\")\n {\n var affected_devices = [];\n\n for(var n in doc.actions)\n {\n var action = doc.actions[n];\n if (affected_devices.indexOf(action.device) == -1)\n {\n affected_devices.push(action.device);\n }\n }\n\n for(var n in affected_devices)\n {\n var device = affected_devices[n];\n\n emit([device, doc.podcast], null);\n }\n }\n}">>,
{btree,<0.165.0>,
{174505728883,{403564,[]},30533795},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[],[]},
{view,18,154765309,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"PodcastUserState\")\n {\n var subscribed_devices = [];\n\n for(var n in doc.actions)\n {\n var action = doc.actions[n];\n\n if(action.action == \"subscribe\")\n {\n subscribed_devices.push(action.device);\n }\n else\n {\n var index = subscribed_devices.indexOf(action.device);\n subscribed_devices.splice(index, 1);\n }\n }\n\n for(var n in subscribed_devices)\n {\n var device = subscribed_devices[n];\n\n if(doc.disabled_devices && (doc.disabled_devices.indexOf(device) > -1))\n {\n continue;\n }\n\n\n if(doc.settings == null || doc.settings.public_subscription == null)\n {\n var is_public = true;\n }\n else\n {\n var is_public = doc.settings.public_subscription;\n }\n\n emit([doc.user, is_public, doc.podcast, device], null);\n }\n }\n}">>,
{btree,<0.165.0>,
{174515117982,{299330,[299330]},26781332},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[{<<"subscribed_podcasts_by_user">>,
<<"_count">>}],
[]},
{view,19,154765309,0,
[<<"subscribed_podcasts_by_device">>],
<<"function(doc)\n{\n if(doc.doc_type == \"PodcastUserState\")\n {\n var subscribed_devices = [];\n\n for(var n in doc.actions)\n {\n var action = doc.actions[n];\n\n if(action.action == \"subscribe\")\n {\n subscribed_devices.push(action.device);\n }\n else\n {\n var index = subscribed_devices.indexOf(action.device);\n subscribed_devices.splice(index, 1);\n }\n }\n\n for(var n in subscribed_devices)\n {\n var device = subscribed_devices[n];\n\n if(doc.disabled_devices && (doc.disabled_devices.indexOf(device) > -1))\n {\n continue;\n }\n\n emit([device, doc.podcast], null);\n }\n }\n}">>,
{btree,<0.165.0>,
{174515121176,{299330,[]},22969037},
#Fun<couch_btree.3.71804109>,
#Fun<couch_btree.4.115144917>,
#Fun<couch_view.less_json_ids.2>,
#Fun<couch_view_group.10.26766604>,snappy},
[],[]},
{view,20,154765309,0,[],
<<"function(doc)\n{\n if(doc.doc_type == \"PodcastUserState\")\n {\n var subscribed_devices = [];\n\n for(var n in doc.actions)\n {\n var action = doc.actions[n];\n\n if(action.action == \"subscribe\")\n {\n subscribed_devices.push(action.device);\n }\n else\n {\n var index = subscribed_devices.indexOf(action.device);\n subscribed_devices.splice(index, 1);\n }\n }\n\n for(var n in subscribed_devices)\n {\n var device = subscribed_devices[n];\n\n if(doc.disabled_devices && (doc.disabled_devices.indexOf(device) > -1))\n {\n continue;\n }\n\n emit([doc.podcast, doc.user, device], null);\n }\n }\n}">>,