<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.geministation.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ADPLlua</id>
	<title>Module:DPLlua - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.geministation.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ADPLlua"/>
	<link rel="alternate" type="text/html" href="https://wiki.geministation.com/index.php?title=Module:DPLlua&amp;action=history"/>
	<updated>2026-06-04T05:15:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.geministation.com/index.php?title=Module:DPLlua&amp;diff=8863&amp;oldid=prev</id>
		<title>Banri at 01:30, 24 March 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.geministation.com/index.php?title=Module:DPLlua&amp;diff=8863&amp;oldid=prev"/>
		<updated>2021-03-24T01:30:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.geministation.com/index.php?title=Module:DPLlua&amp;amp;diff=8863&amp;amp;oldid=3777&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Banri</name></author>
	</entry>
	<entry>
		<id>https://wiki.geministation.com/index.php?title=Module:DPLlua&amp;diff=3777&amp;oldid=prev</id>
		<title>Banri: Created page with &quot;-- &lt;nowiki&gt; local dpl = {} local libraryUtil = require( &#039;libraryUtil&#039; ) local checkType = libraryUtil.checkType local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.geministation.com/index.php?title=Module:DPLlua&amp;diff=3777&amp;oldid=prev"/>
		<updated>2020-05-31T15:43:01Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-- &amp;lt;nowiki&amp;gt; local dpl = {} local libraryUtil = require( &amp;#039;libraryUtil&amp;#039; ) local checkType = libraryUtil.checkType local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
local dpl = {}&lt;br /&gt;
local libraryUtil = require( &amp;#039;libraryUtil&amp;#039; )&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg&lt;br /&gt;
&lt;br /&gt;
dpl.pipe = &amp;#039;¦&amp;#039;&lt;br /&gt;
local dataContentMarker = &amp;#039;`#@@#`&amp;#039;&lt;br /&gt;
local allIncludedParamNames = {}&lt;br /&gt;
&lt;br /&gt;
-- Custom function for splitting a string because mw.text.split() is waaay too slow&lt;br /&gt;
local function split( str, pattern, plain )&lt;br /&gt;
	local res = {}&lt;br /&gt;
	continue = true&lt;br /&gt;
	local startIndex = 1&lt;br /&gt;
&lt;br /&gt;
	while continue do&lt;br /&gt;
		local i, j = string.find( str, pattern, startIndex, plain )&lt;br /&gt;
		if i then&lt;br /&gt;
			table.insert( res, string.sub( str, startIndex, i-1 ) )&lt;br /&gt;
			startIndex = j + 1&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( res, string.sub( str, startIndex ) )&lt;br /&gt;
			continue = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Also custom function for speed&lt;br /&gt;
local function trim( str )&lt;br /&gt;
	return string.match( str, &amp;#039;^%s*(.-)%s*$&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local escapeChars = {&lt;br /&gt;
	[&amp;#039;{&amp;#039;] = &amp;#039;&amp;amp;#123;&amp;#039;,&lt;br /&gt;
	[&amp;#039;❴&amp;#039;] = &amp;#039;&amp;amp;#123;&amp;#039;, -- Wtf dpl...&lt;br /&gt;
	[&amp;#039;}&amp;#039;] = &amp;#039;&amp;amp;#125;&amp;#039;,&lt;br /&gt;
	[&amp;#039;❵&amp;#039;] = &amp;#039;&amp;amp;#125;&amp;#039;,&lt;br /&gt;
	[&amp;#039;[&amp;#039;] = &amp;#039;&amp;amp;#91;&amp;#039;,&lt;br /&gt;
	[&amp;#039;]&amp;#039;] = &amp;#039;&amp;amp;#93;&amp;#039;,&lt;br /&gt;
	[&amp;#039;|&amp;#039;] = &amp;#039;&amp;amp;#124;&amp;#039;,&lt;br /&gt;
	[&amp;#039;-&amp;#039;] = &amp;#039;&amp;amp;#8208;&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
local function escape( str )&lt;br /&gt;
	-- the \226\157\180\181 are used to match ❴ (U+2774) and ❵ (U+2775) wich are 3 bytes long (UTF-8) so&lt;br /&gt;
	-- we can&amp;#039;t use them directly inside [] patterns. Ustring would fix this but it&amp;#039;s way too slow.&lt;br /&gt;
	str = string.gsub( str, &amp;#039;[{}%[%]|%-]&amp;#039;, escapeChars ):gsub( &amp;#039;\226\157[\180\181]&amp;#039;, escapeChars )&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local unEscapeChars = {&lt;br /&gt;
	[&amp;#039;&amp;amp;#123;&amp;#039;] = &amp;#039;{&amp;#039;,&lt;br /&gt;
	[&amp;#039;&amp;amp;#125;&amp;#039;] = &amp;#039;}&amp;#039;,&lt;br /&gt;
	[&amp;#039;&amp;amp;#91;&amp;#039;] = &amp;#039;[&amp;#039;,&lt;br /&gt;
	[&amp;#039;&amp;amp;#93;&amp;#039;] = &amp;#039;]&amp;#039;,&lt;br /&gt;
	[&amp;#039;&amp;amp;#124;&amp;#039;] = &amp;#039;|&amp;#039;,&lt;br /&gt;
	[&amp;#039;&amp;amp;#8208;&amp;#039;] = &amp;#039;-&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
local function unEscape( str )&lt;br /&gt;
	str = string.gsub( str, &amp;#039;&amp;amp;#%d+;&amp;#039;, unEscapeChars )&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function removeFormattingSettings( query )&lt;br /&gt;
	local toRemove = {&lt;br /&gt;
		&amp;#039;mode&amp;#039;,&lt;br /&gt;
		&amp;#039;table&amp;#039;,&lt;br /&gt;
		&amp;#039;tablerow&amp;#039;,&lt;br /&gt;
		&amp;#039;tablesortcol&amp;#039;,&lt;br /&gt;
		&amp;#039;headingmode&amp;#039;,&lt;br /&gt;
		&amp;#039;headingcount&amp;#039;,&lt;br /&gt;
		&amp;#039;listattr&amp;#039;,&lt;br /&gt;
		&amp;#039;itemattr&amp;#039;,&lt;br /&gt;
		&amp;#039;hlistattr&amp;#039;,&lt;br /&gt;
		&amp;#039;hitemattr&amp;#039;,&lt;br /&gt;
		&amp;#039;userdateformat&amp;#039;,&lt;br /&gt;
		&amp;#039;shownamespace&amp;#039;,&lt;br /&gt;
		&amp;#039;escapelinks&amp;#039;,&lt;br /&gt;
		&amp;#039;titlemaxlength&amp;#039;,&lt;br /&gt;
		&amp;#039;replaceintitle&amp;#039;,&lt;br /&gt;
		&amp;#039;columns&amp;#039;,&lt;br /&gt;
		&amp;#039;rows&amp;#039;,&lt;br /&gt;
		&amp;#039;rowsize&amp;#039;,&lt;br /&gt;
		&amp;#039;rowcolformat&amp;#039;,&lt;br /&gt;
		&amp;#039;resultsheader&amp;#039;,&lt;br /&gt;
		&amp;#039;resultsfooter&amp;#039;,&lt;br /&gt;
		&amp;#039;oneresultheader&amp;#039;,&lt;br /&gt;
		&amp;#039;oneresultfooter&amp;#039;,&lt;br /&gt;
		&amp;#039;noresultsheader&amp;#039;,&lt;br /&gt;
		&amp;#039;suppresserrors&amp;#039;,&lt;br /&gt;
		&amp;#039;noresultsfooter&amp;#039;,&lt;br /&gt;
		&amp;#039;format&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for _, k in ipairs( toRemove ) do&lt;br /&gt;
		query[k] = nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatInclude( query )&lt;br /&gt;
	checkTypeForNamedArg( &amp;#039;include&amp;#039;, &amp;#039;Module:DPLlua.ask&amp;#039;, query, &amp;#039;string&amp;#039; )&lt;br /&gt;
	query = split( query, &amp;#039;,&amp;#039;, true )&lt;br /&gt;
	local includedParamNames = {}&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #query do&lt;br /&gt;
		if query[i]:match( &amp;#039;%b{}&amp;#039; ) then -- Check if we are including a template&lt;br /&gt;
			local templateName, params = query[i]:match( &amp;#039;{(.-)[¦|}]([^,]*)&amp;#039; )&lt;br /&gt;
			if params:find( &amp;#039;%S&amp;#039; ) then&lt;br /&gt;
				params:gsub( &amp;#039;^:%-&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
				query[i] = string.format( &amp;#039;{%s}%s&amp;#039;, templateName, params )&lt;br /&gt;
&lt;br /&gt;
				for param in params:gmatch( &amp;#039;:([^:]*)&amp;#039; ) do&lt;br /&gt;
					param = trim( param )&lt;br /&gt;
					table.insert( includedParamNames, { name=templateName, isTemplate=true, param=param } )&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
			else&lt;br /&gt;
				query[i] = string.format( &amp;#039;{%s¦DPLlua helper}&amp;#039;, templateName ) -- Use a helper template to get all the parameters of our included template&lt;br /&gt;
				table.insert( includedParamNames, { name=templateName, isTemplate=true, includeAll=true } )&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( includedParamNames, { name=trim( query[i] ) } )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat( query, &amp;#039;,&amp;#039; ), includedParamNames&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatDpl( query )&lt;br /&gt;
	local queries = {}&lt;br /&gt;
	local count = query.count or 500&lt;br /&gt;
	local offset = query.offset or 0&lt;br /&gt;
	local usesInclude = false&lt;br /&gt;
	local includedParamNames = {}&lt;br /&gt;
	query.count = nil&lt;br /&gt;
	query.offset = nil&lt;br /&gt;
&lt;br /&gt;
	-- We use table format when the include parameter is used to make sure we can&lt;br /&gt;
	-- differentiate between the results in case more than one item is included&lt;br /&gt;
	local dplStringInclude =&lt;br /&gt;
[=[&lt;br /&gt;
{{#dpl:&lt;br /&gt;
|noresultsheader=@@&lt;br /&gt;
|count=%s&lt;br /&gt;
|offset=%s&lt;br /&gt;
|%s&lt;br /&gt;
|table=,&lt;br /&gt;
|tablerow=%s&lt;br /&gt;
}}]=]&lt;br /&gt;
&lt;br /&gt;
	-- Table format requires an include statement so we use format instead.&lt;br /&gt;
	-- This is also a lot faster than adding an empty include statement&lt;br /&gt;
	local dplStringNoInclude =&lt;br /&gt;
[=[&lt;br /&gt;
{{#dpl:&lt;br /&gt;
|noresultsheader=@@&lt;br /&gt;
|count=%s&lt;br /&gt;
|offset=%s&lt;br /&gt;
|%s&lt;br /&gt;
|format=,¦-¦[[%%PAGE%%¦]],,&lt;br /&gt;
}}]=]&lt;br /&gt;
&lt;br /&gt;
	-- Auto generate more than one dpl if count &amp;gt; 500&lt;br /&gt;
	-- The results of these are later combined&lt;br /&gt;
	for i = 1, math.ceil( count / 500 ) do&lt;br /&gt;
		local params = {}&lt;br /&gt;
&lt;br /&gt;
		for k, v in pairs( query ) do&lt;br /&gt;
			if k == &amp;#039;include&amp;#039; then&lt;br /&gt;
				v, includedParamNames = formatInclude( v )&lt;br /&gt;
				usesInclude =  true&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if type( v ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
				for _, x in ipairs( v ) do&lt;br /&gt;
					table.insert( params, k .. &amp;#039;=&amp;#039; .. tostring( x ):gsub( &amp;#039;|&amp;#039;, &amp;#039;¦&amp;#039; ) )&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert( params, k .. &amp;#039;=&amp;#039; .. tostring( v ):gsub( &amp;#039;|&amp;#039;, &amp;#039;¦&amp;#039; ) )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if usesInclude then&lt;br /&gt;
			table.insert( queries, string.format(&lt;br /&gt;
				dplStringInclude,&lt;br /&gt;
				count &amp;gt; 500 and 500 or count,&lt;br /&gt;
				offset,&lt;br /&gt;
				table.concat( params, &amp;#039;\n|&amp;#039; ),&lt;br /&gt;
				string.rep( dataContentMarker..&amp;#039;%%&amp;#039;..dataContentMarker..&amp;#039;,&amp;#039;, #includedParamNames )&lt;br /&gt;
			) )&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( queries, string.format(&lt;br /&gt;
				dplStringNoInclude,&lt;br /&gt;
				count &amp;gt; 500 and 500 or count,&lt;br /&gt;
				offset,&lt;br /&gt;
				table.concat( params, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
			) )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		count = count - 500&lt;br /&gt;
		offset = offset + 500&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert( allIncludedParamNames, includedParamNames )&lt;br /&gt;
&lt;br /&gt;
	return table.concat( queries )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function toTable( query )&lt;br /&gt;
	local includedParamNames = table.remove( allIncludedParamNames, 1 )&lt;br /&gt;
	local usesInclude = #includedParamNames &amp;gt; 0&lt;br /&gt;
	local res = {}&lt;br /&gt;
&lt;br /&gt;
	query = query:gsub( &amp;#039;&amp;lt;p&amp;gt;Extension:DynamicPageList .-&amp;lt;/p&amp;gt;&amp;#039;, function(item) res.error = item; return &amp;#039;&amp;#039; end )&lt;br /&gt;
&lt;br /&gt;
	if query:match( &amp;#039;^@@&amp;#039; ) then -- @@ is used when no result is found&lt;br /&gt;
		return res&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if usesInclude then&lt;br /&gt;
		query = query:gsub( &amp;#039;\127\&amp;#039;&amp;quot;`UNIQ%-%-nowiki%-%x+%-QINU`&amp;quot;\&amp;#039;\127&amp;#039;, function(item) return &amp;#039;&amp;lt;nowiki&amp;gt;&amp;#039; .. item .. &amp;#039;&amp;lt;/nowiki&amp;gt;&amp;#039; end ) -- Unstrip nowiki so we can clean their content&lt;br /&gt;
		query = mw.text.unstripNoWiki( query )&lt;br /&gt;
		query = query:gsub( dataContentMarker..&amp;#039;(.-)&amp;#039;..dataContentMarker, escape )&lt;br /&gt;
		query = query:gsub( &amp;#039;{|.-|%-&amp;#039;, &amp;#039;&amp;#039; ) -- Remove the header of the table&lt;br /&gt;
		-- Replace the footer of the table width a row indicator. This effectively&lt;br /&gt;
		-- combines the output of multiple dpl queries when count &amp;gt; 500&lt;br /&gt;
		query = query:gsub( &amp;#039;|}&amp;#039;, &amp;#039;|-&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	query = trim( query )&lt;br /&gt;
	query = split( query, &amp;#039;|-&amp;#039;, true ) -- Results of the returned pages are separated by |-&lt;br /&gt;
&lt;br /&gt;
	for _, v in ipairs( query ) do&lt;br /&gt;
		if v:match( &amp;#039;%S&amp;#039; ) then&lt;br /&gt;
			v = trim( v )&lt;br /&gt;
			local title = v:match( &amp;#039;^|%[%[(.-)|&amp;#039; )&lt;br /&gt;
			local rawDataList = v:match( &amp;#039;^|.-|.-|(.*)&amp;#039; ) -- This is everything after the title&lt;br /&gt;
&lt;br /&gt;
			if not usesInclude then&lt;br /&gt;
				if title and title ~= &amp;#039;&amp;#039; then&lt;br /&gt;
					table.insert( res, title )&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- When multiple includes are used (e.g. include={Template1},{Template2} or include={Template}:1:2) its results are separated by a pipe&lt;br /&gt;
				rawDataList = split( rawDataList, &amp;#039;|&amp;#039;, true )&lt;br /&gt;
				local cleanedDataList = {}&lt;br /&gt;
&lt;br /&gt;
				for incIndex, dataItem in ipairs( rawDataList ) do&lt;br /&gt;
					dataItem = unEscape( dataItem )&lt;br /&gt;
					-- When we include an entire template we use the %ARGS% parameter supplied by dpl.&lt;br /&gt;
					-- However all | characters are repaced with §, e.g.:&lt;br /&gt;
					-- §nameLessParam&lt;br /&gt;
					-- §param = text [[wowee§link text]]&lt;br /&gt;
					-- §param2 = text {{something§something else}}&lt;br /&gt;
					dataItem = dataItem:gsub( &amp;#039;%b{}&amp;#039;, function(x) return x:gsub( &amp;#039;§&amp;#039;, &amp;#039;|&amp;#039; ) end ) -- Restore pipe characters inside links and templates&lt;br /&gt;
					dataItem = dataItem:gsub( &amp;#039;%b[]&amp;#039;, function(x) return x:gsub( &amp;#039;§&amp;#039;, &amp;#039;|&amp;#039; ) end )&lt;br /&gt;
					dataItem = dataItem:gsub( &amp;#039;&amp;lt;nowiki&amp;gt;(.-)&amp;lt;/nowiki&amp;gt;&amp;#039;, function(x) return mw.getCurrentFrame():extensionTag( &amp;#039;nowiki&amp;#039;, x ) end ) -- Restrip nowiki&lt;br /&gt;
					dataItem = trim( dataItem )&lt;br /&gt;
&lt;br /&gt;
					if includedParamNames[ incIndex ].isTemplate and includedParamNames[ incIndex ].includeAll then -- Check if we included a full template&lt;br /&gt;
						local _dataItem = {}&lt;br /&gt;
&lt;br /&gt;
						if dataItem ~= &amp;#039;&amp;#039; then&lt;br /&gt;
							dataItem = split( dataItem:sub( 3 ), &amp;#039;§&amp;#039; ) -- The sub(3) removes the first § at the start. § is 2 bytes wide so start at index 3&lt;br /&gt;
&lt;br /&gt;
							for i, item in ipairs( dataItem ) do&lt;br /&gt;
								if item:find( &amp;#039;=&amp;#039; ) then -- Check if the parameter is named or unnamed&lt;br /&gt;
									local param, value = item:match( &amp;#039;^%s*(.-)%s*=%s*(.-)%s*$&amp;#039; )&lt;br /&gt;
									_dataItem[ param ] = value&lt;br /&gt;
								else&lt;br /&gt;
									table.insert( _dataItem, trim( item ) )&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
&lt;br /&gt;
						dataItem = _dataItem&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					if includedParamNames[ incIndex ].isTemplate and not includedParamNames[ incIndex ].includeAll then -- This means there was an include in the form &amp;#039;include = {template}:param&amp;#039;&lt;br /&gt;
						local templateName = includedParamNames[ incIndex ].name&lt;br /&gt;
						local paramName = includedParamNames[ incIndex ].param&lt;br /&gt;
						paramName = tonumber( paramName ) or paramName -- Keep as string if tonumber fails&lt;br /&gt;
						cleanedDataList[ templateName ] = cleanedDataList[ templateName ] or {}&lt;br /&gt;
						cleanedDataList[ templateName ][ paramName ] = dataItem&lt;br /&gt;
					else&lt;br /&gt;
						cleanedDataList[ includedParamNames[ incIndex ].name ] = dataItem&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if title and title ~= &amp;#039;&amp;#039; then&lt;br /&gt;
					table.insert( res, { title=title, include=cleanedDataList } )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Accepts a series of tables each containig the settings for a dpl query.&lt;br /&gt;
-- Combinig multiple dpl queries yields better performance than doing them sequentially&lt;br /&gt;
function dpl.ask( ... )&lt;br /&gt;
	local queries = { ... }&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #queries do&lt;br /&gt;
		checkType( &amp;#039;Module:DPLlua.ask&amp;#039;, i, queries[i], &amp;#039;table&amp;#039; )&lt;br /&gt;
		removeFormattingSettings( queries[i] )&lt;br /&gt;
		queries[i] = formatDpl( queries[i] )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	queries = table.concat( queries, &amp;#039;$@µ@$&amp;#039; )&lt;br /&gt;
	local time = os.clock()&lt;br /&gt;
	queries = mw.getCurrentFrame():preprocess( queries )&lt;br /&gt;
	time = os.clock() - time&lt;br /&gt;
	queries = split( queries, &amp;#039;$@µ@$&amp;#039;, true )&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #queries do&lt;br /&gt;
		queries[i] = toTable( queries[i] )&lt;br /&gt;
		queries[i].time = time&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return unpack( queries )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return dpl&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Banri</name></author>
	</entry>
</feed>