anchor.diff:  // convert xyz to sRGB linear then compand to sRGB
   vec4 fwd_xyz2rgb(vec4 color) {
   	vec3 xyz = vec3(color.x, color.y, color.z) / 100.0;
  -	mat3 M = mat3(3.2406, -1.5372, -0.4986,   -0.9689, 1.8758, 0.0415,  0.0557, -0.2040, 1.0570);
  -	vec3 rgb = xyz * M;
  +	vec3 rgb = xyz * MsRGB;
   	return vec4(fwd_sRGB(rgb.r), fwd_sRGB(rgb.g), fwd_sRGB(rgb.b), color.a);
   }
   
  
positive.code: }
  
  void main( void ) {
  	vec4 lch = rgb_to_lch(texture2D(u_tex0, v_uv));
  	if (u_numEdges > 9.0) {					// u_numEdges 0 = no edges, 10 = 1 edge, 20 = 2 edges, 30 = 3 edges, etc.
  		float dx = 1000.0 / (u_numEdges);		// dx is width of grey bands 100 for 1 edge, 50 for 2 edges, 33 for 3 edges, 25 for 4 edges, etc
  		float lx = max(lch.x, dx * u_maskDark / 10.0);				// clamp out n dark bands eg 0 = show all, 10 = no blacks, 20=no blacks or darks
  
negative.code: vec4 rev_rgb2xyz(vec4 color) {
  	//Observer. = 2.0°, Illuminant = D65
  	vec3 rgb = vec3(rev_sRGB(color.r), rev_sRGB(color.g), rev_sRGB(color.b)) * 100.0;							
  	return vec4(rgb * MsRGBINV, color.a);
  }
  
  ///////////////////////// Lab/lch /////////////////////////////////////////
  // fwd XYZ [0..100] -> L[0..100] AB[-128..+128] -> L[0..100] C[0..100] H[0..360]
  // rev L[0..100] C[0..100] H[0..360] -> L[0..100] AB[-128..+128] -> XYZ [0..100]
  
  // convert xyz component to lab component
  float fwd_lab(float c) {
  