Built motion from commit (unavailable).|2.5.28
[motion2.git] / server / api / smsTransferReport / smsTransferReport.controller.js
index 029e48b..d5ecafd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcac2=['catch','create','body','params','describe','eml-format','rimraf','zip-dir','request-promise','moment','sox','to-csv','ejs','fs-extra','lodash','squel','crypto','papaparse','ioredis','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','json','offset','limit','set','apply','reject','save','update','destroy','error','stack','name','send','index','SmsTransferReport','rawAttributes','type','key','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','sort','where','pick','filter','merge','map','options','count','includeAll','include','findAll','then','rows','show','find'];(function(_0x21c76e,_0x657e32){var _0x1c28c7=function(_0x1053ed){while(--_0x1053ed){_0x21c76e['push'](_0x21c76e['shift']());}};_0x1c28c7(++_0x657e32);}(_0xcac2,0x1e8));var _0x2cac=function(_0x4925b6,_0x32a770){_0x4925b6=_0x4925b6-0x0;var _0x5195ea=_0xcac2[_0x4925b6];return _0x5195ea;};'use strict';var emlformat=require(_0x2cac('0x0'));var rimraf=require(_0x2cac('0x1'));var zipdir=require(_0x2cac('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x2cac('0x3'));var moment=require(_0x2cac('0x4'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0x2cac('0x5'));var csv=require(_0x2cac('0x6'));var ejs=require(_0x2cac('0x7'));var fs=require('fs');var fs_extra=require(_0x2cac('0x8'));var _=require(_0x2cac('0x9'));var squel=require(_0x2cac('0xa'));var crypto=require(_0x2cac('0xb'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x2cac('0x6'));var querystring=require('querystring');var Papa=require(_0x2cac('0xc'));var Redis=require(_0x2cac('0xd'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var as=require(_0x2cac('0xe'));var hardwareService=require(_0x2cac('0xf'));var logger=require('../../config/logger')(_0x2cac('0x10'));var utils=require('../../config/utils');var config=require(_0x2cac('0x11'));var licenseUtil=require(_0x2cac('0x12'));var db=require(_0x2cac('0x13'))['db'];function respondWithStatusCode(_0x1ccf7b,_0x2b5975){_0x2b5975=_0x2b5975||0xcc;return function(_0x58aad7){if(_0x58aad7){return _0x1ccf7b[_0x2cac('0x14')](_0x2b5975);}return _0x1ccf7b[_0x2cac('0x15')](_0x2b5975)['end']();};}function respondWithResult(_0x440617,_0x302d91){_0x302d91=_0x302d91||0xc8;return function(_0x3c1b1f){if(_0x3c1b1f){return _0x440617['status'](_0x302d91)[_0x2cac('0x16')](_0x3c1b1f);}};}function respondWithFilteredResult(_0x354ab7,_0x3d846b){return function(_0x5e731b){if(_0x5e731b){var _0x46db00=_0x5e731b['count'],_0x3e7e90=_0x3d846b[_0x2cac('0x17')],_0xe4041f=_0x3d846b[_0x2cac('0x17')]+_0x3d846b[_0x2cac('0x18')],_0x4d4646;if(_0xe4041f>=_0x46db00){_0xe4041f=_0x46db00;_0x4d4646=0xc8;}else{_0x4d4646=0xce;}_0x354ab7[_0x2cac('0x15')](_0x4d4646);return _0x354ab7[_0x2cac('0x19')]('Content-Range',_0x3e7e90+'-'+_0xe4041f+'/'+_0x46db00)[_0x2cac('0x16')](_0x5e731b);}return null;};}function patchUpdates(_0x2764c7){return function(_0x397e70){try{jsonpatch[_0x2cac('0x1a')](_0x397e70,_0x2764c7,!![]);}catch(_0xccf89b){return BPromise[_0x2cac('0x1b')](_0xccf89b);}return _0x397e70[_0x2cac('0x1c')]();};}function saveUpdates(_0xd04add,_0x5871af){return function(_0x3830e3){if(_0x3830e3){return _0x3830e3[_0x2cac('0x1d')](_0xd04add)['then'](function(_0x4f0168){return _0x4f0168;});}return null;};}function removeEntity(_0x35d99b,_0x53f335){return function(_0xbdb16b){if(_0xbdb16b){return _0xbdb16b[_0x2cac('0x1e')]()['then'](function(){_0x35d99b[_0x2cac('0x15')](0xcc)['end']();});}};}function handleEntityNotFound(_0x43b372,_0x4267cc){return function(_0x37ac60){if(!_0x37ac60){_0x43b372[_0x2cac('0x14')](0x194);}return _0x37ac60;};}function handleError(_0x547154,_0x1de4c8){_0x1de4c8=_0x1de4c8||0x1f4;return function(_0x1de22c){logger[_0x2cac('0x1f')](_0x1de22c[_0x2cac('0x20')]);if(_0x1de22c[_0x2cac('0x21')]){delete _0x1de22c[_0x2cac('0x21')];}_0x547154['status'](_0x1de4c8)[_0x2cac('0x22')](_0x1de22c);};}exports[_0x2cac('0x23')]=function(_0x523e2b,_0x1f189a){var _0x4b6ad1={},_0x24966b={},_0x387e56={'count':0x0,'rows':[]};var _0x5d70a7=_['map'](db[_0x2cac('0x24')][_0x2cac('0x25')],function(_0x246cef){return{'name':_0x246cef['fieldName'],'type':_0x246cef[_0x2cac('0x26')][_0x2cac('0x27')]};});_0x24966b[_0x2cac('0x28')]=_['map'](_0x5d70a7,_0x2cac('0x21'));_0x24966b[_0x2cac('0x29')]=_[_0x2cac('0x2a')](_0x523e2b[_0x2cac('0x29')]);_0x24966b[_0x2cac('0x2b')]=_[_0x2cac('0x2c')](_0x24966b[_0x2cac('0x28')],_0x24966b['query']);_0x4b6ad1[_0x2cac('0x2d')]=_[_0x2cac('0x2c')](_0x24966b[_0x2cac('0x28')],qs['fields'](_0x523e2b[_0x2cac('0x29')][_0x2cac('0x2e')]));_0x4b6ad1[_0x2cac('0x2d')]=_0x4b6ad1[_0x2cac('0x2d')][_0x2cac('0x2f')]?_0x4b6ad1[_0x2cac('0x2d')]:_0x24966b[_0x2cac('0x28')];if(!_0x523e2b[_0x2cac('0x29')][_0x2cac('0x30')]('nolimit')){_0x4b6ad1['limit']=qs['limit'](_0x523e2b[_0x2cac('0x29')][_0x2cac('0x18')]);_0x4b6ad1['offset']=qs['offset'](_0x523e2b['query']['offset']);}_0x4b6ad1['order']=qs[_0x2cac('0x31')](_0x523e2b['query'][_0x2cac('0x31')]);_0x4b6ad1[_0x2cac('0x32')]=qs[_0x2cac('0x2b')](_[_0x2cac('0x33')](_0x523e2b[_0x2cac('0x29')],_0x24966b[_0x2cac('0x2b')]),_0x5d70a7);if(_0x523e2b[_0x2cac('0x29')][_0x2cac('0x34')]){_0x4b6ad1[_0x2cac('0x32')]=_[_0x2cac('0x35')](_0x4b6ad1['where'],{'$or':_[_0x2cac('0x36')](_0x5d70a7,function(_0x27a48d){if(_0x27a48d['type']!=='VIRTUAL'){var _0x41de45={};_0x41de45[_0x27a48d[_0x2cac('0x21')]]={'$like':'%'+_0x523e2b[_0x2cac('0x29')][_0x2cac('0x34')]+'%'};return _0x41de45;}})});}_0x4b6ad1=_[_0x2cac('0x35')]({},_0x4b6ad1,_0x523e2b[_0x2cac('0x37')]);var _0xf67ef0={'where':_0x4b6ad1[_0x2cac('0x32')]};return db[_0x2cac('0x24')][_0x2cac('0x38')](_0xf67ef0)['then'](function(_0x565744){_0x387e56[_0x2cac('0x38')]=_0x565744;if(_0x523e2b[_0x2cac('0x29')][_0x2cac('0x39')]){_0x4b6ad1[_0x2cac('0x3a')]=[{'all':!![]}];}return db[_0x2cac('0x24')][_0x2cac('0x3b')](_0x4b6ad1);})[_0x2cac('0x3c')](function(_0x1546b5){_0x387e56[_0x2cac('0x3d')]=_0x1546b5;return _0x387e56;})[_0x2cac('0x3c')](respondWithFilteredResult(_0x1f189a,_0x4b6ad1))['catch'](handleError(_0x1f189a,null));};exports[_0x2cac('0x3e')]=function(_0x378aba,_0x25c9f9){var _0x185178={'raw':!![],'where':{'id':_0x378aba['params']['id']}},_0x226a28={};_0x226a28[_0x2cac('0x28')]=_[_0x2cac('0x2a')](db['SmsTransferReport'][_0x2cac('0x25')]);_0x226a28[_0x2cac('0x29')]=_[_0x2cac('0x2a')](_0x378aba[_0x2cac('0x29')]);_0x226a28[_0x2cac('0x2b')]=_[_0x2cac('0x2c')](_0x226a28['model'],_0x226a28[_0x2cac('0x29')]);_0x185178[_0x2cac('0x2d')]=_['intersection'](_0x226a28[_0x2cac('0x28')],qs[_0x2cac('0x2e')](_0x378aba[_0x2cac('0x29')]['fields']));_0x185178[_0x2cac('0x2d')]=_0x185178['attributes']['length']?_0x185178['attributes']:_0x226a28[_0x2cac('0x28')];if(_0x378aba[_0x2cac('0x29')]['includeAll']){_0x185178['include']=[{'all':!![]}];}_0x185178=_[_0x2cac('0x35')]({},_0x185178,_0x378aba[_0x2cac('0x37')]);return db[_0x2cac('0x24')][_0x2cac('0x3f')](_0x185178)[_0x2cac('0x3c')](handleEntityNotFound(_0x25c9f9,null))['then'](respondWithResult(_0x25c9f9,null))[_0x2cac('0x40')](handleError(_0x25c9f9,null));};exports[_0x2cac('0x41')]=function(_0x232e7b,_0x16896d){return db['SmsTransferReport'][_0x2cac('0x41')](_0x232e7b[_0x2cac('0x42')],{})[_0x2cac('0x3c')](respondWithResult(_0x16896d,0xc9))[_0x2cac('0x40')](handleError(_0x16896d,null));};exports[_0x2cac('0x1d')]=function(_0x4a1651,_0x1da471){if(_0x4a1651['body']['id']){delete _0x4a1651[_0x2cac('0x42')]['id'];}return db[_0x2cac('0x24')][_0x2cac('0x3f')]({'where':{'id':_0x4a1651[_0x2cac('0x43')]['id']}})[_0x2cac('0x3c')](handleEntityNotFound(_0x1da471,null))[_0x2cac('0x3c')](saveUpdates(_0x4a1651[_0x2cac('0x42')],null))[_0x2cac('0x3c')](respondWithResult(_0x1da471,null))[_0x2cac('0x40')](handleError(_0x1da471,null));};exports[_0x2cac('0x1e')]=function(_0x2c7d9c,_0x3a2124){return db[_0x2cac('0x24')][_0x2cac('0x3f')]({'where':{'id':_0x2c7d9c[_0x2cac('0x43')]['id']}})[_0x2cac('0x3c')](handleEntityNotFound(_0x3a2124,null))[_0x2cac('0x3c')](removeEntity(_0x3a2124,null))[_0x2cac('0x40')](handleError(_0x3a2124,null));};exports[_0x2cac('0x44')]=function(_0x5d8638,_0x2a90a6){return db[_0x2cac('0x24')][_0x2cac('0x44')]()['then'](respondWithResult(_0x2a90a6,null))['catch'](handleError(_0x2a90a6,null));};
\ No newline at end of file
+var _0x34ec=['keys','filters','intersection','attributes','fields','length','hasOwnProperty','limit','order','sort','pick','where','filter','merge','options','SmsTransferReport','includeAll','include','rows','catch','show','params','find','body','describe','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','ejs','fs-extra','lodash','squel','crypto','jsforce','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','status','count','offset','set','json','apply','reject','save','update','then','destroy','end','sendStatus','name','send','index','map','rawAttributes','fieldName','type','key','model','query'];(function(_0x242a98,_0x13988e){var _0x580999=function(_0x341927){while(--_0x341927){_0x242a98['push'](_0x242a98['shift']());}};_0x580999(++_0x13988e);}(_0x34ec,0x1e1));var _0xc34e=function(_0x420d6a,_0x5f3df8){_0x420d6a=_0x420d6a-0x0;var _0x1f5f2c=_0x34ec[_0x420d6a];return _0x1f5f2c;};'use strict';var emlformat=require(_0xc34e('0x0'));var rimraf=require(_0xc34e('0x1'));var zipdir=require(_0xc34e('0x2'));var jsonpatch=require(_0xc34e('0x3'));var rp=require(_0xc34e('0x4'));var moment=require(_0xc34e('0x5'));var BPromise=require(_0xc34e('0x6'));var Mustache=require(_0xc34e('0x7'));var util=require(_0xc34e('0x8'));var path=require('path');var sox=require(_0xc34e('0x9'));var csv=require('to-csv');var ejs=require(_0xc34e('0xa'));var fs=require('fs');var fs_extra=require(_0xc34e('0xb'));var _=require(_0xc34e('0xc'));var squel=require(_0xc34e('0xd'));var crypto=require(_0xc34e('0xe'));var jsforce=require(_0xc34e('0xf'));var deskjs=require('desk.js');var toCsv=require(_0xc34e('0x10'));var querystring=require(_0xc34e('0x11'));var Papa=require(_0xc34e('0x12'));var Redis=require(_0xc34e('0x13'));var authService=require(_0xc34e('0x14'));var qs=require(_0xc34e('0x15'));var as=require(_0xc34e('0x16'));var hardwareService=require(_0xc34e('0x17'));var logger=require('../../config/logger')(_0xc34e('0x18'));var utils=require(_0xc34e('0x19'));var config=require(_0xc34e('0x1a'));var licenseUtil=require('../../config/license/util');var db=require(_0xc34e('0x1b'))['db'];function respondWithStatusCode(_0x40720b,_0x4cc350){_0x4cc350=_0x4cc350||0xcc;return function(_0x1ae1f4){if(_0x1ae1f4){return _0x40720b['sendStatus'](_0x4cc350);}return _0x40720b['status'](_0x4cc350)['end']();};}function respondWithResult(_0xa0e896,_0x334068){_0x334068=_0x334068||0xc8;return function(_0x291a65){if(_0x291a65){return _0xa0e896[_0xc34e('0x1c')](_0x334068)['json'](_0x291a65);}};}function respondWithFilteredResult(_0x4b15c6,_0x546df1){return function(_0x4417f7){if(_0x4417f7){var _0x49a458=_0x4417f7[_0xc34e('0x1d')],_0x46225c=_0x546df1[_0xc34e('0x1e')],_0x1da323=_0x546df1[_0xc34e('0x1e')]+_0x546df1['limit'],_0x57202b;if(_0x1da323>=_0x49a458){_0x1da323=_0x49a458;_0x57202b=0xc8;}else{_0x57202b=0xce;}_0x4b15c6['status'](_0x57202b);return _0x4b15c6[_0xc34e('0x1f')]('Content-Range',_0x46225c+'-'+_0x1da323+'/'+_0x49a458)[_0xc34e('0x20')](_0x4417f7);}return null;};}function patchUpdates(_0x134690){return function(_0x16639f){try{jsonpatch[_0xc34e('0x21')](_0x16639f,_0x134690,!![]);}catch(_0x5a0653){return BPromise[_0xc34e('0x22')](_0x5a0653);}return _0x16639f[_0xc34e('0x23')]();};}function saveUpdates(_0x5da604,_0x216ba1){return function(_0x22a677){if(_0x22a677){return _0x22a677[_0xc34e('0x24')](_0x5da604)[_0xc34e('0x25')](function(_0x54017b){return _0x54017b;});}return null;};}function removeEntity(_0x36f29b,_0x104fc2){return function(_0x5d746){if(_0x5d746){return _0x5d746[_0xc34e('0x26')]()['then'](function(){_0x36f29b[_0xc34e('0x1c')](0xcc)[_0xc34e('0x27')]();});}};}function handleEntityNotFound(_0x342138,_0x1c2319){return function(_0x144e3f){if(!_0x144e3f){_0x342138[_0xc34e('0x28')](0x194);}return _0x144e3f;};}function handleError(_0x154604,_0x548f29){_0x548f29=_0x548f29||0x1f4;return function(_0x327212){logger['error'](_0x327212['stack']);if(_0x327212[_0xc34e('0x29')]){delete _0x327212[_0xc34e('0x29')];}_0x154604['status'](_0x548f29)[_0xc34e('0x2a')](_0x327212);};}exports[_0xc34e('0x2b')]=function(_0x304a9e,_0x509227){var _0x356823={},_0x1a60d2={},_0x5e5ad2={'count':0x0,'rows':[]};var _0x1bb80f=_[_0xc34e('0x2c')](db['SmsTransferReport'][_0xc34e('0x2d')],function(_0x606691){return{'name':_0x606691[_0xc34e('0x2e')],'type':_0x606691[_0xc34e('0x2f')][_0xc34e('0x30')]};});_0x1a60d2[_0xc34e('0x31')]=_[_0xc34e('0x2c')](_0x1bb80f,_0xc34e('0x29'));_0x1a60d2[_0xc34e('0x32')]=_[_0xc34e('0x33')](_0x304a9e[_0xc34e('0x32')]);_0x1a60d2[_0xc34e('0x34')]=_[_0xc34e('0x35')](_0x1a60d2[_0xc34e('0x31')],_0x1a60d2['query']);_0x356823[_0xc34e('0x36')]=_[_0xc34e('0x35')](_0x1a60d2[_0xc34e('0x31')],qs[_0xc34e('0x37')](_0x304a9e[_0xc34e('0x32')][_0xc34e('0x37')]));_0x356823[_0xc34e('0x36')]=_0x356823[_0xc34e('0x36')][_0xc34e('0x38')]?_0x356823['attributes']:_0x1a60d2[_0xc34e('0x31')];if(!_0x304a9e[_0xc34e('0x32')][_0xc34e('0x39')]('nolimit')){_0x356823['limit']=qs[_0xc34e('0x3a')](_0x304a9e[_0xc34e('0x32')][_0xc34e('0x3a')]);_0x356823[_0xc34e('0x1e')]=qs[_0xc34e('0x1e')](_0x304a9e['query']['offset']);}_0x356823[_0xc34e('0x3b')]=qs[_0xc34e('0x3c')](_0x304a9e[_0xc34e('0x32')][_0xc34e('0x3c')]);_0x356823['where']=qs[_0xc34e('0x34')](_[_0xc34e('0x3d')](_0x304a9e[_0xc34e('0x32')],_0x1a60d2[_0xc34e('0x34')]),_0x1bb80f);if(_0x304a9e[_0xc34e('0x32')]['filter']){_0x356823[_0xc34e('0x3e')]=_['merge'](_0x356823[_0xc34e('0x3e')],{'$or':_['map'](_0x1bb80f,function(_0x17d201){if(_0x17d201[_0xc34e('0x2f')]!=='VIRTUAL'){var _0x1cc1b2={};_0x1cc1b2[_0x17d201[_0xc34e('0x29')]]={'$like':'%'+_0x304a9e['query'][_0xc34e('0x3f')]+'%'};return _0x1cc1b2;}})});}_0x356823=_[_0xc34e('0x40')]({},_0x356823,_0x304a9e[_0xc34e('0x41')]);var _0x445f3e={'where':_0x356823['where']};return db[_0xc34e('0x42')][_0xc34e('0x1d')](_0x445f3e)[_0xc34e('0x25')](function(_0x136e3a){_0x5e5ad2[_0xc34e('0x1d')]=_0x136e3a;if(_0x304a9e[_0xc34e('0x32')][_0xc34e('0x43')]){_0x356823[_0xc34e('0x44')]=[{'all':!![]}];}return db[_0xc34e('0x42')]['findAll'](_0x356823);})[_0xc34e('0x25')](function(_0x47f41a){_0x5e5ad2[_0xc34e('0x45')]=_0x47f41a;return _0x5e5ad2;})[_0xc34e('0x25')](respondWithFilteredResult(_0x509227,_0x356823))[_0xc34e('0x46')](handleError(_0x509227,null));};exports[_0xc34e('0x47')]=function(_0x5b5d3c,_0x58c4bd){var _0x2b6cd1={'raw':!![],'where':{'id':_0x5b5d3c[_0xc34e('0x48')]['id']}},_0x4bc51b={};_0x4bc51b[_0xc34e('0x31')]=_[_0xc34e('0x33')](db[_0xc34e('0x42')][_0xc34e('0x2d')]);_0x4bc51b[_0xc34e('0x32')]=_[_0xc34e('0x33')](_0x5b5d3c[_0xc34e('0x32')]);_0x4bc51b['filters']=_[_0xc34e('0x35')](_0x4bc51b[_0xc34e('0x31')],_0x4bc51b['query']);_0x2b6cd1[_0xc34e('0x36')]=_['intersection'](_0x4bc51b[_0xc34e('0x31')],qs[_0xc34e('0x37')](_0x5b5d3c['query'][_0xc34e('0x37')]));_0x2b6cd1[_0xc34e('0x36')]=_0x2b6cd1[_0xc34e('0x36')][_0xc34e('0x38')]?_0x2b6cd1[_0xc34e('0x36')]:_0x4bc51b[_0xc34e('0x31')];if(_0x5b5d3c[_0xc34e('0x32')][_0xc34e('0x43')]){_0x2b6cd1['include']=[{'all':!![]}];}_0x2b6cd1=_[_0xc34e('0x40')]({},_0x2b6cd1,_0x5b5d3c[_0xc34e('0x41')]);return db[_0xc34e('0x42')][_0xc34e('0x49')](_0x2b6cd1)[_0xc34e('0x25')](handleEntityNotFound(_0x58c4bd,null))['then'](respondWithResult(_0x58c4bd,null))[_0xc34e('0x46')](handleError(_0x58c4bd,null));};exports['create']=function(_0x5e7ec2,_0x254b47){return db[_0xc34e('0x42')]['create'](_0x5e7ec2['body'],{})[_0xc34e('0x25')](respondWithResult(_0x254b47,0xc9))[_0xc34e('0x46')](handleError(_0x254b47,null));};exports[_0xc34e('0x24')]=function(_0x192320,_0x4f7e3e){if(_0x192320[_0xc34e('0x4a')]['id']){delete _0x192320[_0xc34e('0x4a')]['id'];}return db[_0xc34e('0x42')][_0xc34e('0x49')]({'where':{'id':_0x192320['params']['id']}})[_0xc34e('0x25')](handleEntityNotFound(_0x4f7e3e,null))[_0xc34e('0x25')](saveUpdates(_0x192320[_0xc34e('0x4a')],null))[_0xc34e('0x25')](respondWithResult(_0x4f7e3e,null))[_0xc34e('0x46')](handleError(_0x4f7e3e,null));};exports[_0xc34e('0x26')]=function(_0x4a2085,_0x55f548){return db['SmsTransferReport']['find']({'where':{'id':_0x4a2085[_0xc34e('0x48')]['id']}})[_0xc34e('0x25')](handleEntityNotFound(_0x55f548,null))[_0xc34e('0x25')](removeEntity(_0x55f548,null))[_0xc34e('0x46')](handleError(_0x55f548,null));};exports['describe']=function(_0x40bd01,_0x4258fb){return db['SmsTransferReport'][_0xc34e('0x4b')]()['then'](respondWithResult(_0x4258fb,null))[_0xc34e('0x46')](handleError(_0x4258fb,null));};
\ No newline at end of file