[20:27] q [20:27] candidates [20:27] [ ] [20:27] for all [20:27] g [20:27] 2 [20:28] G [20:28] do [20:28] for [20:28] i [20:28] 2f [20:28] 1 [20:28] :: [20:28] 8 [20:28] g [20:28] do [20:28] if for all [20:28] j [20:28] 2f [20:28] 1 [20:28] :: [20:28] 8 [20:28] g [20:28] ; j [20:28] 6 [20:28] = [20:28] i [20:28] : [20:28] F [20:28] j [20:28] ( [20:28] g [20:28] ) = [20:28] F [20:29] j [20:29] ( [20:29] q [20:29] ) [20:29] then [20:29] candidates [20:29] candidates + ( [20:29] g; j [20:29] ) [20:29] end if [20:29] end for [20:29] end for [20:29] if [20:29] length(candidates) = 1 [20:29] then [20:29] g; j [20:29] candidates[0] [20:29] if [20:29] j [20:29] 2f [20:29] cookies?, video, timezone, supercookies [20:29] g [20:29] then [20:29] return [20:29] g [20:29] else [20:29] # [20:29] j [20:30] 2f [20:30] user [20:30] agent, http [20:30] accept, plugins, fonts [20:30] g === CasW1 is now known as CasW [20:30] if [20:30] SequenceMatcher( [20:30] F [20:30] j [20:30] ( [20:30] g [20:30] ) [20:30] ; F [20:30] j [20:30] ( [20:30] q [20:30] ) [20:30] ).ratio() [20:30] < [20:30] 0 [20:30] : [20:30] 85 [20:30] then [20:30] return [20:30] g [20:30] end if [20:30] end if [20:31] end if [20:31] return [20:31] NULL