1 2/** 3 * Required JavaScript for challenge/response spam protection 4 */ 5document.addEventListener('DOMContentLoaded', () => 6{ 7 [...document.querySelectorAll('[id$="-cr-field"]')].forEach(element => 8 { 9 let [expiration,challenge,delay] = atob(element.value).split('|'); 10 11 if (delay === undefined) { 12 // The CR field has already been submitted by the client, but server side validation may have failed 13 return; 14 } 15 16 setTimeout(() => 17 { 18 element.value = btoa(expiration + '|' + challenge.replace(/[a-z]/gi, char => 19 { 20 return String.fromCharCode( char.charCodeAt(0) + ( char.toUpperCase() <= 'M' ? 13 : -13 ) )/* https://stackoverflow.com/a/14553231 */ 21 })) 22 }, 1e3 * delay) 23 }) 24});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.