local a,b,c,d,e,f,g,h,i,j,k,l,m,n=string.len,string.byte,math.min,assert,pairs,ipairs,type,unpack,table.insert,table.sort,string.sub,true,false,table.concat;local o={}local p,q,r,s,t,u,v,w,x,y="Damerau","Levenshtein","Distance","Ratio","Fuzzy","Find","Sort","_extended","Hamming","Autocomplete"local z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=q..r..w,q..r,q..s,p..q..r..w,p..q..r,p..q..s,t..u..r,t..u..s,t..v..r,t..v..s,x..r,x..s,t..y..r,t..y..s,"table"local function O(P,Q,R,S,T,...)local U={...}local V,W=a(P),a(Q)local X={}for Y=0,V do X[Y]={}for Z=0,W do X[Y][Z]=0 end end;for Y=1,V do X[Y][0]=Y end;for Z=1,W do X[0][Z]=Z end;for Z=1,W do for Y=1,V do local _,a0=b(P,Y),b(Q,Z)X[Y][Z]=c(X[Y-1][Z]+T,X[Y][Z-1]+R,X[Y-1][Z-1]+(_==a0 and 0 or S))if U[1]and Y>1 and Z>1 and _==b(Q,Z-1)and b(P,Y-1)==a0 then X[Y][Z]=c(X[Y][Z],X[Y-2][Z-2]+(_==a0 and 0 or U[2]))end end end;return X[V][W]end;o._VERSION="1.4"o[z]=function(P,Q,R,S,T)return O(P,Q,R,S,T)end;o.ld_e=o[z]o[A]=function(P,Q)return o.ld_e(P,Q,1,1,1)end;o.ld=o[A]o[B]=function(P,Q)return o.ld(P,Q)/a(P)end;o.lr=o[B]o[C]=function(P,Q,R,S,T,a1)return O(P,Q,R,S,T,l,a1)end;o.dld_e=o[C]o[D]=function(P,Q)return o.dld_e(P,Q,1,1,1,1)end;o.dld=o[D]o[E]=function(P,Q)return o.dld(P,Q)/a(P)end;o.dlr=o[E]o[J]=function(P,Q)local a2,a3=a(P),0;d(a2==a(Q),n({x," ",r," cannot be calculated on two strings of different lengths:\"",P,"\" \"",Q,"\""}))for Y=1,a2 do a3=a3+(b(P,Y)~=b(Q,Y)and 1 or 0)end;return a3 end;o.hd=o[J]o[K]=function(P,Q)return o.hd(P,Q)/a(P)end;o.hr=o[K]local function a4(a5,a6,...)local U={...}local a7=g(U[1])==N and U[1]or U;local a8,a9=a6(a7[1],a5),a7[1]for aa,ab in e(a7)do local ac=a6(ab,a5)if ac<=a8 then a8,a9=ac,aa end end;return a7[a9],a8 end;o[F]=function(a5,...)return h{a4(a5,o.dld,...)}end;o.ffd=o[F]o[G]=function(a5,...)return h{a4(a5,o.dlr,...)}end;o.ffr=o[G]local function ad(a5,a6,ae,...)local U={...}local a7=g(U[1])==N and U[1]or U;local af,ag,ah,ai={},{},{},a(a5)for aa,ab in e(a7)do local aj=ae and k(ab,0,ai)or ab;local a3=a6(a5,aj)if af[a3]==nil then af[a3]={}i(ag,a3)end;i(af[a3],ab)end;j(ag)for aa,ab in f(ag)do for Y,Z in e(af[ab])do i(ah,Z)end end;return ah end;o[H]=function(a5,...)return ad(a5,o.dld,m,...)end;o.fsd=o[H]o[I]=function(a5,...)return ad(a5,o.dlr,m,...)end;o.fsr=o[I]o[L]=function(a5,...)return ad(a5,o.dld,l,...)end;o.fad=o[L]o[M]=function(a5,...)return ad(a5,o.dlr,l,...)end;o.far=o[M]return o