{"id":60096,"date":"2023-07-13T03:01:01","date_gmt":"2023-07-12T17:01:01","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=60096"},"modified":"2023-07-13T08:36:04","modified_gmt":"2023-07-12T22:36:04","slug":"find-image-files-via-permissions-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/find-image-files-via-permissions-tutorial\/","title":{"rendered":"Find Image Files via Permissions Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Find Image Files via Permissions Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size_permissions.jpg\" title=\"Find Image Files via Permissions Tutorial\" style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Find Image Files via Permissions Tutorial<\/p><\/div>\n<p>Further to yesterday&#8217;s <a title='Find Image Files via Specified Datetime Tutorial' href='#fifsdt'>Find Image Files via Specified Datetime Tutorial<\/a> we have a dual purpose to our endeavours today &#8230;<\/p>\n<ul>\n<li>allow for a file via permissions new piece of functionality<\/li>\n<li>on recall, all\/any of these filled in functionality filters should be retained on selection of the relevant dropdown regarding a rerunning of the <i>find image files<\/i> web application<\/li>\n<\/ul>\n<p>By now, some readers may be curious about our forays into &#8220;new filter file finding logic&#8221;.  Like, was it inspired by anything?  Well, yes is the answer.  A recent <a target=_blank title='APC' href='https:\/\/www.techradar.com\/news\/apcmag'>APC magazine<\/a> had a great section talking about the talents of the Linux &#8220;<a target=_blank title='Linux find command information from computerhope' href='http:\/\/www.computerhope.com\/unix\/ufind.htm'>find<\/a>&#8221; command finding files for you in Linux.   And Linux is our RJM Programming web server, and &#8220;find&#8221; is great on macOS&#8217;s command line too.  But not Windows, and if you have examined our PHP for this project, you&#8217;ll see us &#8230;<\/p>\n<ul>\n<li>steering clear of (an early days foray into) &#8220;find&#8221; command line logic &#8230; for that very reason that Windows is excluded &#8230; in favour of &#8230;<\/li>\n<li>PHP <a target=_blank title='PHP glob method information' href='http:\/\/php.net\/manual\/en\/function.glob.php'>glob<\/a> logic &#8220;with a little help from its <font size=1>(new inhouse PHP logic)<\/font> friends&#8221; &#8230; the &#8220;Case Insensitive&#8221; one <a target=_blank href='https:\/\/en.wikipedia.org\/wiki\/Wrapper_function' style=color:blue;>like a wrapper<\/a> and the <font color=purple>others being <a target=_blank title='Boolean information from W3schools' href='https:\/\/www.w3schools.com\/js\/js_booleans.asp'>boolean<\/a> returning jobs<\/font> &#8230; called like &#8230;<br \/>\n&lt;?php<br \/>\n<code><br \/>\n       foreach (glob(<font color=blue>maybecasei(<\/font>$aheadof . $filedelim . str_replace(\"+\",\" \",urldecode($_GET['filespec']))<font color=blue>)<\/font>) as $filename) {<br \/>\n        if (<font color=purple>maybedatewrong(<\/font>$filename<font color=purple>)<\/font> && <font color=purple>maybepermwrong(<\/font>$filename<font color=purple>)<\/font>) {<br \/>\n        try {<br \/>\n         list($width, $height, $type, $attr) = getimagesize($filename);<br \/>\n         if ($width != \"\" && $height != \"\" && <font color=purple>maybesizewrong(<\/font>$filename<font color=purple>)<\/font>) {<br \/>\n         \/\/<br \/>\n         \/\/ lots more PHP code here<br \/>\n         \/\/<br \/>\n         }<br \/>\n        } catch (Exception $ewe) {<br \/>\n        }<br \/>\n        }<br \/>\n       }<br \/>\n<\/code><br \/>\n?&gt;<br \/>\n &#8230; calling PHP &#8230;<br \/>\n&lt;?php<br \/>\n<code><br \/>\n<font color=blue>function maybepermwrong($inspc) { \/\/ thanks to <a target=_blank title='https:\/\/www.php.net\/manual\/en\/function.fileperms.php' href='https:\/\/www.php.net\/manual\/en\/function.fileperms.php'>https:\/\/www.php.net\/manual\/en\/function.fileperms.php<\/a><br \/>\n   global $permi;<br \/>\n   if ($permi != \"\") {<br \/>\n$perms = fileperms($inspc);<br \/>\n<br \/>\nswitch ($perms & 0xF000) {<br \/>\n    case 0xC000: \/\/ socket<br \/>\n        $info = 's';<br \/>\n        break;<br \/>\n    case 0xA000: \/\/ symbolic link<br \/>\n        $info = 'l';<br \/>\n        break;<br \/>\n    case 0x8000: \/\/ regular<br \/>\n        $info = 'r';<br \/>\n        break;<br \/>\n    case 0x6000: \/\/ block special<br \/>\n        $info = 'b';<br \/>\n        break;<br \/>\n    case 0x4000: \/\/ directory<br \/>\n        $info = 'd';<br \/>\n        break;<br \/>\n    case 0x2000: \/\/ character special<br \/>\n        $info = 'c';<br \/>\n        break;<br \/>\n    case 0x1000: \/\/ FIFO pipe<br \/>\n        $info = 'p';<br \/>\n        break;<br \/>\n    default: \/\/ unknown<br \/>\n        $info = 'u';<br \/>\n}<br \/>\n<br \/>\n\/\/ Owner<br \/>\n$info .= (($perms & 0x0100) ? 'r' : '-');<br \/>\n$info .= (($perms & 0x0080) ? 'w' : '-');<br \/>\n$info .= (($perms & 0x0040) ?<br \/>\n            (($perms & 0x0800) ? 's' : 'x' ) :<br \/>\n            (($perms & 0x0800) ? 'S' : '-'));<br \/>\n<br \/>\n\/\/ Group<br \/>\n$info .= (($perms & 0x0020) ? 'r' : '-');<br \/>\n$info .= (($perms & 0x0010) ? 'w' : '-');<br \/>\n$info .= (($perms & 0x0008) ?<br \/>\n            (($perms & 0x0400) ? 's' : 'x' ) :<br \/>\n            (($perms & 0x0400) ? 'S' : '-'));<br \/>\n<br \/>\n\/\/ World<br \/>\n$info .= (($perms & 0x0004) ? 'r' : '-');<br \/>\n$info .= (($perms & 0x0002) ? 'w' : '-');<br \/>\n$info .= (($perms & 0x0001) ?<br \/>\n            (($perms & 0x0200) ? 't' : 'x' ) :<br \/>\n            (($perms & 0x0200) ? 'T' : '-'));<br \/>\n    if ($info != $permi) { return false; }<br \/>\n  }<br \/>\n  return true;<br \/>\n}<br \/>\n<br \/>\nfunction maybedatewrong($inspc) {<br \/>\n   global $datemode, $datei;<br \/>\n   if (trim($datei) != '') {<br \/>\n     if (strtoupper($datemode) == \"M\") {<br \/>\n       $vsfdt=filemtime($inspc);<br \/>\n       if (substr($datei, 0, 1) == '+') {<br \/>\n           if ($vsfdt &lt; substr($datei, 1)) { return false; }<br \/>\n       } else if (substr($datei, 0, 1) == '-') {<br \/>\n           if ($vsfdt &gt; substr($datei, 1)) { return false; }<br \/>\n       } else {<br \/>\n           if ($vsfdt != substr($datei, 0)) { return false; }<br \/>\n       }<br \/>\n     } else if (strtoupper($datemode) == \"A\") {<br \/>\n       $vsfdt=fileatime($inspc);<br \/>\n       if (substr($datei, 0, 1) == '+') {<br \/>\n           if ($vsfdt &lt; substr($datei, 1)) { return false; }<br \/>\n       } else if (substr($datei, 0, 1) == '-') {<br \/>\n           if ($vsfdt &gt; substr($datei, 1)) { return false; }<br \/>\n       } else {<br \/>\n           if ($vsfdt != substr($datei, 0)) { return false; }<br \/>\n       }<br \/>\n     } else { \/\/ if (strtoupper($datemode) == \"C\") {<br \/>\n       $vsfdt=filectime($inspc);<br \/>\n       if (substr($datei, 0, 1) == '+') {<br \/>\n           if ($vsfdt &lt; substr($datei, 1)) { return false; }<br \/>\n       } else if (substr($datei, 0, 1) == '-') {<br \/>\n           if ($vsfdt &gt; substr($datei, 1)) { return false; }<br \/>\n       } else {<br \/>\n           if ($vsfdt != substr($datei, 0)) { return false; }<br \/>\n       }<br \/>\n     }<br \/>\n   }<br \/>\n   return true;<br \/>\n}<br \/>\n<br \/>\nfunction maybesizewrong($inspc) {<br \/>\n  global $sizei;<br \/>\n  $ourvv=0;<br \/>\n  if (trim($sizei) != \"\") {<br \/>\n     $vss=filesize($inspc);<br \/>\n     if (substr($sizei,0,1) == '+') {<br \/>\n       if (strpos($sizei, \"G\") !== false) {<br \/>\n        $ourvv=(1073741824 * explode(\"G\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"M\") !== false) {<br \/>\n        $ourvv=(1048576 * explode(\"M\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"k\") !== false) {<br \/>\n        $ourvv=(1024 * explode(\"k\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"c\") !== false) {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,1))[0]);<br \/>\n       } else {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,1))[0]);<br \/>\n       }<br \/>\n       \/\/echo $ourvv . ' and vss=' . $vss;<br \/>\n       \/\/exit;<br \/>\n       if ($vss &lt;= $ourvv) { return false;   }<br \/>\n     } else if (substr($sizei,0,1) == '-') {<br \/>\n       if (strpos($sizei, \"G\") !== false) {<br \/>\n        $ourvv=(1073741824 * explode(\"G\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"M\") !== false) {<br \/>\n        $ourvv=(1048576 * explode(\"M\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"k\") !== false) {<br \/>\n        $ourvv=(1024 * explode(\"k\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"c\") !== false) {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,1))[0]);<br \/>\n       } else {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,1))[0]);<br \/>\n       }<br \/>\n       if ($vss &gt;= $ourvv) { return false;   }<br \/>\n     } else {<br \/>\n       if (strpos($sizei, \"G\") !== false) {<br \/>\n        $ourvv=(1073741824 * explode(\"G\", substr($sizei,0))[0]);<br \/>\n       } else if (strpos($sizei, \"M\") !== false) {<br \/>\n        $ourvv=(1048576 * explode(\"M\", substr($sizei,0))[0]);<br \/>\n       } else if (strpos($sizei, \"k\") !== false) {<br \/>\n        $ourvv=(1024 * explode(\"k\", substr($sizei,0))[0]);<br \/>\n       } else if (strpos($sizei, \"c\") !== false) {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,0))[0]);<br \/>\n       } else {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,0))[0]);<br \/>\n       }<br \/>\n       if ($vss != $ourvv) { return false;   }<br \/>\n     }<br \/>\n  }<br \/>\n  return true;<br \/>\n}<\/font><br \/>\n<br \/><font color=purple><br \/>\nfunction maybecasei($inspc) {<br \/>\n  global $casei;<br \/>\n  $arrlc = array(\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\");<br \/>\n  $outspc=$inspc;<br \/>\n  if ($casei) {<br \/>\n    if (strpos($inspc, \"[\") === false && strpos($inspc, \"]\") === false) {<br \/>\n     foreach ($arrlc as $value) {<br \/>\n       if (strpos($outspc, strtoupper($value)) !== false) {<br \/>\n          $outspc=str_replace(strtoupper($value), '!@~', $outspc);<br \/>\n          $outspc=str_replace($value, \"[\" . $value . strtoupper($value) . \"]\", $outspc);<br \/>\n          $outspc=str_replace('!@~', \"[\" . strtoupper($value) . $value . \"]\", $outspc);<br \/>\n       } else {<br \/>\n          $outspc=str_replace($value, \"[\" . $value . strtoupper($value) . \"]\", $outspc);<br \/>\n       }<br \/>\n     }<br \/>\n    }<br \/>\n  }<br \/>\n  return $outspc;<br \/>\n}<\/font><br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; and using Javascript via PHP &#8230;<br \/>\n&lt;?php echo &#8221;<br \/>\n<code><br \/>\n function maybenotjusttick(indef) {<br \/>\n    var outdef=indef, jin=0, numstart=false, numend=false, thenumis='', thefileis='', daterest='', dateprefix='', ithenumis=0, fauxprefix='';<br \/>\n    if (document.getElementById('svarious').value == 'sizei') {<br \/>\n      outdef=prompt('Matching size value where + (first character) for larger than and - (first character) for smaller than and neither for exact match (to the second).  Suffix c is bytes and k is kilobytes and M is megabytes and G is gigabytes.', '+-1c');<br \/>\n      if (outdef == null) { return document.getElementById('tdvarious').innerHTML; } else if (outdef.trim() != '') { return outdef; } else { return indef; }<br \/>\n    } else if (document.getElementById('svarious').value == 'permi') {<br \/>\n      outdef=prompt('Matching permissions value, an example being -rw-r--r--', 'drwxrw-rw-');<br \/>\n      if (outdef == null) { return document.getElementById('tdvarious').innerHTML; } else if (outdef.trim() != '') { return outdef; } else { return indef; }<br \/>\n    } else if (document.getElementById('svarious').value == 'datei') {<br \/>\n      outdef=prompt('Matching datetime value where + (first character) for newer than and - (first character) for older than and neither for exact creation date match of specified relative or absolute filename to follow, and if not a filename then suffix M is modified datetime and A is accessed datetime and C is created datetime for middle value number [0] of suffixing s for seconds and m for minutes and h for hours and d for days, relative to (datetime) now.' + document.getElementById('mzs').title, document.getElementById('mzs').value);<br \/>\n      if (outdef == null) {<br \/>\n         return document.getElementById('tdvarious').innerHTML;<br \/>\n      } else if (outdef.trim() != '') {<br \/>\n        var ournow = new Date()<br \/>\n        var millisecondsSinceEpoch = Math.round(ournow.getTime() \/ 1);<br \/>\n        if (outdef.indexOf('--') == 0) { dateprefix='-';  fauxprefix='-'; outdef=outdef.substring(1);  }<br \/>\n        if (outdef.indexOf('-0') == 0) { dateprefix='-';  fauxprefix='-'; outdef=outdef.substring(1);  }<br \/>\n        for (jin=0; jin&lt;eval('' + outdef.replace(\/^\\+\/g,'').trim().length); jin++) {<br \/>\n           if (!numstart && !numend && ((outdef.replace(\/^\\+\/g,'').trim().substring(jin).substring(0,1) == '-' && thenumis == '') || (outdef.replace(\/^\\+\/g,'').trim().substring(jin).substring(0,1) == '.' && 1 == 6) || (outdef.replace(\/^\\+\/g,'').trim().substring(jin).substring(0,1) &gt;= '0' && outdef.replace(\/^\\+\/g,'').trim().substring(jin).substring(0,1) &lt;= '9'))) {<br \/>\n               if (jin &lt;= 1) {<br \/>\n               thenumis+=outdef.replace(\/^\\+\/g,'').trim().substring(jin).substring(0,1);<br \/>\n               dateprefix=outdef.split(thenumis)[0];<br \/>\n               numstart=true;<br \/>\n               }<br \/>\n           } else if (numstart && !numend && ((outdef.replace(\/^\\+\/g,'').trim().substring(jin).substring(0,1) == '-' && thenumis == '') || (outdef.replace(\/^\\+\/g,'').trim().substring(jin).substring(0,1) == '.' && thenumis != '') || (outdef.replace(\/^\\+\/g,'').trim().substring(jin).substring(0,1) &gt;= '0' && outdef.replace(\/^\\+\/g,'').trim().substring(jin).substring(0,1) &lt;= '9'))) {<br \/>\n               thenumis+=outdef.replace(\/^\\+\/g,'').trim().substring(jin).substring(0,1);<br \/>\n               numstart=true;<br \/>\n           } else if (numstart && !numend) {<br \/>\n               daterest=outdef.replace(\/^\\+\/g,'').trim().substring(jin);<br \/>\n               numend=true;<br \/>\n           } else if (jin &gt; 1 && !numstart && !numend) {<br \/>\n               thenumis='';<br \/>\n           }<br \/>\n        }<br \/>\n        if (thenumis == '-' && numstart && numend) {<br \/>\n          outdef=fauxprefix + '-' + Math.round(eval('' + eval(millisecondsSinceEpoch \/ 1000.0)));<br \/>\n        } else if (thenumis == '' && !numstart && !numend && outdef.substring(0,1) == '+') {<br \/>\n          outdef=fauxprefix + '+' + Math.round(eval('' + eval(millisecondsSinceEpoch \/ 1000.0)));<br \/>\n        } else if (thenumis == '' && !numstart && !numend) {<br \/>\n          outdef=fauxprefix + Math.round(eval('' + eval(millisecondsSinceEpoch \/ 1000.0)));<br \/>\n        }<br \/>\n        if (thenumis.replace('-','').trim() != '') {<br \/>\n          if (daterest == '') { daterest='S';  }<br \/>\n          ithenumis=eval('' + thenumis.trim());<br \/>\n          if (daterest.toLowerCase().indexOf('s') != -1) {<br \/>\n            if (dateprefix != '') {<br \/>\n            outdef=outdef.replace('' + thenumis, '' + eval(eval('' + thenumis) + eval('' + eval(millisecondsSinceEpoch \/ 1000.0))));<br \/>\n            } else {<br \/>\n            outdef=outdef.replace('' + thenumis, '' + Math.round(eval(eval('' + thenumis) + eval('' + eval(millisecondsSinceEpoch \/ 1000.0)))));<br \/>\n            }<br \/>\n            outdef=outdef.replace('s', '').replace('S', '');<br \/>\n          } else if (daterest.indexOf('m') != -1) {<br \/>\n            if (dateprefix != '') {<br \/>\n            outdef=outdef.replace('' + thenumis, '' + eval(eval(eval('' + thenumis) * 60) + eval('' + eval(millisecondsSinceEpoch \/ 1000.0))));<br \/>\n            } else {<br \/>\n            outdef=outdef.replace('' + thenumis, '' + Math.round(eval(eval(eval('' + thenumis) * 60) + eval('' + eval(millisecondsSinceEpoch \/ 1000.0)))));<br \/>\n            }<br \/>\n            outdef=outdef.replace('m', '');<br \/>\n          } else if (daterest.indexOf('h') != -1) {<br \/>\n            if (dateprefix != '') {<br \/>\n            outdef=outdef.replace('' + thenumis, '' + eval(eval(eval('' + thenumis) * 3600) + eval('' + eval(millisecondsSinceEpoch \/ 1000.0))));<br \/>\n            } else {<br \/>\n            outdef=outdef.replace('' + thenumis, '' + Math.round(eval(eval(eval('' + thenumis) * 3600) + eval('' + eval(millisecondsSinceEpoch \/ 1000.0)))));<br \/>\n            }<br \/>\n            outdef=outdef.replace('h', '');<br \/>\n          } else if (daterest.indexOf('d') != -1) {<br \/>\n            if (dateprefix != '') {<br \/>\n            outdef=outdef.replace('' + thenumis, '' + eval(eval(eval('' + thenumis) * 24 * 3600) + eval('' + eval(millisecondsSinceEpoch \/ 1000.0))));<br \/>\n            } else {<br \/>\n            outdef=outdef.replace('' + thenumis, '' + Math.round(eval(eval(eval('' + thenumis) * 24 * 3600) + eval('' + eval(millisecondsSinceEpoch \/ 1000.0)))));<br \/>\n            }<br \/>\n            outdef=outdef.replace('d', '');<br \/>\n          }<br \/>\n        }<br \/>\n        return '' + fauxprefix + outdef;<br \/>\n      } else {<br \/>\n        return indef;<br \/>\n      }<br \/>\n    }<br \/>\n    return indef;<br \/>\n }<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; and some PHP initialization code which uses <a target=_blank href='https:\/\/www.w3schools.com\/tags\/att_global_data.asp' title='Global data attributes information from W3schools' style=color:darkblue;>Javascript global data attribute<\/a> rearrangements<\/font> &#8230;<br \/>\n&lt;?php<br \/>\n<code><br \/>\n<font color=darkblue>$gda=\"\";<\/font><br \/>\n$casei=false;<br \/>\n$sizei=\"\";<br \/>\n$permi=\"\";<br \/>\n$datemode=\"c\";<br \/>\n$datei=\"\";<br \/>\n$xdatei=\"\";<br \/>\n$filevs=\"\";<br \/>\n$previewif=\"&lt;br&gt;&lt;iframe name=preview id=preview style=display:none;&gt;&lt;\/iframe&gt;\";<br \/>\n$minusname=\" -name '\";<br \/>\n$plusname=\"'\";<br \/>\n<br \/>\n<font color=darkblue>if (isset($_GET['casei'])) { if ($_GET['casei'] != '') {  $gda.=' data-casei=\"&amp;#10004;   \" '; } }<br \/>\nif (isset($_GET['sizei'])) { if (str_replace('%25E2%259C%2594%2520%2520%2520','',$_GET['sizei']) != '') {  $gda.=' data-sizei=\"' . str_replace('%2B', '+',str_replace('%252B', '+', $_GET['sizei'])) . '\" ';   } }<br \/>\nif (isset($_GET['permi'])) { if (strlen($_GET['permi']) != '') {  $gda.=' data-permi=\"' . str_replace('+', ' ', $_GET['permi']) . '\" ';  } }<br \/>\nif (isset($_GET['datei'])) { if (str_replace('%25E2%259C%2594%2520%2520%2520','',$_GET['datei']) != '') {  $gda.=' data-datei=\"\" ';   } }<\/font><br \/>\n<br \/>\n$optthbit=\"&lt;th id=thvarious&gt;&lt;select <font color=darkblue>\" . str_replace(' data-casei=', ' data-xcasei=',$gda) . \"<\/font> onchange=\\\"document.getElementById('tdvarious').innerHTML=tvm(this.value,'&amp;#10060;');\\\" id=svarious&gt;&lt;option value=casei&gt;Case Insensitive?&lt;\/option&gt;&lt;option value=sizei&gt;Size Match?&lt;\/option&gt;&lt;option value=datei&gt;Datetime Match?&lt;\/option&gt;&lt;option value=permi&gt;Permissions Match?&lt;\/option&gt;&lt;\/select&gt;&lt;span id=prespanner&gt;&lt;\/span&gt;&lt;span id=spanner&gt;&lt;\/span&gt;&lt;\/th&gt;\";<br \/>\n$opttdbit=\"&lt;th id=tdvarious title='Click to toggle' onclick=\\\"  this.innerHTML=(eval('' + this.innerHTML.length) != 1 ? '&amp;#10060;' : maybenotjusttick('&amp;#10004;   ')); if (eval('' + this.innerHTML.length) &gt; 1) { document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=' + encodeURIComponent(this.innerHTML) + '&gt;&lt;\/input&gt;'; } else { document.getElementById('divmyrform').innerHTML=document.getElementById('divmyrform').innerHTML.replace(' name=' + String.fromCharCode(34) + document.getElementById('svarious').value, ' data-name=' + String.fromCharCode(34) + document.getElementById('svarious').value);  document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=&gt;&lt;\/input&gt;'; }\\\"&gt;&amp;#10060;&lt;\/th&gt;\";<br \/>\n<br \/>\nif (isset($_GET['casei'])) { if ($_GET['casei'] != '') { $casei=true; $minusname=\" -iname '\"; $plusname=\"' \"; } }<br \/>\nif (isset($_GET['sizei'])) { if (str_replace('%25E2%259C%2594%2520%2520%2520','',$_GET['sizei']) != '') {<br \/>\n   $sizei=str_replace('%2B', '+',str_replace('%252B', '+', $_GET['sizei']));<br \/>\n   $plusname=\"' -size \" . str_replace('%2B', '+',str_replace('%252B', '+', $_GET['sizei'])) . \" \";<br \/>\n   $optthbit=\"&lt;th id=thvarious&gt;&lt;select <font color=darkblue>\" . str_replace(' data-sizei=', ' data-xsizei=',$gda) . \"<\/font> onchange=\\\"document.getElementById('tdvarious').innerHTML=tvm(this.value,'&amp;#10060;');\\\" id=svarious&gt;&lt;option value=sizei&gt;Size Match?&lt;\/option&gt;&lt;option value=casei&gt;Case Insensitive?&lt;\/option&gt;&lt;option value=datei&gt;Datetime Match?&lt;\/option&gt;&lt;option value=permi&gt;Permissions Match?&lt;\/option&gt;&lt;\/select&gt;&lt;span id=prespanner&gt;&lt;\/span&gt;&lt;span id=spanner&gt;&lt;\/span&gt;&lt;\/th&gt;\";<br \/>\n   $opttdbit=\"&lt;th id=tdvarious title='Click to toggle' onclick=\\\"  this.innerHTML=(eval('' + this.innerHTML.length) != 1 ? '&amp;#10060;' : maybenotjusttick('&amp;#10004;   ')); if (eval('' + this.innerHTML.length) &gt; 1) { document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=' + encodeURIComponent(this.innerHTML) + '&gt;&lt;\/input&gt;'; } else { document.getElementById('divmyrform').innerHTML=document.getElementById('divmyrform').innerHTML.replace(' name=' + String.fromCharCode(34) + document.getElementById('svarious').value, ' data-name=' + String.fromCharCode(34) + document.getElementById('svarious').value);  document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=&gt;&lt;\/input&gt;'; }\\\"&gt;\" . $sizei . \"&lt;\/th&gt;\";<br \/>\n}<br \/>\n}<br \/>\nif (isset($_GET['permi'])) { if (strlen($_GET['permi']) != '') {<br \/>\n   $permi=str_replace('+', ' ', $_GET['permi']);<br \/>\n   $plusname=\"' -perm \" . str_replace('+', ' ', $_GET['permi']) . \" \";<br \/>\n   $optthbit=\"&lt;th id=thvarious&gt;&lt;select <font color=darkblue>\" . str_replace(' data-permi=', ' data-xpermi=',$gda) . \"<\/font> onchange=\\\"document.getElementById('tdvarious').innerHTML=tvm(this.value,'&amp;#10060;');\\\" id=svarious&gt;&lt;option value=permi&gt;Permissions Match?&lt;\/option&gt;&lt;option value=sizei&gt;Size Match?&lt;\/option&gt;&lt;option value=casei&gt;Case Insensitive?&lt;\/option&gt;&lt;option value=datei&gt;Datetime Match?&lt;\/option&gt;&lt;\/select&gt;&lt;span id=prespanner&gt;&lt;\/span&gt;&lt;span id=spanner&gt;&lt;\/span&gt;&lt;\/th&gt;\";<br \/>\n   $opttdbit=\"&lt;th id=tdvarious title='Click to toggle' onclick=\\\"  this.innerHTML=(eval('' + this.innerHTML.length) != 1 ? '&amp;#10060;' : maybenotjusttick('&amp;#10004;   ')); if (eval('' + this.innerHTML.length) &gt; 1) { document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=' + encodeURIComponent(this.innerHTML) + '&gt;&lt;\/input&gt;'; } else { document.getElementById('divmyrform').innerHTML=document.getElementById('divmyrform').innerHTML.replace(' name=' + String.fromCharCode(34) + document.getElementById('svarious').value, ' data-name=' + String.fromCharCode(34) + document.getElementById('svarious').value);  document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=&gt;&lt;\/input&gt;'; }\\\"&gt;\" . $permi . \"&lt;\/th&gt;\";<br \/>\n}<br \/>\n}<br \/>\nif (isset($_GET['datei'])) { if (str_replace('%25E2%259C%2594%2520%2520%2520','',$_GET['datei']) != '') {<br \/>\n   $xdatei=str_replace('%2B', '+',str_replace('%252B', '+', $_GET['datei']));<br \/>\n   $factoris=0;<br \/>\n   $isfile=false;<br \/>\n   $datei=$xdatei;<br \/>\n   if (substr($xdatei, 0, 1) == '+') {<br \/>\n   $factoris=1;<br \/>\n   if (substr(substr($xdatei, 1), 0, 1) &lt; '0' || substr(substr($xdatei, 1), 0, 1) &gt; '9') { $isfile=ffi(substr($xdatei, 1),true);  }<br \/>\n   } else if (substr($xdatei, 0, 1) == '-') {<br \/>\n   $factoris=-1;<br \/>\n   if (substr(substr($xdatei, 1), 0, 1) &lt; '0' || substr(substr($xdatei, 1), 0, 1) &gt; '9') { $isfile=ffi(substr($xdatei, 1),true);  }<br \/>\n   } else {<br \/>\n   if (substr(substr($xdatei, 0), 0, 1) &lt; '0' || substr(substr($xdatei, 0), 0, 1) &gt; '9') { $isfile=ffi(substr($xdatei, 0),true);  }<br \/>\n   }<br \/>\n   $fdt=0;<br \/>\n   if ($filevs != '') {<br \/>\n   if (strpos($xdatei, \"M\") !== false) { \/\/ RE modified datetime of file<br \/>\n      $fdt=filemtime($filevs);<br \/>\n      $datei=explode($filevs, $datei)[0];<br \/>\n      $datei.='' . $fdt;<br \/>\n      $datemode=\"M\";<br \/>\n   } else if (strpos($xdatei, \"A\") !== false) { \/\/ RE modified datetime of file<br \/>\n      $fdt=fileatime($filevs);<br \/>\n      $datei=explode($filevs, $datei)[0];<br \/>\n      $datei.='' . $fdt;<br \/>\n      $datemode=\"A\";<br \/>\n   } else { \/\/if (strpos($xdatei, \"C\") !== false) { \/\/ RE created datetime of file<br \/>\n      $fdt=filectime($filevs);<br \/>\n      $datei=explode($filevs, $datei)[0];<br \/>\n      $datei.='' . $fdt;<br \/>\n      $datemode=\"C\";<br \/>\n   }<br \/>\n   }<br \/>\n   <font color=darkblue>$gda=str_replace(' data-datei=\"\" ', ' data-datei=\"' . $datei . '\" ', $gda);<\/font><br \/>\n   \/\/$plusname=\"' -size \" . str_replace('%2B', '+',str_replace('%252B', '+', $_GET['datei'])) . \" \";<br \/>\n   $optthbit=\"&lt;th id=thvarious&gt;&lt;select <font color=darkblue>\" . str_replace(' data-datei=', ' data-xdatei=',$gda) . \"<\/font> onchange=\\\"document.getElementById('tdvarious').innerHTML=tvm(this.value,'&amp;#10060;');\\\" id=svarious&gt;&lt;option value=datei&gt;Datetime Match?&lt;\/option&gt;&lt;option value=sizei&gt;Size Match?&lt;\/option&gt;&lt;option value=casei&gt;Case Insensitive?&lt;\/option&gt;&lt;\/select&gt;&lt;span id=prespanner&gt;&lt;\/span&gt;&lt;span id=spanner&gt;&lt;\/span&gt;&lt;\/th&gt;\";<br \/>\n   $opttdbit=\"&lt;th id=tdvarious title='Click to toggle' onclick=\\\"  this.innerHTML=(eval('' + this.innerHTML.length) != 1 ? '&amp;#10060;' : maybenotjusttick('&amp;#10004;   ')); if (eval('' + this.innerHTML.length) &gt; 1) { document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=' + encodeURIComponent(this.innerHTML) + '&gt;&lt;\/input&gt;'; } else { document.getElementById('divmyrform').innerHTML=document.getElementById('divmyrform').innerHTML.replace(' name=' + String.fromCharCode(34) + document.getElementById('svarious').value, ' data-name=' + String.fromCharCode(34) + document.getElementById('svarious').value);  document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=&gt;&lt;\/input&gt;'; }\\\"&gt;\" . $datei . \"&lt;\/th&gt;\";<br \/>\n}<br \/>\n}<br \/>\n<\/code><br \/>\n?&gt;<br \/>\n &#8230; to call on some new Javascript (written by PHP) function &#8230;<br \/>\n&lt;?php echo &#8221;<br \/>\n<code><br \/>\n function tvm(tvis, defis) {<br \/>\n   <font color=darkblue>var attis=('' + document.getElementById('svarious').getAttribute('data-' + tvis)).replace(\/^undefined$\/g,'').replace(\/^null$\/g,'');<br \/>\n   if (attis != '') {<br \/>\n     document.getElementById('svarious').setAttribute('data-' + tvis, '');<br \/>\n     return attis;<br \/>\n   }<\/font><br \/>\n   if (tvis != 'datei') {<br \/>\n     document.getElementById('prespanner').innerHTML='';<br \/>\n     document.getElementById('spanner').innerHTML='';<br \/>\n   } else {<br \/>\n     document.getElementById('spanner').innerHTML='';<br \/>\n     document.getElementById('prespanner').innerHTML='&lt;br&gt;&lt;iframe title=\\\"Fill out here or click x for offset datetimes and file comparisons.\\\" style=\\\"width:500px;height:60px;\\\" id=myifd src=\/PHP\/away_off.php?juststart=yes&gt;&lt;\/iframe&gt;';<br \/>\n   }<br \/>\n   return defis;<br \/>\n }<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;\n<\/li>\n<\/ul>\n<p> &#8230; in <a target=_blank title='find_images_via_size.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php--------------GETME'>the newly changed<\/a> <a target=_blank title='find_images_via_size.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php--------------GETME'>find_images_via_size.php<\/a> <a target=_blank title='Helper' href='http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php'>web application<\/a>.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/find-image-files-via-permissions-tutorial\/'>Find Image Files via Permissions Tutorial<\/a>.<\/p-->\n<hr>\n<p id='fifsdt'>Previous relevant <a target=_blank title='Find Image Files via Specified Datetime Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/find-image-files-via-specified-datetime-tutorial\/'>Find Image Files via Specified Datetime Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Find Image Files via Specified Datetime Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size_datetime_set.jpg\" title=\"Find Image Files via Specified Datetime Tutorial\" style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Find Image Files via Specified Datetime Tutorial<\/p><\/div>\n<p>Regarding yesterday&#8217;s <a title='Find Image Files via Datetime Tutorial' href='#fifdt'>Find Image Files via Datetime Tutorial<\/a>&#8216;s &#8230;<\/p>\n<blockquote>\n<ul>\n<li>versus a nominated file&#8217;s creation date<\/li>\n<li>versus a nominated file&#8217;s last access date<\/li>\n<li>versus a nominated file&#8217;s last modified date<\/li>\n<li>relative to now, an offset (where that be positive or negative) in (numerical) days<\/li>\n<li>relative to now, an offset (where that be positive or negative) in (numerical) hours<\/li>\n<li>relative to now, an offset (where that be positive or negative) in (numerical) minutes<\/li>\n<li>relative to now, an offset (where that be positive or negative) in (numerical) seconds<\/li>\n<\/ul>\n<\/blockquote>\n<p> &#8230; we&#8217;re pretty sure a fair few readers would have been wondering why there was no &#8230;<\/p>\n<p><code><br \/>\nrelative to a fully specified datetime<br \/>\n<\/code><\/p>\n<p> &#8230; functionality component choice in yesterday&#8217;s work.  The short answer is that this fairly obvious option improvement is a lot of work, and we may never have offered it except for the fact that we had an existing <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/away_off.php\">away_off.php web application<\/a> &#8230;<\/p>\n<p><iframe style=\"width:100%;height:600px;\" src=\"https:\/\/www.rjmprogramming.com.au\/PHP\/away_off.php\"><\/iframe><\/p>\n<p> &#8230; which <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/PHP\/away_off.php--GETME\">we could nuance<\/a> to <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/away_off.php--GETME\">be an away_off.php tool<\/a> as well &#8230;<\/p>\n<p><iframe style=\"width:100%;height:100px;\" src=\"https:\/\/www.rjmprogramming.com.au\/PHP\/away_off.php?juststart=y\"><\/iframe><\/p>\n<p> &#8230; just via a &#8230;<\/p>\n<p><code><br \/>\n?juststart=y<br \/>\n<\/code><\/p>\n<p> &#8230; addition to any usual address bar URL invocation, and used within an HTML iframe element by the <a target=_blank title='find_images_via_size.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php-------------GETME'>newly changed<\/a> <a target=_blank title='find_images_via_size.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php-------------GETME'>find_images_via_size.php<\/a> <a target=_blank title='Helper' href='http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php'>web application<\/a>.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/find-image-files-via-specified-datetime-tutorial\/'>Find Image Files via Specified Datetime Tutorial<\/a>.<\/p-->\n<hr>\n<p id='fifdt'>Previous relevant <a target=_blank title='Find Image Files via Datetime Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/find-image-files-via-datetime-tutorial\/'>Find Image Files via Datetime Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Find Image Files via Datetime Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size_datetime.jpg\" title=\"Find Image Files via Datetime Tutorial\" style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Find Image Files via Datetime Tutorial<\/p><\/div>\n<p>Onto yesterday&#8217;s <a title='Find Image Files via Filesize Tutorial' href='#fifft'>Find Image Files via Filesize Tutorial<\/a>&#8216;s optional new filtering via &#8230;<\/p>\n<ul>\n<li>allow case insensitive file specifications<\/li>\n<li>allow filesize user control &#8230; we add, today &#8230;<\/li>\n<li><font color=blue>datetime user control<\/font><\/li>\n<\/ul>\n<p> &#8230; and we figure, regarding datetime thoughts, you might be interested in <i>newer<\/i> or <i>older<\/i> or <i>exact<\/i> datetime comparisons via &#8230;<\/p>\n<ul>\n<li>versus a nominated file&#8217;s creation date<\/li>\n<li>versus a nominated file&#8217;s last access date<\/li>\n<li>versus a nominated file&#8217;s last modified date<\/li>\n<li>relative to now, an offset (where that be positive or negative) in (numerical) days<\/li>\n<li>relative to now, an offset (where that be positive or negative) in (numerical) hours<\/li>\n<li>relative to now, an offset (where that be positive or negative) in (numerical) minutes<\/li>\n<li>relative to now, an offset (where that be positive or negative) in (numerical) seconds<\/li>\n<\/ul>\n<p> &#8230; all this explained in today&#8217;s datetime functionality new &#8220;blurb&#8221; &#8230;<\/p>\n<blockquote><p>\nMatching datetime value where + (first character) for newer than and &#8211; (first character) for older than and neither for exact creation date match of specified relative or absolute filename to follow, and if not a filename then suffix M is modified datetime and A is accessed datetime and C is created datetime for middle value number [0] of suffixing s for seconds and m for minutes and h for hours and d for days, relative to (datetime) now.\n<\/p><\/blockquote>\n<p>We needed to use datetimes on either side of the client (Javascript) and server (PHP) side ledger to make this work.  Luckily, there is a common <i>integer<\/i> &#8220;seconds since the 1970 epoch&#8221; way these two woooooorrrrrrlllllddddssss can come together regarding datetimes.  We weren&#8217;t sure, regarding timezones, so we wrote some <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/check_1970.php_GETME\">check_1970.php<\/a> <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/check_1970.php\">PHP<\/a> to prove it to ourselves &#8230;<\/p>\n<p><iframe style=\"width:100%;height:350px;\" src=\"https:\/\/www.rjmprogramming.com.au\/PHP\/check_1970.php\"><\/iframe><\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n\/\/ check_1970.php<br \/>\n\/\/ RJM Programming<br \/>\n\/\/ July, 2023<br \/>\n<br \/>\n$ideaf=sys_get_temp_dir() . DIRECTORY_SEPARATOR . \"xyz_\" . rand(0,34567892) . '.txt';<br \/>\nfile_put_contents($ideaf, '');<br \/>\n$dts=filectime($ideaf);<br \/>\nunlink($ideaf);<br \/>\n<br \/>\necho \"&lt;html&gt;<br \/>\n&lt;head&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body&gt;<br \/>\n&lt;h1&gt;Client Javascript and Server PHP Datetime Seconds Since 1970 Understanding&lt;\/h1&gt;<br \/>\n&lt;h3&gt;RJM Programming - July, 2023&lt;\/h3&gt;<br \/>\n&lt;script type=text\/javascript&gt;<br \/>\n<br \/>\n  document.write('&lt;p&gt;Javascript:  var dts=Math.floor(eval(eval(\\\"\\\" + (new Date()).getTime()) \/ 1000.0)); is ' + Math.floor(eval(eval('' + (new Date()).getTime()) \/ 1000.0)) + '&lt;br&gt;PHP: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\\$dts=filectime(sys_get_temp_dir() \\. \\\"xyz_\\\" \\. rand(0,34567892) \\. \\\".txt\\\"); is \" . $dts . \"&lt;\/p&gt;');<br \/>\n<br \/>\n&lt;\/script&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<br \/>\n\";<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; for <a target=_blank title='find_images_via_size.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php------------GETME'>newly changed<\/a> <a target=_blank title='find_images_via_size.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php------------GETME'>find_images_via_size.php<\/a> <a target=_blank title='Helper' href='http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php'>web application<\/a>.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/find-image-files-via-datetime-tutorial\/'>Find Image Files via Datetime Tutorial<\/a>.<\/p-->\n<hr>\n<p id='fifft'>Previous relevant <a target=_blank title='Find Image Files via Filesize Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/find-image-files-via-filesize-tutorial\/'>Find Image Files via Filesize Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Find Image Files via Filesize Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size_nuanced.jpg\" title=\"Find Image Files via Filesize Tutorial\" style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Find Image Files via Filesize Tutorial<\/p><\/div>\n<p>The last time we talked about our inhouse PHP Image File Finder web application (we nickname &#8220;Kevin&#8221; around here) was with <a title='Relative Image URL Data URI Relationship Primer Tutorial' href='#riurldurirpt'>Relative Image URL Data URI Relationship Primer Tutorial<\/a> and am sure you&#8217;d agree with me regarding today&#8217;s sentiment &#8230;<\/p>\n<blockquote><p>\nKevin &#8230; we need to talk\n<\/p><\/blockquote>\n<p> &#8230; because we think <i>PHP Image File Finder web application<\/i> &#8230; you need to &#8230;<\/p>\n<blockquote><p>\nBring home the Bacon,<br \/>\nLest we feel <sub>in<\/sub>Kline<sup>d<\/sup>,<br \/>\nWithin the Space<sup>y<\/sup> realms twixt &#8230;<br \/>\nRudd<sub>er<\/sub><sup>less<\/sup> sea and air,<br \/>\nWe lose H<s style=color:red;>e<\/s>art,<br \/>\nJ<s style=color:red;>&#8216;<\/s>a<s style=color:red;>i<\/s>me<sub>&#8216;s<\/sub>, to thee &#8230;<br \/>\nThy true Love of thine,<br \/>\nIn pursuit of Dur<sup>ant<\/sup> in &#8216;mongst thy throng,<br \/>\nCounting the Cost<sup>ne<s style=color:red;>a<\/s>r<\/sup> of supine &#8230;<br \/>\nPolla<s style=color:red;>x<\/s><sup>k<\/sup><sub>ed<\/sub> perfid<sub>id<\/sub><sup>id<\/sup>ity\n<\/p><\/blockquote>\n<p> &#8230; because we <i>know<\/i> you get where we are coming at here.<\/p>\n<p>But just in case, we wanted to offer two new &#8220;filtering&#8221; functionalities in front of the &#8220;image scrutiny via dimensions&#8221; paradigm currently happening, that being &#8230;<\/p>\n<ul>\n<li>allow case insensitive file specifications<\/li>\n<li>allow filesize user control<\/li>\n<\/ul>\n<p> &#8230; via new initialization PHP code as per &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n$casei=false;<br \/>\n$sizei=\"\";<br \/>\n$minusname=\" -name '\";<br \/>\n$plusname=\"'\";<br \/>\n$optthbit=\"&lt;th id=thvarious&gt;&lt;select onchange=\\\"document.getElementById('tdvarious').innerHTML='&amp;#10060;';\\\" id=svarious&gt;&lt;option value=casei&gt;Case Insensitive?&lt;\/option&gt;&lt;option value=sizei&gt;Size Match?&lt;\/option&gt;&lt;\/select&gt;&lt;\/th&gt;\";<br \/>\n$opttdbit=\"&lt;th id=tdvarious title='Click to toggle' onclick=\\\"  this.innerHTML=(eval('' + this.innerHTML.length) != 1 ? '&amp;#10060;' : maybenotjusttick('&amp;#10004;   ')); if (eval('' + this.innerHTML.length) &gt; 1) { document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=' + encodeURIComponent(this.innerHTML) + '&gt;&lt;\/input&gt;'; } else { document.getElementById('divmyrform').innerHTML=document.getElementById('divmyrform').innerHTML.replace(' name=' + String.fromCharCode(34) + document.getElementById('svarious').value, ' data-name=' + String.fromCharCode(34) + document.getElementById('svarious').value);  document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=&gt;&lt;\/input&gt;'; }\\\"&gt;&amp;#10060;&lt;\/th&gt;\";<br \/>\nif (isset($_GET['casei'])) { if ($_GET['casei'] != '') { $casei=true; $minusname=\" -iname '\"; $plusname=\"' \"; } }<br \/>\nif (isset($_GET['sizei'])) { if (str_replace('%25E2%259C%2594%2520%2520%2520','',$_GET['sizei']) != '') {<br \/>\n   $sizei=str_replace('%2B', '+',str_replace('%252B', '+', $_GET['sizei']));<br \/>\n   $plusname=\"' -size \" . str_replace('%2B', '+',str_replace('%252B', '+', $_GET['sizei'])) . \" \";<br \/>\n   $optthbit=\"&lt;th id=thvarious&gt;&lt;select onchange=\\\"document.getElementById('tdvarious').innerHTML='&amp;#10060;';\\\" id=svarious&gt;&lt;option value=sizei&gt;Size Match?&lt;\/option&gt;&lt;option value=casei&gt;Case Insensitive?&lt;\/option&gt;&lt;\/select&gt;&lt;\/th&gt;\";<br \/>\n   $opttdbit=\"&lt;th id=tdvarious title='Click to toggle' onclick=\\\"  this.innerHTML=(eval('' + this.innerHTML.length) != 1 ? '&amp;#10060;' : maybenotjusttick('&amp;#10004;   ')); if (eval('' + this.innerHTML.length) &gt; 1) { document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=' + encodeURIComponent(this.innerHTML) + '&gt;&lt;\/input&gt;'; } else { document.getElementById('divmyrform').innerHTML=document.getElementById('divmyrform').innerHTML.replace(' name=' + String.fromCharCode(34) + document.getElementById('svarious').value, ' data-name=' + String.fromCharCode(34) + document.getElementById('svarious').value);  document.getElementById('divmyrform').innerHTML+='&lt;input type=hidden name=' + document.getElementById('svarious').value + ' value=&gt;&lt;\/input&gt;'; }\\\"&gt;\" . $sizei . \"&lt;\/th&gt;\";<br \/>\n}<br \/>\n}<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; augmented by new PHP functions &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\nfunction maybesizewrong($inspc) {<br \/>\n  global $sizei;<br \/>\n  $ourvv=0;<br \/>\n  if (trim($sizei) != \"\") {<br \/>\n     $vss=filesize($inspc);<br \/>\n     if (substr($sizei,0,1) == '+') {<br \/>\n       if (strpos($sizei, \"G\") !== false) {<br \/>\n        $ourvv=(1073741824 * explode(\"G\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"M\") !== false) {<br \/>\n        $ourvv=(1048576 * explode(\"M\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"k\") !== false) {<br \/>\n        $ourvv=(1024 * explode(\"k\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"c\") !== false) {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,1))[0]);<br \/>\n       } else {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,1))[0]);<br \/>\n       }<br \/>\n       \/\/echo $ourvv . ' and vss=' . $vss;<br \/>\n       \/\/exit;<br \/>\n       if ($vss &lt;= $ourvv) { return false;   }<br \/>\n     } else if (substr($sizei,0,1) == '-') {<br \/>\n       if (strpos($sizei, \"G\") !== false) {<br \/>\n        $ourvv=(1073741824 * explode(\"G\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"M\") !== false) {<br \/>\n        $ourvv=(1048576 * explode(\"M\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"k\") !== false) {<br \/>\n        $ourvv=(1024 * explode(\"k\", substr($sizei,1))[0]);<br \/>\n       } else if (strpos($sizei, \"c\") !== false) {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,1))[0]);<br \/>\n       } else {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,1))[0]);<br \/>\n       }<br \/>\n       if ($vss &gt;= $ourvv) { return false;   }<br \/>\n     } else {<br \/>\n       if (strpos($sizei, \"G\") !== false) {<br \/>\n        $ourvv=(1073741824 * explode(\"G\", substr($sizei,0))[0]);<br \/>\n       } else if (strpos($sizei, \"M\") !== false) {<br \/>\n        $ourvv=(1048576 * explode(\"M\", substr($sizei,0))[0]);<br \/>\n       } else if (strpos($sizei, \"k\") !== false) {<br \/>\n        $ourvv=(1024 * explode(\"k\", substr($sizei,0))[0]);<br \/>\n       } else if (strpos($sizei, \"c\") !== false) {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,0))[0]);<br \/>\n       } else {<br \/>\n        $ourvv=(1 * explode(\"c\", substr($sizei,0))[0]);<br \/>\n       }<br \/>\n       if ($vss != $ourvv) { return false;   }<br \/>\n     }<br \/>\n  }<br \/>\n  return true;<br \/>\n}<br \/>\n<br \/>\nfunction maybecasei($inspc) { \/\/ wrapper for PHP glob file specification<br \/>\n  global $casei;<br \/>\n  $arrlc = array(\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\");<br \/>\n  $outspc=$inspc;<br \/>\n  if ($casei) {<br \/>\n    if (strpos($inspc, \"[\") === false && strpos($inspc, \"]\") === false) {<br \/>\n     foreach ($arrlc as $value) {<br \/>\n       if (strpos($outspc, strtoupper($value)) !== false) {<br \/>\n          $outspc=str_replace(strtoupper($value), '!@~', $outspc);<br \/>\n          $outspc=str_replace($value, \"[\" . $value . strtoupper($value) . \"]\", $outspc);<br \/>\n          $outspc=str_replace('!@~', \"[\" . strtoupper($value) . $value . \"]\", $outspc);<br \/>\n       } else {<br \/>\n          $outspc=str_replace($value, \"[\" . $value . strtoupper($value) . \"]\", $outspc);<br \/>\n       }<br \/>\n     }<br \/>\n    }<br \/>\n  }<br \/>\n  return $outspc;<br \/>\n}<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; and by one new PHP writes Javascript function &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n function maybenotjusttick(indef) {<br \/>\n    var outdef=indef;<br \/>\n    if (document.getElementById('svarious').value == 'sizei') {<br \/>\n      outdef=prompt('Matching size value where + (first character) for larger than and - (first character) for smaller than and neither for exact match.  Suffix c is bytes and k is kilobytes and M is megabytes and G is gigabytes.', '+-1c');<br \/>\n      if (outdef == null) { return indef; } else if (outdef.trim() != '') { return outdef; } else { return indef; }<br \/>\n    }<br \/>\n    return indef;<br \/>\n }<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; to add to web browser address bar $_GET form created arguments for &#8220;casei&#8221; and &#8220;savei&#8221; respectively in <a target=_blank title='find_images_via_size.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php-----------GETME'>newly changed<\/a> <a target=_blank title='find_images_via_size.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php-----------GETME'>find_images_via_size.php<\/a> <a target=_blank title='Helper' href='http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php'>web application<\/a>.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/new-relative-image-url-data-uri-relationship-primer-tutorial\/'>New Relative Image URL Data URI Relationship Primer Tutorial<\/a>.<\/p-->\n<hr>\n<p id='riurldurirpt'>Previous relevant <a target=_blank title='Relative Image URL Data URI Relationship Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/relative-image-url-data-uri-relationship-primer-tutorial\/'>Relative Image URL Data URI Relationship Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Relative Image URL Data URI Relationship Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/finddatauri.jpg\" title=\"Relative Image URL Data URI Relationship Primer Tutorial\" style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Relative Image URL Data URI Relationship Primer Tutorial<\/p><\/div>\n<p>Yesterday&#8217;s <a title='Notes PDF Email Attachments Primer Tutorial' href='#npdfeapt'>Notes PDF Email Attachments Primer Tutorial<\/a>, &#8220;under the hood&#8221;, had an interesting piece of HTML regarding that &#8220;snippety&#8221; <a href='#duimg'>mid-posting image<\/a> <font color=blue>(shortened regarding that image&#8217;s <a target=_blank href='https:\/\/en.wikipedia.org\/wiki\/Data_URI_scheme' title='Data URI information from Wikipedia ... thanks'>data URI<\/a>)<\/font> &#8230;<\/p>\n<blockquote><p>\n&lt;!&#8211;img src=&#8217;http:\/\/www.rjmprogramming.com.au\/Mac\/iPhone\/bitof.jpg&#8217;&gt;&lt;\/img&#8211;&gt;<br \/>\n&lt;img src=<font color=blue>[data URI of image]<\/font>&gt;&lt;\/img&gt;\n<\/p><\/blockquote>\n<p> &#8230; which reads, to me, that &#8230;<\/p>\n<ul>\n<li>we initially called a <i>Relative Image URL<\/i> (presented in an <i>Absolute<\/i> guise) (ie. a file existed on our RJM Programming web server called bitof.jpg) &#8230; methodology undone in favour of &#8230;<\/li>\n<li>substitute the <i>Relative Image URL<\/i> with that <i>Relative Image URL&#8217;s Data URI<\/i> <a href='#duimg'>for the image you see on this blog posting<\/a><\/li>\n<\/ul>\n<p> &#8230; with these implications, where &#8230;<\/p>\n<ul>\n<li>you save on our Linux web server&#8217;s <a target=_blank title='Inode count information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Inode'>inode count<\/a> &#8230; at the expense of &#8230;<\/li>\n<li>you further burden the MySql database with a larger blog posting<\/li>\n<\/ul>\n<p> &#8230; and at the moment, for us, the former beats the latter for priority.<\/p>\n<p>But, how did we arrive at the real data for <font color=blue>[data URI of image]<\/font>?  We decided to tweak <a target=_blank href='https:\/\/www.rjmprogramming.com.au\/ITblog\/php-imagemagick-image-dimensions-primer-tutorial\/' title='PHP ImageMagick Image Dimensions Primer Tutorial'>PHP ImageMagick Image Dimensions Primer Tutorial<\/a>&#8216;s and <a target=_blank href='https:\/\/www.rjmprogramming.com.au\/ITblog\/pdf-image-and-text-nodes-windows-files-tutorial\/' title='PDF Image and Text Nodes Windows Files Tutorial'>PDF Image and Text Nodes Windows Files Tutorial<\/a>&#8216;s <a target=_blank title='find_images_via_size.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php----------GETME'>newly changed<\/a> <a target=_blank title='find_images_via_size.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php----------GETME'>find_images_via_size.php<\/a> <a target=_blank title='Helper' href='http:\/\/www.rjmprogramming.com.au\/PHP\/find_images_via_size.php'>web application<\/a>, by adding double click event logic on any image hovered over.  That double click causes a popup window to open, whereby an image element HTML (featuring a data URI image &#8220;src&#8221; attribute (ie. decoupled from any web server ties)) is presented ready for any user Select All\/Copy\/Paste\/Cut user arrangements.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/relative-image-url-data-uri-relationship-primer-tutorial\/'>Relative Image URL Data URI Relationship Primer Tutorial<\/a>.<\/p-->\n<hr>\n<p id='npdfeapt'>Previous relevant <a target=_blank title='Notes PDF Email Attachments Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/notes-pdf-email-attachments-primer-tutorial\/'>Notes PDF Email Attachments Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/Mac\/iPhone\/notes_pdf.gif\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"Notes PDF Email Attachments Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/Mac\/iPhone\/notes_pdf.gif\" title=\"Notes PDF Email Attachments Primer Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">Notes PDF Email Attachments Primer Tutorial<\/p><\/div>\n<p>Have you ever been asked to send PDF document(s), filled in, via email, and you &#8220;roll&#8221; with iOS (ie. using an iPhone or iPad)?   Have you considered the &#8220;<a target=_blank href='https:\/\/apps.apple.com\/us\/app\/notes\/id1110145109' title='Notes app on iOS information'>Notes<\/a> approach&#8221;?  It being a &#8220;total <a target=_blank title='Apple' href='http:\/\/apple.com'>Apple<\/a> solution&#8221;, it feels like a &#8220;planned for&#8221; approach that may stick in your mind.<\/p>\n<p>So, first off, you create a note in Notes made up of PDF document(s), filled in, as applicable &#8230;<\/p>\n<p><!--img src='http:\/\/www.rjmprogramming.com.au\/Mac\/iPhone\/bitof.jpg'><\/img--><br \/>\n<img id=duimg src=data:image\/jpeg;base64,\/9j\/4AAQSkZJRgABAQAASABIAAD\/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABYKADAAQAAAABAAAAuAAAAAD\/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+\/+IH2ElDQ19QUk9GSUxFAAEBAAAHyGFwcGwCIAAAbW50clJHQiBYWVogB9kAAgAZAAsAGgALYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABvZHNjbQAAAXgAAAWKY3BydAAABwQAAAA4d3RwdAAABzwAAAAUclhZWgAAB1AAAAAUZ1hZWgAAB2QAAAAUYlhZWgAAB3gAAAAUclRSQwAAB4wAAAAOY2hhZAAAB5wAAAAsYlRSQwAAB4wAAAAOZ1RSQwAAB4wAAAAOZGVzYwAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAAAAAAAAAAAAAFEdlbmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAHwAAAAxza1NLAAAAKAAAAYRkYURLAAAAJAAAAaxjYUVTAAAAJAAAAdB2aVZOAAAAJAAAAfRwdEJSAAAAJgAAAhh1a1VBAAAAKgAAAj5mckZVAAAAKAAAAmhodUhVAAAAKAAAApB6aFRXAAAAEgAAArhrb0tSAAAAFgAAAspuYk5PAAAAJgAAAuBjc0NaAAAAIgAAAwZoZUlMAAAAHgAAAyhyb1JPAAAAJAAAA0ZkZURFAAAALAAAA2ppdElUAAAAKAAAA5ZzdlNFAAAAJgAAAuB6aENOAAAAEgAAA75qYUpQAAAAGgAAA9BlbEdSAAAAIgAAA+pwdFBPAAAAJgAABAxubE5MAAAAKAAABDJlc0VTAAAAJgAABAx0aFRIAAAAJAAABFp0clRSAAAAIgAABH5maUZJAAAAKAAABKBockhSAAAAKAAABMhwbFBMAAAALAAABPBydVJVAAAAIgAABRxlblVTAAAAJgAABT5hckVHAAAAJgAABWQAVgFhAGUAbwBiAGUAYwBuAP0AIABSAEcAQgAgAHAAcgBvAGYAaQBsAEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAHAAcgBvAGYAaQBsAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDoAHIAaQBjAEMepQB1ACAAaADsAG4AaAAgAFIARwBCACAAQwBoAHUAbgBnAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8EFwQwBDMEMAQ7BEwEPQQ4BDkAIAQ\/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUAByAG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCAMEAbAB0AGEAbADhAG4AbwBzACAAUgBHAEIAIABwAHIAbwBmAGkAbJAadSgAUgBHAEKCcl9pY8+P8Md8vBgAIABSAEcAQgAg1QS4XNMMx3wARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A\/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAQQBsAGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbABQAHIAbwBmAGkAbABvACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjAG9mbpAaAFIARwBCY8+P8GWHTvZOAIIsACAAUgBHAEIAIDDXMO0w1TChMKQw6wOTA7UDvQO5A7oDzAAgA8ADwQO\/A8YDrwO7ACAAUgBHAEIAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOkAcgBpAGMAbwBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBlAGwOQg4bDiMORA4fDiUOTAAgAFIARwBCACAOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAAUgBHAEIAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBCACAAcAByAG8AZgBpAGwAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBpAGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ\/BEAEPgREBDgEOwRMACAAUgBHAEIARwBlAG4AZQByAGkAYwAgAFIARwBCACAAUAByAG8AZgBpAGwAZQZFBkQGQQAgBioGOQYxBkoGQQAgAFIARwBCACAGJwZEBjkGJwZFAAB0ZXh0AAAAAENvcHlyaWdodCAyMDA3IEFwcGxlIEluYy4sIGFsbCByaWdodHMgcmVzZXJ2ZWQuAFhZWiAAAAAAAADzUgABAAAAARbPWFlaIAAAAAAAAHRNAAA97gAAA9BYWVogAAAAAAAAWnUAAKxzAAAXNFhZWiAAAAAAAAAoGgAAFZ8AALg2Y3VydgAAAAAAAAABAc0AAHNmMzIAAAAAAAEMQgAABd7\/\/\/MmAAAHkgAA\/ZH\/\/\/ui\/\/\/9owAAA9wAAMBs\/8AAEQgAuAFgAwEiAAIRAQMRAf\/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC\/\/EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29\/j5+v\/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC\/\/EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29\/j5+v\/bAEMAAwMDAwMDBQMDBQcFBQUHCgcHBwcKDQoKCgoKDQ8NDQ0NDQ0PDw8PDw8PDxISEhISEhUVFRUVGBgYGBgYGBgYGP\/bAEMBBAQEBgYGCwYGCxkRDhEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGf\/dAAQAFv\/aAAwDAQACEQMRAD8A\/RgtzTC3NN604RSuMquRQAm40bjTvs9wOAtHkXH92gBu40bjTvIuP7tHkXH92gBu40bjTvIuP7tNNvcZ+7QAbjRuNKLe4x92l8i4\/u0AN3Gjcad5Fx\/dppt7jP3aADcaNxo+z3H92j7Pcf3aADcaNxo+z3H92j7Pcf3aADcaNxpRb3GPu0ht7jP3aADcaNxo+z3H92j7Pcf3aADcaNxpRb3GPu0vkXH92gBu40bjQbe4z92lFvcY+7QAm40bjTvIuP7tNNvcZ+7QAbjRuNH2e4\/u0fZ7j+7QAbjS7qBbz\/3aaUZDh+KAJVapQ3NVlYdqlHJoAsBualXk1XXrUy0AWFqZarrUy0ATjrUo6VAOtSrQBIvWpR1qMdalHSgB9OFRjrTh1oAkPWlHSm04dKAP\/9D9HbOFXYyP0XpWhVex\/wBR\/wACqyepoASiuB8bfEnw34CezttUF1eX+osUtNPsIWuLmYqMnZGnPHcnAHc9K5NPj14Gbw3q2vvFqFvNoiqb3TriAw3sW\/ATMUhXIYkYOcY78GgD2wdKWgElFcrwwyP8inlHAyy0AMpp607a2N2zA9aQKx5xketADaKkALjIWsTXtbsPDWiXviDVSVtbCJp5di7mCKMnA79O1AGx2po6V43ofx48Ea5qFhp8lvquknUyBZS6nZSWsNwWxtWKVgY2LA5HzcjkZzXd+CfF+m+O9D\/4SLR4po7czSwgTABt0TbTkKWHXpzQB1VFPCsc7RnHWsG48RaNba7B4ZmmC6jdQtcRQ7TkonBOenY\/kfSgDbopdjAfdyOeaaAScCgBaKVldcZXOaRsx5JBGATgDPAFABRXJ+GvGug+LNJudZ0mVvItJpYJg67GV4Th1I7Y\/wD14rL8MfEjTPGM1nJoNhqEthfRySR6h5WLbMTFChfdwxIOBjpzx2APQB1p9cn4w8Zab4Jg0+bVI5ZF1K+isYfKCnEkpwC25hheOSM\/SuuKtjdtyDQBGetJT9pIyFpnJ6jFABRRXmPxP8Z674StNKtvDFtbXOqa1fx2FuL0sLdGcE7n8shyMjoOf5EA9Oor5W1X4ofEfw9fvpOueK\/htY3cRy0Nxc3cci9xuUuCMg56dDS+EP2iLQ+MB4X8deIPCU0M9uZ4L\/R70iAPnHlSGd+H6kAdsdc8AH1QOtDxrKpRu\/So4ZYZ40nt3Ekcih1dTkEEZBBFTjvQBhMuxyvpT16066\/1xqMdaALC1MtV1qwvagCZamXrUK1MvWgCZamWoVqZaAJR1p9Rd6lHSgBy08daYtSUAOpw6U0dKcOlAH\/\/0f0lsf8AUf8AAqst1\/Gqlj\/qP+BVaPU0AfOmqXdnon7S1leeIXSCHVPDz2emSSkIpnWYNJGrngOy4wO+MVy37QmveAtb8HeL9N0V4LjxBa6fAt3dW8SsyQvKpWJ5gAAxI3CPJIPOK+lfEnhTw34x05tI8U6bbanaN83lXMayAEdCNwOCOxHIrN034feBdI0J\/C+m6LZQaXMd0lqkKeU7ZBy64wxyBycngegoA+YPF+k3Hwk8X2x+Hb3YudW8OajNdRSTzTi4uLeMOsxWRm\/eEg8jGM8AVgWdl4d8J6Z8O\/Gnw71aa98T6\/eWcd+TeyXDagsy5uvNiZ3AETEnhRs2+9fcEmi6RNqFvq0tpE13aK8cMxQF41kGGCtjIDAAHHUda5\/R\/h34B8P6zL4g0LQNOstRnLGS5gt445Tu5OWVQeep9TQB8Uzx6JZ\/Dex+LGn6pP8A8LAm1ZUkP2uVpHna5KPZmAybdipwE8vgDNbvxBtIdK8V6\/448RSx+IrCyuYQbnTdXe01HRgNoMS2x\/dMM8jHzNkivriP4d+AIvER8WwaDp6aux3G9W3jExJ7lwu7PvnNGp\/DvwFrOtR+I9V0HT7nU48bbuW3jaYbenzld3HY5oA+I\/Eg1vx\/4v8AGd7qCW8kukBP7KuL\/W5tKewgMW+O4SFEKtknc7ueSSK+lfFE2rz\/ALOWoya3dw3t+dCfzbm2O+KVvLOHVsDcG4Occ9a9L134e+A\/FN9DqviTQdP1G7tgBFNcQRyOoHIAZlJxnt0robnTtPvrB9LvLeKa1kTY0LKChXGNpU8Ee1AHyxoPgz4o\/ETwr4QsPFX9j6d4d0xLS\/BtJJpby4MEYMakOiJHkY37SSK8c0zwpp+k\/BiX4nWM93Fr9nrkjQXSXEqiNDdbWhCK3l7CCc7lyep5Nfohb2ltaWiWNtEsUESCNIkACqgGAoHQADgCsVvCnhhtLOhnTLX7C7+Ybbyl8ouWLlimNudxyeOvPWgD5Pv9N8K+OfGHj66+J+pS2134fVf7Mja8e1W0txFvW4iRHQF2f+I5z0ri\/CmnWfiTx78PvE\/i6Ezavd+Hbi4ElxLJG1xNbsRbuV3gbiFU4wd1famu\/DzwH4pu7e\/8S6DYajc2oxBLcwRyMgHOAzKTj26Vf1Pwn4X1xrJ9X0uzvH091ezM0KMYGXo0ZIJUj1XBoA+DjHof\/Cqm+LI1m5\/4WD\/aZVZheSrMJxPs+y\/Z94XYY8fKI+n519KfH7WdY074bW00FxLp6Xl7Z2+o3MDBHgt5WxMQwwY8fdYgjAr0s\/DnwCdf\/wCErOg2H9rjGL028Zm4AA+fbu4AAHPTiuqvrKy1K1k07UII7q2nXbLFKoZGU9ip4IoA+E\/HFhonw+1nV\/DHwtvZhpl74Yubq\/toruW6SKWMjyZgXeTy2fPUEZ619QfCDwdovhbwXp91pvnSXOqWdvPd3FxPJO8shjHJMjsB1xhcDFdBo\/w4+H\/h+xutL0bQdPtLS9H+kxRQRqsg9HAX5h7Guvt7eC0gjtbVFihiUJGiABVUDAAA4AA6AUAfGHxE1PUPh34n8TeCNKDKfiFHC+mKvGLqYiG5x9Uyx9zWl4zi1T4feKdO0Xwk0gfSPBd0tvHGSf3seR5m37pPUgnuK+rb3QtE1O+tNS1Cxt7i7sGLWs0sas8TMMEoxGVJHpUsmkaTLqUesy2kL30SGFLhkBkVG5KhsZCk84zigD4C1PQPAWn+Hfhp4j0HVZrrWNY1eylvC9405u2PzSPLGzMNyPxgIMdPespYPFnihdf8ZXU1hZ+IbLWpIY9WvddmtpLJY5QEh+yBDHsK9ifnzX3RafC74a2F4+o2XhzTIrmSUTmVLWIMZFOQ2QudwPOetXL74deAdT11PE+o6Dp9xqseNt5LbxtMMAY+cru4AwOeAKAPjt7LQPGFl4+8VfE3VpLfxJoMjpYmO9kgFmscatE9uiuikSP32Hdn3r64+GWp6zrXw70HVfEIb7fc2MUk5cYYsR1YepGCaua18O\/APiPVItd1\/QdPvr632mO5uIEkkXbjbhipIxjiuuwBwowB2FABXgnx3vINHj8JeI9QEiadpWvQ3F7MiPJ5cW0guyxgttBx0Fe904dDnpjJoA\/N2DxXo+o+DJ7HwT4o8PaH4j1nxLdXEVxqkUZM1sJBk7pIH2d9u\/bnkDmurvf2l\/gRrMmrfDma1tDMNOmgTWDawpZz3Sx4IT+NVZs7WPetLxt+wr4G8ZeKdQ8TjxBf2LajKZ3gSOORQ7dcE4PJ55zXMR\/8E8vA+4bvFOpOoIJXyYl4B9SWxx7UAfYXwcJPwt8M5OcWEY9eAMCvSl71heHNAsPC2gWHhzS9xtdPhSCIucsVQYBJHc1vDvQBjXf+vb8KjFSXf+vb8KjFAE69qmWoV7VMtAFhamXrUK1MvWgCZamWoVqZaAH96lHSou9SjpQA5akqNakoAcOlOHSmjpTh0oA\/\/9L9IbJ0EOCyg7u5xVkyxAnMij\/gVU7OCCWLMkSMfUqCTVg2dnn\/AFMf\/fK0AOM0Of8AWL\/31SiaHH+sX\/vqo\/sdn\/zxj\/75Wk+x2f8Azxj\/AO+VoAm86H\/nov8A31ThNDj\/AFi\/99VX+x2f\/PGP\/vlaX7HZ\/wDPGP8A75WgCUzQ5\/1i\/wDfVHnQ\/wDPRf8Avqovsdn\/AM8Y\/wDvlaBZ2ef9TH\/3ytAEvnQ\/89F\/76pwmhx\/rF\/76qJrOzx\/qY\/++R\/hTRZ2eP8AUx\/98rQBMZocf6xf++qaJocf6xf++qj+x2f\/ADxj\/wC+Vo+x2f8Azxj\/AO+VoAl86H\/nov8A31R50P8Az0X\/AL6qH7HZ\/wDPGP8A75Wj7HZ\/88Y\/++VoAm86H\/nov\/fVHnQ\/89F\/76qH7HZ\/88Y\/++Vo+x2f\/PGP\/vlaAJvOh\/56L\/31R50P\/PRf++qh+x2f\/PGP\/vlaPsdn\/wA8Y\/8AvlaAJvOh\/wCei\/8AfVHnQ\/8APRf++qh+x2f\/ADxj\/wC+Vo+x2f8Azxj\/AO+VoAsCaHH+sX\/vqjzof+ei\/wDfVRCzs8f6mP8A75Wl+x2f\/PGP\/vlaAJPOh\/56L\/31TTNDn\/WL\/wB9VGbOzz\/qY\/8AvlaT7HZ\/88Y\/++VoAl86H\/nov\/fVHnQ\/89F\/76qH7HZ\/88Y\/++Vo+x2f\/PGP\/vlaAJvOh\/56L\/31R50P\/PRf++qh+x2f\/PGP\/vlaPsdn\/wA8Y\/8AvlaAJvOh\/wCei\/8AfVOE0OP9Yv8A31Vf7HZ\/88Y\/++Vpfsdn\/wA8Y\/8AvlaAM+7IaclSCOOQc9qYtLcokcpSNQqjGABgfpSLQBYXtUy1CvaploAsLUy9ahWpl60ATLUy1CtTLQA\/vUo6VF3qUdKAHLUlRrUlADh0pw6U0dKcOlAH\/9P9I7H\/AFH\/AAKrZ\/rVSx\/1H\/Aqtn+tAGfPqml2cgiu7y3gkPRZJUU\/kSDUltfWN6GNjcRThfvGJ1cD\/vkmvm\/9p3wN4M1L4Z674ov9GsbjVoreONL6WFGmRBIuAHILADJ6etUfFlzo\/wAKZLHRvAN9oXgqLUbZbm5jh02S+vLmRAAn+jwAYQ5IMhOc8DmgD6el1GwguotPluYkubjJihLqJH2jJ2qfmOBycdO9W6\/P7WvjpbRXPw3+LXie33Ti21eJ47ZWQSTIGi+USEtEGIDN5n3ATnkV6H4r+Lnj3w9qWieENU1rT9N1DVLR9VutRt9Pmv4beDcPKggihP7zORumcgED5e1AH2ACOnes5dW0lpxareW7T9PLEilh\/wABzmvPfg9441fx34RbU9cgEV5a3E1q8qwSW6XAj4E6RS\/OiyDkBunNfGOn2\/w01DRvGmmX3hC81rxVLrd\/HZXNhpsskqyE4ixdooWPy25Y7xgUAfotHqFjNeS6fDcRSXMCB5YVYF0VuhZc5Ge2as9a+HPB+m\/Fy08feILSw1WysdXsNB05r+e7ga7aWWOL\/VD94uM9Gk5Y9a73Tfi54+8eQ+EvDvhVrPSNW16zmvL28mhNxFEtu\/lHyYt67izjPzMAF65NAH1QtNr4Q+JXjD4ka94bufDF\/qdtZ6r4c8R2VpPdWtudl0s\/zQS7TKPLIx8y7mB5A4r16TxH8XfE\/irXPC3hLV9N08eFYIUuru5szKb25lUvtCCUCGLA5IJIJoA+kaK8n8E\/EqTxH8Kh8QtStVhnt7WeS4giJKCS33K4QnJwSh256DrXksHxH+LWjeHtB+KPiC70y50PXLuCN9Jit2jlt4LlisbrclyZHAwWUqB2HHNAH1lTBNC0hiWRS69VB5H1FeDfCTxJ8SfG97qOua1qNlFo1hqF1p8Nnb2\/72QQnCu8pchcA42qpyBkkGofFDQ+A\/jTpPi+Q+Xpvia0fS75z0E8Q3wsfqvFAHuF\/rOj6bg6le29ruZUHnSKmWY4CjcRkkngVbu7q20+CS7v5kgghG55JSEVR6knAA+tfFEOp3CeHrn4tXVlZ3c\/i7xTbxwLeQrMFs4maOEoG6OMEqw6U\/xx4q+KHj74TeLvG1nd6bb+Hla5s49Ke2YyyQQyBGla4D5DkjIUIV555oA+2IpY541nhYOkgDKynIIPIII4IIp9fGmv\/GPXdL1PTvAOg6pb6Cum6FZ3U13PptzqTTSyxjZEqQA+WuANzE9+PStTw38XfiT8TrjR\/C\/htbbw5qUthLe6leXlrJMqrE+xFggkaNish5+fLBaAPrkdKWvKPhL411\/xTa6vpXitYP7W0C\/l0+5ltVKRTbORIqksV3AgkZ4Oa9W6DFAC009adTT1oASoLq7s7C3e7v547aFBl5ZWCqo9ycACp68G\/aFtoL3wlpFhdIssFzr1hFNE\/wAyyIztlWXBBXjnIoA3tb+N3gPTb+HSdIluPEt9MhkFv4dj\/tGSNOm+TySQgJ4GWHNWvDvxk+HviASwtqKaNeW7iKax1hlsbtGPTdDMVbn1GQc9a4XUtDSf4ln4ceCJYvBVhHpy6hczaNbwW91dln2BEk8sgJH1Y7Tya4b\/AIRO+8T634m0PxZeWWux+E7eRWur3TbWa5uopoHdI5Z9gaOWAjJKAZ60AfYSOkiCSMhlYZBByCKkHSvKfgczt8JPDXmEkizVefQMQB26AV6uO9AGLef69vw\/lUa1Ld\/69vwqMUATr2qZahXtUy0AWFqZetQrUy9aAJlqZahWploAf3qUdKi71KOlADlqSo1qSgBw6U4dKaOlOHSgD\/\/U\/SSx\/wBR\/wACq0epqtY\/6j\/gVWm\/rQByHjzwdY+PvCd54S1GV4IL1ArSR43DByMbgR1HpXJ+I\/hUNX8Sw+LNE1\/UNDvzZjTrtrQRMLi2Vg4XEsbhWByQ64YV6wOlLQB4f4d+A3hbQItBtvtd1ewaFFfwxpdbJPNW\/J8zzcr8xAYgdPxqjb\/AKz0iOxl8N+JNU0m80gzJYXcIikMFnN8zWrLIjB4VYZQNuK8AcAV79RQBgeGNAfw1ow0y41G81WUMxlur6TzJZHYkk9goz0UAADAArM8EeCrLwRa6haWFxJONRv59QcyYyrznJUYwMDtXZUDrQBxNn4E0+x8Va34viuZhPrlvFbzR\/LtTyVKKy8Zzg9zXBj4E6VaaNodp4f1nUNI1Pw95q2WqW\/lGTZOxZ45FeNkdDnoV6ge+fdDTB0oA8Nf4BeHpvCN54bn1TUJtQ1G8TUJ9WZkF011GQUcYTywAVGF2bcDGO9O1X4Lz3t9JrOk+KtU0nUL+2S11S4tVtwLsRjaGKvEwR1GQGTbjsBXuNFAHLeH\/AAZoHhnwpF4M06EnTYoGgKyEMzK+dxY4AJbcSeAOeleV6d8AdOs5rGxvvEWqX\/h\/SrgXVjo8xiMEUikldziPzXRCcorOQvHYYr32igDjvBXgmx8DWF7p9jPLcJeXs16zTY3B5zuYDAAxnp+vNVPiT8OtH+J\/hSXwtrMstvHJIkiSwY8xGQ9VyCOeQcjkEjvXeUUAec618MtD1nwro\/hMSy21pos9rNAYgu4m1+6GyOh5Ddz6157rH7PGnanZatoFp4k1aw8P6vI08+lQGER+Y5BO2QxGRVJGSgbbknivoiigDx7V\/g+k2qWmu+FfEGo+HNTgsk06e4s\/Kf7TFGMKJI5Y2UMP4XGCKr6n8F7ef+y9R0TxJq+n65pcDW66q0kdxPPDIcsk4njdXGeVGBt7dq9pooA4zwH4E0zwDpEunWM895NdTPc3d3dFTLPNJ953KhRk\/ToPxrtqQdKWgApp606mnrQAleb\/ABT8Fat448NwafoVzDa39newX1u1wpMTPA2QH2\/NtPfHNekUUAfLfi\/4d\/Gnxw9rPr0HhFLuyBNtd2dxqlrcRAjBCSxEOAT1Gam0PwB8bvDPh648L+HofBtjbXaSefNv1KWZmkUq0jtJkyPz1dv04r6eooA5LwJ4YPgvwdpXhZpxctp9usTSgbQzdSQMnAyePauwplOHSgDHu\/8AXt+H8qjFSXf+vb8P5UxaAJl7VMtQrUy0AWFqZetQrUy9aAJlqZahWploAf3qUdKi71KOlADlqSo1qSgBw6U4dKaOlOHSgD\/\/1f0at7d5YiRPLGPRdmP1UmpjaSf8\/cx\/79\/\/ABNPsv8Aj3\/4FVk9Kyk2thoom1l7XU\/\/AJD\/APiaUWs3\/P1N\/wCQ\/wD4mrdFTzSGVPssve6m\/wDIf\/xNL9ll7XU3\/kP\/AOJq4OlLRzSApfZZv+fqb\/yH\/wDE0fZZv+fqb\/yH\/wDE1dpO9HNICn9lm\/5+pv8AyH\/8TR9lm\/5+pv8AyH\/8TV1ulNHWjmkBUNrNj\/j6m\/8AIf8A8TSC1mx\/x9Tf+Q\/\/AImrzdKZRzSApm1k73U3\/kP\/AOJpRay9rqb\/AMh\/\/E1boo5pAUzayd7qb\/yH\/wDE0v2WT\/n6m\/8AIf8A8TVuijmkBT+yyf8AP1N\/5D\/+JpRay9rqb\/yH\/wDE1boo5pAUzayd7qb\/AMh\/\/E0otZe11N\/5D\/8Aiat0Uc0gKwtZsf8AH1N\/5D\/+Jpfsk3\/P1N\/5D\/8AiatDpS0c0gKRtZs\/8fU3\/kP\/AOJo+yzf8\/U3\/kP\/AOJq7TT1o5pAU\/ssve6m\/wDIf\/xNH2ST\/n6m\/wDIf\/xNW6UkcA9f5Uc0gKf2ST\/n6m\/8h\/8AxNJ9lk\/5+pv\/ACH\/APE0+K9sp3aG3uIpJE+8iOrMPqAcij7bZCf7N58Xnf8APLcN35daOaQDPs0va6n\/APIf\/wATTxayY5up\/wDyH\/8AE1bHSloTb3EzGmUpIVLM5H8TYyfyAFNWn3f+vP4fypi1shFhe1TLUK9qmWmBYWpl61CtTL1oAmWplqFamWgB\/epR0qLvUo6UAOWpKjWpKAHDpTh0po6U4dKAP\/\/W\/SOy\/wCPf\/gVWqrWf+o\/4FU56ms6m40fNnxc8YarpXjnSfDuq+JZvBfhy7tZJDqsMalproMoWAyyRvHCoX5snGTxWxp\/j7UPBHhaB\/Eepx+NX1K8Fvok2l+W1xeRkEqsgGyEMmDuYMFwMkhsiul8bSfEyy1ZLrw3pdh4l0SeDyrjS7mVLaVZQc+YskiOjKRwUbAHWvE9H+DPjvRJU8d6VY6ZZarBrDapb6BHPi0SGSLyZIRNt2iR1w24LszWYz2yH4rb9Mv7i68N6zDqunzRxPpYiV52aXOxkZGaJkPdw+FwdxGKx7v47aTpOja1qPiLR9R0270CSBLywlELzAXLYjZDHK6MGwTw2f64fi3RPjV418PO2oW1nZCO\/gmGjWl7JE89pHnzIpL5ACDITxtUKB1OTXmlv8CfGhsPFcdlpFho41wacbWyhu2n8v7NIWlEkkgHzYOeOucZOM0AfQ\/hX4nw+IvEtx4T1HRtQ0TUY4BdxR3wi\/ewFtodGikkHXgqcEenXHHeM7nxlrnxes\/BOheJLrQLNtGkvX+yRQSM8iyFfm8+NwBgdsV2U\/hPV5vi7a+NY0j\/ALNi0hrQsDh\/MaTfwvTbjiuW8ZaD8QrT4o2fjvwdo9prFvHpcmnyRTXos2Du+\/cGMchxjjAxQBQ0v4ha34B8Q654S+KOqR6jb6bYf2taamkKxSSQFtrRyRp8u9T90rgN35re0X40WF3qdpYeJtC1Lw4mpQNPp8+o+VsuVRS7cxSPtcIN21wOCPUZ4zU\/hB4w8e2\/iPX\/ABxc2VjrGr2SWVhbWjPLBaRxuJF3ybVaRmYfNhcDNLeeBfiT8SNQ0e18fafZaLp+gwy5ktLoXMl3NJH5QZV2R+VGBhiGJPagDsNF+NdrrE1pOPDusW+j6jM0FpqrpGYJGBABKrI0qIxyFdkAPHY1oN8YNDHgKP4hG0uTZyXIthDhfNDGXys8Ntxu569PyrmvBGmfGnw9p+k+BJtP0uHTdLH2eXVvtDSGe3T7ojt1VWjcjgszkDBwDwK8+u\/hr8XP+EKb4Y2enWD2FvqYvI9Se8O+SHzhJs8kRAh+uckg9BxQB6Jq\/wAfNL0i51n\/AIp\/Vbuy8PXX2bUr2BYjDCGx8wJfe\/Xoik\/StfRvjNpF\/qh0vW9LvtESSzfULSe9EW2e1jGS4Ecjsp24OxgGxziuWvPhj4qm8LfEDR1WDzvEl21xY5kAXYdn38fdPHSrnin4W614m1bRvNeKGzt\/D1zpd1JvyyzzIFBC9WUEdqANbQ\/jZp+rajp1vf6HqelWOtnbpl\/diMRXP3iMBZGdNwXK71XI5FZMP7QulT2o1j\/hHtWXRlvfsE+osIRDFLv2DcPNLlN3BZVIB4PORXDeAfgvqui6po1rq3g3Rrb+xXVn1b+0Lm4eYxjCPDbZCxyHA3F8qK6X\/hVfi4fBa78DCOE6nNftcqA\/ybTP5o+YD+71xxmgCx4U+M+tz6n4xk8XaVNaaT4emYpOvllo0WMMFZVkZiW+8No4BAODwfQ\/BvxFn8V3SW9z4d1TSUuYVurW4uUjaGaJuR88UkgRiOdr7TiuJ0nwb450HX\/GUdvp2nXun+IR9pglupCy+asexoJrdV3Mp\/vBqzPhj8O\/FnhvxeNTXS4vCujpbvHcaZaahLeW9zPz+8jib5IQOOF54wepoA+kzjPBzSUp6nnPNJQA4dKWkHSkPWgAPWkoooAKytdsrrUtD1DTbOTyprq3khjkJI2s6kAgjkYPPHNatZOvy38GhX8+kjN7HbSNBxnMgUlRjvzQB8sy+GNd+GbQ6D8OrbTbPWLXQvtl7cw2AuJ76SN8bSQyybSecctxwMVY0jR9P+NFkmtppFto\/jXRdQtnvr1rZoZZNhB3KXRZcOo+6449xgnT8L6\/4o8a63Ya\/wCGpoYfEVlpX2XVLTWrG8tow27JMciqoJB9CflxVK78S+LfDnie\/wBNtXW98V65qNn5sOn2FybSK2jUq7GaZPLPByTnrQB9Xg5x37flTqOO1FAGPd\/68\/h\/KmLUt1\/rz+H8qYtdC2EyZe1TLUK1YXtQImWpl61CtTL1oAmWplqFamWgB\/epR0qLvUo6UAOWpKjWpKAHDpTh0po6U4dKAP\/X\/SCzbchT0q7XHrq2whlj6fjVv\/hIs\/fhz\/wLFJ07sDoz1pR0rm\/+EjjH\/LFvwak\/4SRP+eLf99UvZWA6ajGa5seJowMeQx\/4FQfE0f8Az7t\/31R7K4HSdKTvXN\/8JJGefs7f99Uf8JJH\/wA+7f8AfVHsrAdK3SkHSub\/AOEkj\/592\/76pR4kj\/592\/76o9lcDpD0plc6fEkf\/Pu3\/fVJ\/wAJIn\/PFh\/wKj2IHR0Vzn\/CSJ\/zxb\/vqj\/hJE\/54t\/31R7EDo6K5z\/hJE\/54t\/31R\/wkif88W\/76o9lYDo6K5z\/AISRP+eLf99Uf8JIn\/PFv++qfswOjornP+EkT\/ni3\/fVH\/CSJ\/zxb\/vql7K4HSgZo2mub\/4SSP8A54Mf+BUf8JJH\/wA+7f8AfVHsQOl6UVzX\/CSR\/wDPu3\/fVJ\/wkif88WH\/AAKj2VgOmpMEciua\/wCEkT\/ni3\/fVH\/CSJ\/zxb\/vqj2VwOlJdxg9qNzbdu7j0rmv+EkT\/ni3\/fVH\/CSJ\/wA8W\/76o9iB0o6UoyDk9MVzX\/CRIekLf99VFLrzSDHl4Hu1HsQNKRg8jMKB1rHGqKD\/AKv\/AMeqVdUX\/nn\/AOPVoo20A2UqdaxV1Rf+ef8A49Uy6ov\/ADz\/APHqOUDaWpl61irqi\/8APP8ArUy6ov8Azzo5QNpamWsVdUX\/AJ5\/ripl1Rf+ef8AWjlA1+9SjpWQNSUn\/V1INSXP+ro5QNVaeOtZI1Jc\/wCrqT+0l\/550coGrTh0rKGorj\/V04akv\/POjlA\/\/9D7mK803bVorzTdtbAVitGwngdasFa8N\/aJ1KfSfhXf3EE8tv5lxbRSPFnd5UkyI4G3nkMRxRewHtflMOCuaPLb+7XxStp+x8oCppF+68cva6y7MBjktg8+44rzz4dw\/s2yvrp8WabeXBXV5VssW+qOUtSE2LmJcL82fvfNS5gP0ZMTAZ6Cm7a+KvCl78LdL+L3ha1+EMd7YRXwuYtRhlivoo5UVAUBW8wGYHpivt0KcAnqQM\/XvRe4FfbRtqxto20wK+2jbVjZXyj8Rfit4s0b4jK2gyKfDPhxraHXF2g7zeNgHcfu+VkH8aAPqbbRtrA8UeL\/AA74N0R\/EWv3JgtABtZFMjSFuQEVASzH0AzXDWfxt8D3V\/aaVPHqOn319MkNva39nNbSuZPuuA642n1z+vFAHrG2jbVjb6UbaAK+2lC9up6YqfbWH4nt9UuPDepw6IQt+9rKLY7tp80qdmD2570XsBDH4i8OS6mdEi1Sye\/UZNqs8ZmA\/wCue7f+nTmtrb6cV+K2i+FtatvFVtpmjW9\/c+NZr4edHLG8b2jI+Sxk54bru6Ac5I5r9X9b0v4wzXMZ8M6zotra+RGDHd2c0spkCgMdyTIpycnhRgcUr3A9K20ba830DS\/jHDq8UniXWNGutPBbzI7SzlhkI7YZ53Ax3+WvUNtMCvto21Y20baAK+2k2kZbJAHXPSo9Sme1sZZ4vvouRxmuefT7mSx+06nqb\/Z3QO6hFUFTzjPWgDoFmtnbYkqFvQHn8qm21xjwaG0A87SZLa3YBVuAgUrz8r8EsvP8RH6U57q\/t45prXUZJvsjKGSSJQHDejYBPHegDswtLtqVMsisRjIBx+FP20ARKtTKtKF4p4wO3QE\/hQA2SSK3jaedxHGgyzscAAetYOn+OPBWrXf9maXr2mXd0DjyYLqKST\/vlXLfpXhOkaKnx58QajrPiovJ4R0i7a1sNNDskV1JARunnCkEqG4QZwee2cy6LoXwB+I+va\/8OrTwtpsM3hxkheaCGOCTLgjdHJDtkG0g5w3XrQB9PDrzUq14J8NdV13wv4wvvhD4pvH1L7Lbi90m9nJaaW1JClZGP3nQnbnqRzxxn34DB9aAHrUy1GtSigCSnrWRqlre3MStp8xhniO9f7rY\/hb1BqlF4ntFtGe6Ux3cbbDb9XL9to7g9qaA6mnDpWDo8F+xbUNTc+ZN0hX7qL2H19fet+hgKKkpg6U4dKQH\/9H7020hWrO00hWtgK22vBP2lPtSfCu4ks1R5lvrHy0kOEZvPTblu3PoDX0Htrl\/GXg7R\/HPh658N64H+zXABLRNtdGVgysrEEAggEZBHqCKAPPW179ohZTt8L+HmIOM\/wBqzDIz0J+zDAzzjNeNfCDWPjXD\/wAJSNC0HRrndr07XPnajNHsn2x7kT9ydyY\/ir2Jfg5rSgbfiL4vAAH\/AC8wHgHgkm3554rK0r9n59D+0jR\/Hfiu0+3Tm5uDHcW+GmYYLt\/o\/cDFAHGazqHxIvvjB4DHjfStP01Fkuvs5srx7vexTncHiiAwOmCa+rdvp\/n868r0D4QWWleI7bxXrHiDWfEN5Zxslr\/ak0ciw+YDuKKkcfJBxzn+WPWwMjPrQBBto21Y20baAOe8Ra1Z+G9Av9d1B9kFjA87H\/dUnH1OK+QvCHw6+L\/ir4favPFdaFHb+NnlvZ47y3uHuSJiTGN6yImAApT5eOAea+1b7T7PU7SSw1CGO4gmXa8cqhlYehB4NSQW8FtFHbW8axxRqEVEGAoHAAA4wPSgD4Si8UveeG\/h9q\/i8kweEtcfTtaZvuxyxApHI\/8AdXocnpXoPxm8SeFNV8d\/D3TtNu7e+v4taSXdbMsnlxFT94x9N56Z6gV9MDw34fEd5A2m2rR6g266UxKRMfWQEYb\/AIFmsrTvh94F0RUj0fQtOtFSXzlW3to48SDo42qPmHY9aAOm244o21Y20baAK+2s7WdSttD0i81m8H7myheZ8dcIpYj6noK2dtU9Q0601SwuNMvoxLBdRNDInqrjB9uhoA+dH+JfxU07QY\/iTqmkaWPDExV3t4ZJW1CK2kYBJiSBExwQSvBA9816frHxW+Gnh27Wx17xFYWFyY1l8meZUbawBBIJzyCDXDj4Ja9PZReE9Q8X3E\/hOB1ZdMFrGsjKp3CJrkNvMakD5cAYGOABXt0mj6TKF8+xt5tgCgyRIx4HckUAcPovxZ+GXiLUo9J0LxHp1\/dzfchgnR3OPQA5r0Mrz0xVaHR9JtpBLbWVvE46NHEqn8wBWiVoArbaNtWNtG2gDB11f+JPd\/8AXI\/0qtf2ktzo0KxAsyrG20DOcAcV0VxbR3MD28o+WQYPODisUaDKg2R6leIo6KGXAHpytAGdc65YXVo9rb5eeUFPICZZWPHzDsKXVLZ7bwwbeT70caKfqCK0f7DuP+gnen\/gSf1Wmnw8spC3N7dTr\/ckKYOOeyA\/rQBqxr+7X6CpQtTBQAAowAKcFoAg207YSNq8kggCpdppyrQB8ieA\/Fb\/AA8+Gvi7wtKyw674XuLgxo+CWS5b9xMoPDAlvwrA0D4Qz\/BDXNI+KFrrl5dXOvXkFvrMVykewrdcsVAAxscjHJyPTmvoD4l\/Bbwr8TTHeXjS2GrW4Agv7TaJFxyA4YFXUHsQfbGTnk9X+DHxD8YWX9heOviDLqGjllLwWumW9rK6qcjdMC+0+pVQT0oAm0u4j8YftC3GsaWd9l4X0v7FNMo+U3Mz7zHnp8oznnIIINfRi1zHg\/wb4e8DaLD4f8M2y21pCOxJLt3ZmYksT3JJrqRjOBQA+nrSCpKAKWoajb6ZAJ7gkk8JGOrsegFc3\/YOpXjDW5ZfJ1Icwqfuov8AcP8AvDgnsa7AwQyMskiqzJ90ntU4600Bl6Vqo1INFIjQXUXyyxN\/CR\/TuPatmoBDEJWnCrvK7Se9T8jAPpQwHDpTh0pq0+kB\/9L7tOtaT\/z9LSf21pP\/AD9R\/jXkx61G3WugVz13+2tJ\/wCfqOj+2tJ\/5+k\/CvIKkXpQFz1v+2tJ\/wCfpaP7a0n\/AJ+lryaigLnrP9taT\/z9LR\/bWk\/8\/S15NRQFz1n+2tJ\/5+lo\/trSf+fqP8a8mqNutAXPXf7a0n\/n6jo\/trSf+fpPwryCpF6UBc9b\/trSf+fpaP7a0n\/n6WvJqKAues\/21pP\/AD9LR\/bWk\/8AP0teTUUBc9Z\/trSf+fqP8aP7a0n\/AJ+o68ibrTaAuev\/ANtaT\/z9J+FH9taT\/wA\/S15IvSnUBc9Z\/trSf+fpaP7a0n\/n6WvJqKAues\/21pP\/AD9LR\/bWk\/8AP1H+NeTVG3WgLnrv9taT\/wA\/UdH9taT\/AM\/SfhXkFSL0oC563\/bWk\/8AP0tH9taT\/wA\/Uf415NUbdaAueu\/21pP\/AD9R0f21pP8Az9J+FeQVIvSgLnrg1rSf+flTThrWk\/8AP0orydelIetAXPWxrWk4\/wCPhTUg1rScf8fKivJU+6KdQFz1tda0n\/n4WpP7a0n\/AJ+FryVOgqQ9aAuesjWtJx\/x8LUg1rScf8fC15KvSnjpQFz1ka1pP\/PwtSDWtKx\/x8LXko6VKvSgLnq41rSf+fhacNa0nP8Ax8LXk9OWkwues\/21pP8Az8LSjWtJ\/wCfha8opw6UkFz\/2Q==><\/img><\/p>\n<p> &#8230; via the &#8220;Scan Documents&#8221; input choice option.  Then use the Share button&#8217;s Mail option to create an Email containing those Notes note PDF attachments, and just Send that off to the relevant recipients.  The way the recipient receives this email is bound to please, as PDF(s) separately attached.<\/p>\n<p>By the way, this way of sending sensitive information ticks all the &#8220;Document Fidelity&#8221; boxes, as PDF does not leave any traceable parts for a hacker to exploit.  Good <a target=_blank href=\"https:\/\/www.rjmprogramming.com.au\/Mac\/iPhone\/notes_pdf.gif\" title=\"Tutorial picture\">all around<\/a>, we think!<\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d57008' onclick='var dv=document.getElementById(\"d57008\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/notes\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d57008' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d57017' onclick='var dv=document.getElementById(\"d57017\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/data-url\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d57017' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d60062' onclick='var dv=document.getElementById(\"d60062\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/filesize\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d60062' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d60074' onclick='var dv=document.getElementById(\"d60074\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/datetime\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d60074' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d60082' onclick='var dv=document.getElementById(\"d60082\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/iframe\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d60082' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d60096' onclick='var dv=document.getElementById(\"d60096\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/global-data-attribute\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d60096' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Further to yesterday&#8217;s Find Image Files via Specified Datetime Tutorial we have a dual purpose to our endeavours today &#8230; allow for a file via permissions new piece of functionality on recall, all\/any of these filled in functionality filters should &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/find-image-files-via-permissions-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,14,29,37],"tags":[1688,4394,2554,2143,4389,234,2084,301,302,2507,2365,4391,418,2671,4392,3967,2426,4388,435,471,4393,1615,4206,2258,587,590,2991,652,885,4390,4021,932,997,3420,3998,2387,1279,2005,1319,2257,3098],"class_list":["post-60096","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-operating-system","category-tutorials","tag-attributes","tag-bool","tag-boolean","tag-case","tag-case-insensitivity","tag-command-line","tag-data-attributes","tag-date","tag-datetime","tag-dimension","tag-dimensions","tag-epch","tag-file","tag-file-specification","tag-fileatime","tag-filectime","tag-filemtime","tag-filesize","tag-find","tag-function","tag-gettime","tag-glob","tag-global-data-attributes","tag-height","tag-iframe","tag-image","tag-integer","tag-javascript","tag-operating-system-2","tag-opersting-system","tag-permissions","tag-php","tag-programming","tag-return","tag-return-value","tag-specification","tag-time","tag-tool","tag-tutorial","tag-width","tag-wrapper"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/60096"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=60096"}],"version-history":[{"count":14,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/60096\/revisions"}],"predecessor-version":[{"id":60110,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/60096\/revisions\/60110"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=60096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=60096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=60096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}