Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / server / api / squareReport / squareReport.controller.js
index 17c8336..b1d4982 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6365=['index','map','rawAttributes','fieldName','key','query','keys','intersection','model','fields','attributes','nolimit','order','sort','where','filters','pick','type','VIRTUAL','filter','merge','options','includeAll','include','SquareReport','findAll','catch','show','params','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','stack','name','send'];(function(_0x1facfa,_0x1acf7d){var _0x9ec701=function(_0x115e37){while(--_0x115e37){_0x1facfa['push'](_0x1facfa['shift']());}};_0x9ec701(++_0x1acf7d);}(_0x6365,0x148));var _0x5636=function(_0x281493,_0xe4ac4c){_0x281493=_0x281493-0x0;var _0x52bbf8=_0x6365[_0x281493];return _0x52bbf8;};'use strict';var pdf=require(_0x5636('0x0'));var emlformat=require(_0x5636('0x1'));var rimraf=require(_0x5636('0x2'));var zipdir=require(_0x5636('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x5636('0x4'));var moment=require(_0x5636('0x5'));var BPromise=require(_0x5636('0x6'));var Mustache=require(_0x5636('0x7'));var util=require(_0x5636('0x8'));var path=require('path');var sox=require(_0x5636('0x9'));var csv=require(_0x5636('0xa'));var ejs=require(_0x5636('0xb'));var fs=require('fs');var _=require(_0x5636('0xc'));var squel=require('squel');var crypto=require(_0x5636('0xd'));var jsforce=require(_0x5636('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x5636('0xf'));var Papa=require(_0x5636('0x10'));var Redis=require(_0x5636('0x11'));var authService=require(_0x5636('0x12'));var qs=require('../../components/parsers/qs');var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0x5636('0x13'));var logger=require('../../config/logger')(_0x5636('0x14'));var utils=require(_0x5636('0x15'));var config=require(_0x5636('0x16'));var licenseUtil=require(_0x5636('0x17'));var db=require(_0x5636('0x18'))['db'];function respondWithStatusCode(_0x255a21,_0x4f52ef){_0x4f52ef=_0x4f52ef||0xcc;return function(_0x58712f){if(_0x58712f){return _0x255a21[_0x5636('0x19')](_0x4f52ef);}return _0x255a21['status'](_0x4f52ef)[_0x5636('0x1a')]();};}function respondWithResult(_0x196741,_0x51eaa7){_0x51eaa7=_0x51eaa7||0xc8;return function(_0x565538){if(_0x565538){return _0x196741[_0x5636('0x1b')](_0x51eaa7)[_0x5636('0x1c')](_0x565538);}};}function respondWithFilteredResult(_0x41ccd0,_0x11340b){return function(_0x3fb15a){if(_0x3fb15a){var _0x4d5630=_0x3fb15a[_0x5636('0x1d')],_0x2fd9c0=_0x11340b[_0x5636('0x1e')],_0x4ffa7e=_0x11340b[_0x5636('0x1e')]+_0x11340b[_0x5636('0x1f')],_0x55de40;if(_0x4ffa7e>=_0x4d5630){_0x4ffa7e=_0x4d5630;_0x55de40=0xc8;}else{_0x55de40=0xce;}_0x41ccd0[_0x5636('0x1b')](_0x55de40);return _0x41ccd0[_0x5636('0x20')](_0x5636('0x21'),_0x2fd9c0+'-'+_0x4ffa7e+'/'+_0x4d5630)[_0x5636('0x1c')](_0x3fb15a);}return null;};}function patchUpdates(_0x522d61){return function(_0x4dd749){try{jsonpatch[_0x5636('0x22')](_0x4dd749,_0x522d61,!![]);}catch(_0x433fec){return BPromise[_0x5636('0x23')](_0x433fec);}return _0x4dd749['save']();};}function saveUpdates(_0x2b587c,_0x32bae9){return function(_0x278648){if(_0x278648){return _0x278648[_0x5636('0x24')](_0x2b587c)[_0x5636('0x25')](function(_0x4d036d){return _0x4d036d;});}return null;};}function removeEntity(_0x247043,_0x1a7298){return function(_0x166ba5){if(_0x166ba5){return _0x166ba5[_0x5636('0x26')]()['then'](function(){_0x247043['status'](0xcc)[_0x5636('0x1a')]();});}};}function handleEntityNotFound(_0x4d8f1c,_0x342e77){return function(_0x448afc){if(!_0x448afc){_0x4d8f1c[_0x5636('0x19')](0x194);}return _0x448afc;};}function handleError(_0x3a9777,_0x51e5cc){_0x51e5cc=_0x51e5cc||0x1f4;return function(_0x3a1575){logger['error'](_0x3a1575[_0x5636('0x27')]);if(_0x3a1575['name']){delete _0x3a1575[_0x5636('0x28')];}_0x3a9777[_0x5636('0x1b')](_0x51e5cc)[_0x5636('0x29')](_0x3a1575);};}exports[_0x5636('0x2a')]=function(_0x4d1db1,_0x362e40){var _0x1ff533={},_0x19f718={},_0x1fed30={'count':0x0,'rows':[]};var _0x4e470d=_[_0x5636('0x2b')](db['SquareReport'][_0x5636('0x2c')],function(_0x54726e){return{'name':_0x54726e[_0x5636('0x2d')],'type':_0x54726e['type'][_0x5636('0x2e')]};});_0x19f718['model']=_[_0x5636('0x2b')](_0x4e470d,'name');_0x19f718[_0x5636('0x2f')]=_[_0x5636('0x30')](_0x4d1db1[_0x5636('0x2f')]);_0x19f718['filters']=_[_0x5636('0x31')](_0x19f718[_0x5636('0x32')],_0x19f718[_0x5636('0x2f')]);_0x1ff533['attributes']=_[_0x5636('0x31')](_0x19f718[_0x5636('0x32')],qs[_0x5636('0x33')](_0x4d1db1[_0x5636('0x2f')][_0x5636('0x33')]));_0x1ff533[_0x5636('0x34')]=_0x1ff533['attributes']['length']?_0x1ff533[_0x5636('0x34')]:_0x19f718['model'];if(!_0x4d1db1[_0x5636('0x2f')]['hasOwnProperty'](_0x5636('0x35'))){_0x1ff533[_0x5636('0x1f')]=qs[_0x5636('0x1f')](_0x4d1db1[_0x5636('0x2f')]['limit']);_0x1ff533[_0x5636('0x1e')]=qs['offset'](_0x4d1db1[_0x5636('0x2f')][_0x5636('0x1e')]);}_0x1ff533[_0x5636('0x36')]=qs['sort'](_0x4d1db1['query'][_0x5636('0x37')]);_0x1ff533[_0x5636('0x38')]=qs[_0x5636('0x39')](_[_0x5636('0x3a')](_0x4d1db1[_0x5636('0x2f')],_0x19f718[_0x5636('0x39')]),_0x4e470d);if(_0x4d1db1[_0x5636('0x2f')]['filter']){_0x1ff533[_0x5636('0x38')]=_['merge'](_0x1ff533['where'],{'$or':_[_0x5636('0x2b')](_0x4e470d,function(_0x276972){if(_0x276972[_0x5636('0x3b')]!==_0x5636('0x3c')){var _0x3c242c={};_0x3c242c[_0x276972[_0x5636('0x28')]]={'$like':'%'+_0x4d1db1[_0x5636('0x2f')][_0x5636('0x3d')]+'%'};return _0x3c242c;}})});}_0x1ff533=_[_0x5636('0x3e')]({},_0x1ff533,_0x4d1db1[_0x5636('0x3f')]);var _0xe7c55={'where':_0x1ff533[_0x5636('0x38')]};return db['SquareReport']['count'](_0xe7c55)[_0x5636('0x25')](function(_0x21a6bc){_0x1fed30['count']=_0x21a6bc;if(_0x4d1db1['query'][_0x5636('0x40')]){_0x1ff533[_0x5636('0x41')]=[{'all':!![]}];}return db[_0x5636('0x42')][_0x5636('0x43')](_0x1ff533);})[_0x5636('0x25')](function(_0x526249){_0x1fed30['rows']=_0x526249;return _0x1fed30;})[_0x5636('0x25')](respondWithFilteredResult(_0x362e40,_0x1ff533))[_0x5636('0x44')](handleError(_0x362e40,null));};exports[_0x5636('0x45')]=function(_0x1b3b9d,_0x5c0170){var _0x5b16a9={'raw':!![],'where':{'id':_0x1b3b9d[_0x5636('0x46')]['id']}},_0x2a3da2={};_0x2a3da2[_0x5636('0x32')]=_['keys'](db['SquareReport'][_0x5636('0x2c')]);_0x2a3da2[_0x5636('0x2f')]=_[_0x5636('0x30')](_0x1b3b9d[_0x5636('0x2f')]);_0x2a3da2['filters']=_[_0x5636('0x31')](_0x2a3da2[_0x5636('0x32')],_0x2a3da2[_0x5636('0x2f')]);_0x5b16a9[_0x5636('0x34')]=_[_0x5636('0x31')](_0x2a3da2[_0x5636('0x32')],qs[_0x5636('0x33')](_0x1b3b9d[_0x5636('0x2f')][_0x5636('0x33')]));_0x5b16a9['attributes']=_0x5b16a9[_0x5636('0x34')]['length']?_0x5b16a9[_0x5636('0x34')]:_0x2a3da2['model'];if(_0x1b3b9d[_0x5636('0x2f')][_0x5636('0x40')]){_0x5b16a9[_0x5636('0x41')]=[{'all':!![]}];}_0x5b16a9=_[_0x5636('0x3e')]({},_0x5b16a9,_0x1b3b9d[_0x5636('0x3f')]);return db[_0x5636('0x42')]['find'](_0x5b16a9)[_0x5636('0x25')](handleEntityNotFound(_0x5c0170,null))[_0x5636('0x25')](respondWithResult(_0x5c0170,null))[_0x5636('0x44')](handleError(_0x5c0170,null));};exports[_0x5636('0x47')]=function(_0x352407,_0x394ae8){return db[_0x5636('0x42')][_0x5636('0x47')](_0x352407[_0x5636('0x48')],{})[_0x5636('0x25')](respondWithResult(_0x394ae8,0xc9))[_0x5636('0x44')](handleError(_0x394ae8,null));};exports['update']=function(_0x1c9a1e,_0x4f4446){if(_0x1c9a1e[_0x5636('0x48')]['id']){delete _0x1c9a1e[_0x5636('0x48')]['id'];}return db[_0x5636('0x42')]['find']({'where':{'id':_0x1c9a1e[_0x5636('0x46')]['id']}})[_0x5636('0x25')](handleEntityNotFound(_0x4f4446,null))[_0x5636('0x25')](saveUpdates(_0x1c9a1e['body'],null))['then'](respondWithResult(_0x4f4446,null))['catch'](handleError(_0x4f4446,null));};exports[_0x5636('0x26')]=function(_0x4984f6,_0x4b22e0){return db[_0x5636('0x42')]['find']({'where':{'id':_0x4984f6[_0x5636('0x46')]['id']}})[_0x5636('0x25')](handleEntityNotFound(_0x4b22e0,null))[_0x5636('0x25')](removeEntity(_0x4b22e0,null))[_0x5636('0x44')](handleError(_0x4b22e0,null));};exports[_0x5636('0x49')]=function(_0x5b6eb9,_0x176cb4){return db[_0x5636('0x42')][_0x5636('0x49')]()[_0x5636('0x25')](respondWithResult(_0x176cb4,null))['catch'](handleError(_0x176cb4,null));};
\ No newline at end of file
+var _0xce8a=['json','offset','undefined','limit','count','set','Content-Range','apply','reject','update','then','destroy','stack','name','send','index','map','SquareReport','rawAttributes','fieldName','type','key','model','query','keys','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filter','merge','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','length','find','create','body','params','describe','eml-format','rimraf','zip-dir','request-promise','mustache','util','path','fs-extra','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','end'];(function(_0x18b2a3,_0x322f6c){var _0x1152f5=function(_0x5292c2){while(--_0x5292c2){_0x18b2a3['push'](_0x18b2a3['shift']());}};_0x1152f5(++_0x322f6c);}(_0xce8a,0x7f));var _0xace8=function(_0x166d5a,_0x49f250){_0x166d5a=_0x166d5a-0x0;var _0x126ef5=_0xce8a[_0x166d5a];return _0x126ef5;};'use strict';var emlformat=require(_0xace8('0x0'));var rimraf=require(_0xace8('0x1'));var zipdir=require(_0xace8('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xace8('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xace8('0x4'));var util=require(_0xace8('0x5'));var path=require(_0xace8('0x6'));var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0xace8('0x7'));var _=require(_0xace8('0x8'));var squel=require(_0xace8('0x9'));var crypto=require(_0xace8('0xa'));var jsforce=require('jsforce');var deskjs=require(_0xace8('0xb'));var toCsv=require(_0xace8('0xc'));var querystring=require(_0xace8('0xd'));var Papa=require(_0xace8('0xe'));var Redis=require(_0xace8('0xf'));var authService=require(_0xace8('0x10'));var qs=require('../../components/parsers/qs');var as=require(_0xace8('0x11'));var hardwareService=require(_0xace8('0x12'));var logger=require('../../config/logger')(_0xace8('0x13'));var utils=require(_0xace8('0x14'));var config=require(_0xace8('0x15'));var licenseUtil=require(_0xace8('0x16'));var db=require(_0xace8('0x17'))['db'];function respondWithStatusCode(_0x26d57d,_0x2ff0ca){_0x2ff0ca=_0x2ff0ca||0xcc;return function(_0xa08f05){if(_0xa08f05){return _0x26d57d[_0xace8('0x18')](_0x2ff0ca);}return _0x26d57d[_0xace8('0x19')](_0x2ff0ca)[_0xace8('0x1a')]();};}function respondWithResult(_0x248e1f,_0x3b664f){_0x3b664f=_0x3b664f||0xc8;return function(_0x77a4c1){if(_0x77a4c1){return _0x248e1f[_0xace8('0x19')](_0x3b664f)[_0xace8('0x1b')](_0x77a4c1);}};}function respondWithFilteredResult(_0x4aa796,_0x4c409b){return function(_0x5373a4){if(_0x5373a4){var _0x5e79c0=typeof _0x4c409b[_0xace8('0x1c')]===_0xace8('0x1d')&&typeof _0x4c409b[_0xace8('0x1e')]===_0xace8('0x1d');var _0x4383c2=_0x5373a4['count'];var _0x11344a=_0x5e79c0?0x0:_0x4c409b['offset'];var _0x3e4822=_0x5e79c0?_0x5373a4[_0xace8('0x1f')]:_0x4c409b[_0xace8('0x1c')]+_0x4c409b[_0xace8('0x1e')];var _0x5ce4d4;if(_0x3e4822>=_0x4383c2){_0x3e4822=_0x4383c2;_0x5ce4d4=0xc8;}else{_0x5ce4d4=0xce;}_0x4aa796[_0xace8('0x19')](_0x5ce4d4);return _0x4aa796[_0xace8('0x20')](_0xace8('0x21'),_0x11344a+'-'+_0x3e4822+'/'+_0x4383c2)[_0xace8('0x1b')](_0x5373a4);}return null;};}function patchUpdates(_0x19a976){return function(_0x6926f1){try{jsonpatch[_0xace8('0x22')](_0x6926f1,_0x19a976,!![]);}catch(_0x40e4ae){return BPromise[_0xace8('0x23')](_0x40e4ae);}return _0x6926f1['save']();};}function saveUpdates(_0x27ff3c,_0x4cbe2c){return function(_0x3bb395){if(_0x3bb395){return _0x3bb395[_0xace8('0x24')](_0x27ff3c)[_0xace8('0x25')](function(_0x47de0a){return _0x47de0a;});}return null;};}function removeEntity(_0x23d922,_0x572d7d){return function(_0x224e96){if(_0x224e96){return _0x224e96[_0xace8('0x26')]()[_0xace8('0x25')](function(){_0x23d922['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x55ec90,_0x21281c){return function(_0x4d7c78){if(!_0x4d7c78){_0x55ec90[_0xace8('0x18')](0x194);}return _0x4d7c78;};}function handleError(_0x59d8e9,_0x1d08e9){_0x1d08e9=_0x1d08e9||0x1f4;return function(_0xe3e83b){logger['error'](_0xe3e83b[_0xace8('0x27')]);if(_0xe3e83b[_0xace8('0x28')]){delete _0xe3e83b[_0xace8('0x28')];}_0x59d8e9[_0xace8('0x19')](_0x1d08e9)[_0xace8('0x29')](_0xe3e83b);};}exports[_0xace8('0x2a')]=function(_0x5095c8,_0x39a911){var _0x24d012={},_0x16dff8={},_0x3fbba6={'count':0x0,'rows':[]};var _0x4f46fc=_[_0xace8('0x2b')](db[_0xace8('0x2c')][_0xace8('0x2d')],function(_0xec040d){return{'name':_0xec040d[_0xace8('0x2e')],'type':_0xec040d[_0xace8('0x2f')][_0xace8('0x30')]};});_0x16dff8[_0xace8('0x31')]=_[_0xace8('0x2b')](_0x4f46fc,_0xace8('0x28'));_0x16dff8[_0xace8('0x32')]=_[_0xace8('0x33')](_0x5095c8[_0xace8('0x32')]);_0x16dff8[_0xace8('0x34')]=_[_0xace8('0x35')](_0x16dff8['model'],_0x16dff8['query']);_0x24d012[_0xace8('0x36')]=_[_0xace8('0x35')](_0x16dff8['model'],qs[_0xace8('0x37')](_0x5095c8[_0xace8('0x32')][_0xace8('0x37')]));_0x24d012[_0xace8('0x36')]=_0x24d012['attributes']['length']?_0x24d012['attributes']:_0x16dff8[_0xace8('0x31')];if(!_0x5095c8[_0xace8('0x32')][_0xace8('0x38')](_0xace8('0x39'))){_0x24d012[_0xace8('0x1e')]=qs[_0xace8('0x1e')](_0x5095c8[_0xace8('0x32')]['limit']);_0x24d012['offset']=qs[_0xace8('0x1c')](_0x5095c8[_0xace8('0x32')][_0xace8('0x1c')]);}_0x24d012[_0xace8('0x3a')]=qs[_0xace8('0x3b')](_0x5095c8[_0xace8('0x32')][_0xace8('0x3b')]);_0x24d012[_0xace8('0x3c')]=qs['filters'](_['pick'](_0x5095c8[_0xace8('0x32')],_0x16dff8[_0xace8('0x34')]),_0x4f46fc);if(_0x5095c8[_0xace8('0x32')][_0xace8('0x3d')]){_0x24d012['where']=_[_0xace8('0x3e')](_0x24d012[_0xace8('0x3c')],{'$or':_['map'](_0x4f46fc,function(_0x3bb65d){if(_0x3bb65d[_0xace8('0x2f')]!==_0xace8('0x3f')){var _0x55a2e4={};_0x55a2e4[_0x3bb65d[_0xace8('0x28')]]={'$like':'%'+_0x5095c8[_0xace8('0x32')][_0xace8('0x3d')]+'%'};return _0x55a2e4;}})});}_0x24d012=_[_0xace8('0x3e')]({},_0x24d012,_0x5095c8[_0xace8('0x40')]);var _0x4630bf={'where':_0x24d012[_0xace8('0x3c')]};return db[_0xace8('0x2c')][_0xace8('0x1f')](_0x4630bf)[_0xace8('0x25')](function(_0x51bb68){_0x3fbba6[_0xace8('0x1f')]=_0x51bb68;if(_0x5095c8[_0xace8('0x32')][_0xace8('0x41')]){_0x24d012[_0xace8('0x42')]=[{'all':!![]}];}return db[_0xace8('0x2c')][_0xace8('0x43')](_0x24d012);})[_0xace8('0x25')](function(_0x474922){_0x3fbba6[_0xace8('0x44')]=_0x474922;return _0x3fbba6;})['then'](respondWithFilteredResult(_0x39a911,_0x24d012))[_0xace8('0x45')](handleError(_0x39a911,null));};exports[_0xace8('0x46')]=function(_0x3f0bc4,_0x5d75eb){var _0x4b3e86={'raw':!![],'where':{'id':_0x3f0bc4['params']['id']}},_0x370532={};_0x370532['model']=_[_0xace8('0x33')](db[_0xace8('0x2c')][_0xace8('0x2d')]);_0x370532['query']=_[_0xace8('0x33')](_0x3f0bc4[_0xace8('0x32')]);_0x370532['filters']=_[_0xace8('0x35')](_0x370532[_0xace8('0x31')],_0x370532[_0xace8('0x32')]);_0x4b3e86[_0xace8('0x36')]=_['intersection'](_0x370532[_0xace8('0x31')],qs[_0xace8('0x37')](_0x3f0bc4[_0xace8('0x32')][_0xace8('0x37')]));_0x4b3e86[_0xace8('0x36')]=_0x4b3e86[_0xace8('0x36')][_0xace8('0x47')]?_0x4b3e86['attributes']:_0x370532[_0xace8('0x31')];if(_0x3f0bc4['query']['includeAll']){_0x4b3e86[_0xace8('0x42')]=[{'all':!![]}];}_0x4b3e86=_[_0xace8('0x3e')]({},_0x4b3e86,_0x3f0bc4['options']);return db[_0xace8('0x2c')][_0xace8('0x48')](_0x4b3e86)['then'](handleEntityNotFound(_0x5d75eb,null))[_0xace8('0x25')](respondWithResult(_0x5d75eb,null))[_0xace8('0x45')](handleError(_0x5d75eb,null));};exports[_0xace8('0x49')]=function(_0x50432c,_0x5b91d1){return db[_0xace8('0x2c')][_0xace8('0x49')](_0x50432c[_0xace8('0x4a')],{})[_0xace8('0x25')](respondWithResult(_0x5b91d1,0xc9))['catch'](handleError(_0x5b91d1,null));};exports[_0xace8('0x24')]=function(_0x1c5833,_0x34ab11){if(_0x1c5833[_0xace8('0x4a')]['id']){delete _0x1c5833[_0xace8('0x4a')]['id'];}return db['SquareReport']['find']({'where':{'id':_0x1c5833[_0xace8('0x4b')]['id']}})['then'](handleEntityNotFound(_0x34ab11,null))[_0xace8('0x25')](saveUpdates(_0x1c5833[_0xace8('0x4a')],null))[_0xace8('0x25')](respondWithResult(_0x34ab11,null))[_0xace8('0x45')](handleError(_0x34ab11,null));};exports[_0xace8('0x26')]=function(_0x3f50ec,_0x48ed3e){return db['SquareReport'][_0xace8('0x48')]({'where':{'id':_0x3f50ec['params']['id']}})[_0xace8('0x25')](handleEntityNotFound(_0x48ed3e,null))[_0xace8('0x25')](removeEntity(_0x48ed3e,null))[_0xace8('0x45')](handleError(_0x48ed3e,null));};exports[_0xace8('0x4c')]=function(_0x4a217a,_0x9c9993){return db[_0xace8('0x2c')][_0xace8('0x4c')]()[_0xace8('0x25')](respondWithResult(_0x9c9993,null))[_0xace8('0x45')](handleError(_0x9c9993,null));};
\ No newline at end of file