Built motion from commit ab870f9e.|2.5.44
[motion2.git] / server / api / intFreshsalesField / intFreshsalesField.controller.js
index 35706b1..73c0aa7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x888f=['params','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','squel','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','then','destroy','error','stack','map','FreshsalesField','rawAttributes','key','name','query','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','filter','where','merge','type','VIRTUAL','options','includeAll','include','catch','find','create','body','update'];(function(_0x2d54ad,_0x5bcdf3){var _0x307c40=function(_0x4ebf09){while(--_0x4ebf09){_0x2d54ad['push'](_0x2d54ad['shift']());}};_0x307c40(++_0x5bcdf3);}(_0x888f,0xd9));var _0xf888=function(_0x294524,_0x4d046d){_0x294524=_0x294524-0x0;var _0x3a1fb3=_0x888f[_0x294524];return _0x3a1fb3;};'use strict';var pdf=require(_0xf888('0x0'));var emlformat=require(_0xf888('0x1'));var rimraf=require(_0xf888('0x2'));var zipdir=require(_0xf888('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xf888('0x4'));var moment=require(_0xf888('0x5'));var BPromise=require(_0xf888('0x6'));var Mustache=require(_0xf888('0x7'));var util=require('util');var path=require(_0xf888('0x8'));var sox=require(_0xf888('0x9'));var csv=require(_0xf888('0xa'));var ejs=require(_0xf888('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0xf888('0xc'));var crypto=require('crypto');var jsforce=require(_0xf888('0xd'));var deskjs=require(_0xf888('0xe'));var toCsv=require('to-csv');var querystring=require(_0xf888('0xf'));var Papa=require('papaparse');var Redis=require(_0xf888('0x10'));var authService=require(_0xf888('0x11'));var qs=require(_0xf888('0x12'));var as=require(_0xf888('0x13'));var hardwareService=require(_0xf888('0x14'));var logger=require(_0xf888('0x15'))(_0xf888('0x16'));var utils=require(_0xf888('0x17'));var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require(_0xf888('0x18'))['db'];function respondWithStatusCode(_0x7a2830,_0x335b65){_0x335b65=_0x335b65||0xcc;return function(_0x4dea90){if(_0x4dea90){return _0x7a2830[_0xf888('0x19')](_0x335b65);}return _0x7a2830[_0xf888('0x1a')](_0x335b65)[_0xf888('0x1b')]();};}function respondWithResult(_0x3d00e9,_0x372772){_0x372772=_0x372772||0xc8;return function(_0x52988d){if(_0x52988d){return _0x3d00e9[_0xf888('0x1a')](_0x372772)[_0xf888('0x1c')](_0x52988d);}};}function respondWithFilteredResult(_0x2ddb83,_0x2f7ec0){return function(_0x2ccd8a){if(_0x2ccd8a){var _0x42d9d1=_0x2ccd8a[_0xf888('0x1d')],_0x2b08b3=_0x2f7ec0[_0xf888('0x1e')],_0x46f0e7=_0x2f7ec0[_0xf888('0x1e')]+_0x2f7ec0['limit'],_0x32839e;if(_0x46f0e7>=_0x42d9d1){_0x46f0e7=_0x42d9d1;_0x32839e=0xc8;}else{_0x32839e=0xce;}_0x2ddb83[_0xf888('0x1a')](_0x32839e);return _0x2ddb83[_0xf888('0x1f')](_0xf888('0x20'),_0x2b08b3+'-'+_0x46f0e7+'/'+_0x42d9d1)[_0xf888('0x1c')](_0x2ccd8a);}return null;};}function patchUpdates(_0x556f33){return function(_0x436952){try{jsonpatch[_0xf888('0x21')](_0x436952,_0x556f33,!![]);}catch(_0x19d3dd){return BPromise[_0xf888('0x22')](_0x19d3dd);}return _0x436952[_0xf888('0x23')]();};}function saveUpdates(_0xae7e06,_0xb794d1){return function(_0x5d7c15){if(_0x5d7c15){return _0x5d7c15['update'](_0xae7e06)[_0xf888('0x24')](function(_0x323585){return _0x323585;});}return null;};}function removeEntity(_0x285cf9,_0x4ef9e3){return function(_0x59690d){if(_0x59690d){return _0x59690d[_0xf888('0x25')]()[_0xf888('0x24')](function(){_0x285cf9[_0xf888('0x1a')](0xcc)[_0xf888('0x1b')]();});}};}function handleEntityNotFound(_0xc4e908,_0x317764){return function(_0xe5f6ec){if(!_0xe5f6ec){_0xc4e908[_0xf888('0x19')](0x194);}return _0xe5f6ec;};}function handleError(_0x780bab,_0x3d39c6){_0x3d39c6=_0x3d39c6||0x1f4;return function(_0x442154){logger[_0xf888('0x26')](_0x442154[_0xf888('0x27')]);if(_0x442154['name']){delete _0x442154['name'];}_0x780bab[_0xf888('0x1a')](_0x3d39c6)['send'](_0x442154);};}exports['index']=function(_0x43adca,_0x318f3a){var _0x2f7524={},_0xb7d4bd={},_0x1ec010={'count':0x0,'rows':[]};var _0x5b6a6b=_[_0xf888('0x28')](db[_0xf888('0x29')][_0xf888('0x2a')],function(_0x5da793){return{'name':_0x5da793['fieldName'],'type':_0x5da793['type'][_0xf888('0x2b')]};});_0xb7d4bd['model']=_['map'](_0x5b6a6b,_0xf888('0x2c'));_0xb7d4bd[_0xf888('0x2d')]=_[_0xf888('0x2e')](_0x43adca[_0xf888('0x2d')]);_0xb7d4bd[_0xf888('0x2f')]=_[_0xf888('0x30')](_0xb7d4bd[_0xf888('0x31')],_0xb7d4bd[_0xf888('0x2d')]);_0x2f7524[_0xf888('0x32')]=_[_0xf888('0x30')](_0xb7d4bd[_0xf888('0x31')],qs[_0xf888('0x33')](_0x43adca[_0xf888('0x2d')][_0xf888('0x33')]));_0x2f7524[_0xf888('0x32')]=_0x2f7524[_0xf888('0x32')][_0xf888('0x34')]?_0x2f7524['attributes']:_0xb7d4bd[_0xf888('0x31')];if(!_0x43adca['query'][_0xf888('0x35')](_0xf888('0x36'))){_0x2f7524[_0xf888('0x37')]=qs['limit'](_0x43adca[_0xf888('0x2d')][_0xf888('0x37')]);_0x2f7524[_0xf888('0x1e')]=qs['offset'](_0x43adca['query'][_0xf888('0x1e')]);}_0x2f7524[_0xf888('0x38')]=qs[_0xf888('0x39')](_0x43adca[_0xf888('0x2d')][_0xf888('0x39')]);_0x2f7524['where']=qs['filters'](_['pick'](_0x43adca[_0xf888('0x2d')],_0xb7d4bd[_0xf888('0x2f')]),_0x5b6a6b);if(_0x43adca[_0xf888('0x2d')][_0xf888('0x3a')]){_0x2f7524[_0xf888('0x3b')]=_[_0xf888('0x3c')](_0x2f7524['where'],{'$or':_[_0xf888('0x28')](_0x5b6a6b,function(_0x258458){if(_0x258458[_0xf888('0x3d')]!==_0xf888('0x3e')){var _0x1675af={};_0x1675af[_0x258458['name']]={'$like':'%'+_0x43adca['query'][_0xf888('0x3a')]+'%'};return _0x1675af;}})});}_0x2f7524=_['merge']({},_0x2f7524,_0x43adca[_0xf888('0x3f')]);var _0x3b7848={'where':_0x2f7524[_0xf888('0x3b')]};return db[_0xf888('0x29')][_0xf888('0x1d')](_0x3b7848)[_0xf888('0x24')](function(_0x2fbf4c){_0x1ec010['count']=_0x2fbf4c;if(_0x43adca['query'][_0xf888('0x40')]){_0x2f7524[_0xf888('0x41')]=[{'all':!![]}];}return db[_0xf888('0x29')]['findAll'](_0x2f7524);})['then'](function(_0x901d7b){_0x1ec010['rows']=_0x901d7b;return _0x1ec010;})[_0xf888('0x24')](respondWithFilteredResult(_0x318f3a,_0x2f7524))[_0xf888('0x42')](handleError(_0x318f3a,null));};exports['show']=function(_0x1bf7d9,_0x47a79b){var _0x44cfb6={'raw':!![],'where':{'id':_0x1bf7d9['params']['id']}},_0x1df031={};_0x1df031[_0xf888('0x31')]=_[_0xf888('0x2e')](db[_0xf888('0x29')][_0xf888('0x2a')]);_0x1df031[_0xf888('0x2d')]=_[_0xf888('0x2e')](_0x1bf7d9['query']);_0x1df031['filters']=_[_0xf888('0x30')](_0x1df031['model'],_0x1df031[_0xf888('0x2d')]);_0x44cfb6[_0xf888('0x32')]=_[_0xf888('0x30')](_0x1df031['model'],qs[_0xf888('0x33')](_0x1bf7d9[_0xf888('0x2d')][_0xf888('0x33')]));_0x44cfb6[_0xf888('0x32')]=_0x44cfb6['attributes'][_0xf888('0x34')]?_0x44cfb6[_0xf888('0x32')]:_0x1df031[_0xf888('0x31')];if(_0x1bf7d9[_0xf888('0x2d')]['includeAll']){_0x44cfb6['include']=[{'all':!![]}];}_0x44cfb6=_['merge']({},_0x44cfb6,_0x1bf7d9[_0xf888('0x3f')]);return db[_0xf888('0x29')][_0xf888('0x43')](_0x44cfb6)[_0xf888('0x24')](handleEntityNotFound(_0x47a79b,null))[_0xf888('0x24')](respondWithResult(_0x47a79b,null))[_0xf888('0x42')](handleError(_0x47a79b,null));};exports[_0xf888('0x44')]=function(_0x2600a8,_0x3a6b13){return db[_0xf888('0x29')][_0xf888('0x44')](_0x2600a8[_0xf888('0x45')],{})[_0xf888('0x24')](respondWithResult(_0x3a6b13,0xc9))[_0xf888('0x42')](handleError(_0x3a6b13,null));};exports[_0xf888('0x46')]=function(_0x589293,_0x46c99f){if(_0x589293[_0xf888('0x45')]['id']){delete _0x589293[_0xf888('0x45')]['id'];}return db[_0xf888('0x29')][_0xf888('0x43')]({'where':{'id':_0x589293[_0xf888('0x47')]['id']}})['then'](handleEntityNotFound(_0x46c99f,null))[_0xf888('0x24')](saveUpdates(_0x589293[_0xf888('0x45')],null))['then'](respondWithResult(_0x46c99f,null))[_0xf888('0x42')](handleError(_0x46c99f,null));};exports[_0xf888('0x25')]=function(_0x486e66,_0x3aac2c){return db[_0xf888('0x29')]['find']({'where':{'id':_0x486e66['params']['id']}})['then'](handleEntityNotFound(_0x3aac2c,null))['then'](removeEntity(_0x3aac2c,null))[_0xf888('0x42')](handleError(_0x3aac2c,null));};
\ No newline at end of file
+var _0x0c2c=['FreshsalesField','fieldName','key','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','filter','where','type','VIRTUAL','merge','includeAll','findAll','rows','catch','show','params','rawAttributes','include','find','create','body','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','fs-extra','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','json','offset','undefined','limit','count','status','Content-Range','apply','reject','save','update','destroy','then','sendStatus','error','stack','name','send','index','map'];(function(_0x2b4411,_0x2625ed){var _0x8e41ef=function(_0x2aa8c1){while(--_0x2aa8c1){_0x2b4411['push'](_0x2b4411['shift']());}};_0x8e41ef(++_0x2625ed);}(_0x0c2c,0x1ec));var _0xc0c2=function(_0x307086,_0x3bfe4e){_0x307086=_0x307086-0x0;var _0x699043=_0x0c2c[_0x307086];return _0x699043;};'use strict';var emlformat=require(_0xc0c2('0x0'));var rimraf=require(_0xc0c2('0x1'));var zipdir=require(_0xc0c2('0x2'));var jsonpatch=require(_0xc0c2('0x3'));var rp=require(_0xc0c2('0x4'));var moment=require(_0xc0c2('0x5'));var BPromise=require(_0xc0c2('0x6'));var Mustache=require(_0xc0c2('0x7'));var util=require('util');var path=require(_0xc0c2('0x8'));var sox=require(_0xc0c2('0x9'));var csv=require(_0xc0c2('0xa'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0xc0c2('0xb'));var _=require('lodash');var squel=require('squel');var crypto=require(_0xc0c2('0xc'));var jsforce=require(_0xc0c2('0xd'));var deskjs=require(_0xc0c2('0xe'));var toCsv=require('to-csv');var querystring=require(_0xc0c2('0xf'));var Papa=require(_0xc0c2('0x10'));var Redis=require(_0xc0c2('0x11'));var authService=require('../../components/auth/service');var qs=require(_0xc0c2('0x12'));var as=require(_0xc0c2('0x13'));var hardwareService=require(_0xc0c2('0x14'));var logger=require(_0xc0c2('0x15'))(_0xc0c2('0x16'));var utils=require(_0xc0c2('0x17'));var config=require(_0xc0c2('0x18'));var licenseUtil=require(_0xc0c2('0x19'));var db=require(_0xc0c2('0x1a'))['db'];function respondWithStatusCode(_0x202c8f,_0x3808e9){_0x3808e9=_0x3808e9||0xcc;return function(_0x302c1a){if(_0x302c1a){return _0x202c8f['sendStatus'](_0x3808e9);}return _0x202c8f['status'](_0x3808e9)['end']();};}function respondWithResult(_0x10a453,_0x29b40a){_0x29b40a=_0x29b40a||0xc8;return function(_0x39f3c0){if(_0x39f3c0){return _0x10a453['status'](_0x29b40a)[_0xc0c2('0x1b')](_0x39f3c0);}};}function respondWithFilteredResult(_0x2a8ded,_0x3a6b26){return function(_0x517a12){if(_0x517a12){var _0xa06763=typeof _0x3a6b26[_0xc0c2('0x1c')]===_0xc0c2('0x1d')&&typeof _0x3a6b26[_0xc0c2('0x1e')]===_0xc0c2('0x1d');var _0x221b8f=_0x517a12[_0xc0c2('0x1f')];var _0x105aa7=_0xa06763?0x0:_0x3a6b26[_0xc0c2('0x1c')];var _0x278eb8=_0xa06763?_0x517a12[_0xc0c2('0x1f')]:_0x3a6b26[_0xc0c2('0x1c')]+_0x3a6b26[_0xc0c2('0x1e')];var _0x563121;if(_0x278eb8>=_0x221b8f){_0x278eb8=_0x221b8f;_0x563121=0xc8;}else{_0x563121=0xce;}_0x2a8ded[_0xc0c2('0x20')](_0x563121);return _0x2a8ded['set'](_0xc0c2('0x21'),_0x105aa7+'-'+_0x278eb8+'/'+_0x221b8f)['json'](_0x517a12);}return null;};}function patchUpdates(_0x2caa30){return function(_0x1f2494){try{jsonpatch[_0xc0c2('0x22')](_0x1f2494,_0x2caa30,!![]);}catch(_0x4d15db){return BPromise[_0xc0c2('0x23')](_0x4d15db);}return _0x1f2494[_0xc0c2('0x24')]();};}function saveUpdates(_0x199e57,_0x363b5e){return function(_0x1cff95){if(_0x1cff95){return _0x1cff95[_0xc0c2('0x25')](_0x199e57)['then'](function(_0x57375d){return _0x57375d;});}return null;};}function removeEntity(_0x11ccd6,_0x1232e0){return function(_0x3e5d3a){if(_0x3e5d3a){return _0x3e5d3a[_0xc0c2('0x26')]()[_0xc0c2('0x27')](function(){_0x11ccd6[_0xc0c2('0x20')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4c4673,_0x4e14e3){return function(_0x335b74){if(!_0x335b74){_0x4c4673[_0xc0c2('0x28')](0x194);}return _0x335b74;};}function handleError(_0x4ac1c6,_0x5cd504){_0x5cd504=_0x5cd504||0x1f4;return function(_0x37b673){logger[_0xc0c2('0x29')](_0x37b673[_0xc0c2('0x2a')]);if(_0x37b673[_0xc0c2('0x2b')]){delete _0x37b673['name'];}_0x4ac1c6[_0xc0c2('0x20')](_0x5cd504)[_0xc0c2('0x2c')](_0x37b673);};}exports[_0xc0c2('0x2d')]=function(_0x5f5441,_0x1b36ba){var _0x1f41dc={},_0x51a6df={},_0x4ce71f={'count':0x0,'rows':[]};var _0x481786=_[_0xc0c2('0x2e')](db[_0xc0c2('0x2f')]['rawAttributes'],function(_0x4f685c){return{'name':_0x4f685c[_0xc0c2('0x30')],'type':_0x4f685c['type'][_0xc0c2('0x31')]};});_0x51a6df[_0xc0c2('0x32')]=_[_0xc0c2('0x2e')](_0x481786,_0xc0c2('0x2b'));_0x51a6df[_0xc0c2('0x33')]=_[_0xc0c2('0x34')](_0x5f5441['query']);_0x51a6df[_0xc0c2('0x35')]=_[_0xc0c2('0x36')](_0x51a6df['model'],_0x51a6df['query']);_0x1f41dc[_0xc0c2('0x37')]=_[_0xc0c2('0x36')](_0x51a6df[_0xc0c2('0x32')],qs[_0xc0c2('0x38')](_0x5f5441['query']['fields']));_0x1f41dc[_0xc0c2('0x37')]=_0x1f41dc[_0xc0c2('0x37')][_0xc0c2('0x39')]?_0x1f41dc[_0xc0c2('0x37')]:_0x51a6df[_0xc0c2('0x32')];if(!_0x5f5441[_0xc0c2('0x33')][_0xc0c2('0x3a')]('nolimit')){_0x1f41dc['limit']=qs[_0xc0c2('0x1e')](_0x5f5441[_0xc0c2('0x33')][_0xc0c2('0x1e')]);_0x1f41dc[_0xc0c2('0x1c')]=qs[_0xc0c2('0x1c')](_0x5f5441[_0xc0c2('0x33')][_0xc0c2('0x1c')]);}_0x1f41dc[_0xc0c2('0x3b')]=qs[_0xc0c2('0x3c')](_0x5f5441[_0xc0c2('0x33')]['sort']);_0x1f41dc['where']=qs[_0xc0c2('0x35')](_['pick'](_0x5f5441[_0xc0c2('0x33')],_0x51a6df['filters']),_0x481786);if(_0x5f5441[_0xc0c2('0x33')][_0xc0c2('0x3d')]){_0x1f41dc['where']=_['merge'](_0x1f41dc[_0xc0c2('0x3e')],{'$or':_[_0xc0c2('0x2e')](_0x481786,function(_0x420115){if(_0x420115[_0xc0c2('0x3f')]!==_0xc0c2('0x40')){var _0x386c08={};_0x386c08[_0x420115['name']]={'$like':'%'+_0x5f5441[_0xc0c2('0x33')][_0xc0c2('0x3d')]+'%'};return _0x386c08;}})});}_0x1f41dc=_[_0xc0c2('0x41')]({},_0x1f41dc,_0x5f5441['options']);var _0x5311c4={'where':_0x1f41dc['where']};return db[_0xc0c2('0x2f')][_0xc0c2('0x1f')](_0x5311c4)['then'](function(_0x6d817d){_0x4ce71f[_0xc0c2('0x1f')]=_0x6d817d;if(_0x5f5441[_0xc0c2('0x33')][_0xc0c2('0x42')]){_0x1f41dc['include']=[{'all':!![]}];}return db['FreshsalesField'][_0xc0c2('0x43')](_0x1f41dc);})[_0xc0c2('0x27')](function(_0x4bd4b3){_0x4ce71f[_0xc0c2('0x44')]=_0x4bd4b3;return _0x4ce71f;})[_0xc0c2('0x27')](respondWithFilteredResult(_0x1b36ba,_0x1f41dc))[_0xc0c2('0x45')](handleError(_0x1b36ba,null));};exports[_0xc0c2('0x46')]=function(_0x177cb6,_0x49dca4){var _0x4aca7c={'raw':!![],'where':{'id':_0x177cb6[_0xc0c2('0x47')]['id']}},_0x5d133a={};_0x5d133a['model']=_[_0xc0c2('0x34')](db[_0xc0c2('0x2f')][_0xc0c2('0x48')]);_0x5d133a[_0xc0c2('0x33')]=_[_0xc0c2('0x34')](_0x177cb6[_0xc0c2('0x33')]);_0x5d133a[_0xc0c2('0x35')]=_[_0xc0c2('0x36')](_0x5d133a[_0xc0c2('0x32')],_0x5d133a[_0xc0c2('0x33')]);_0x4aca7c[_0xc0c2('0x37')]=_[_0xc0c2('0x36')](_0x5d133a['model'],qs[_0xc0c2('0x38')](_0x177cb6[_0xc0c2('0x33')][_0xc0c2('0x38')]));_0x4aca7c[_0xc0c2('0x37')]=_0x4aca7c['attributes'][_0xc0c2('0x39')]?_0x4aca7c['attributes']:_0x5d133a['model'];if(_0x177cb6[_0xc0c2('0x33')][_0xc0c2('0x42')]){_0x4aca7c[_0xc0c2('0x49')]=[{'all':!![]}];}_0x4aca7c=_[_0xc0c2('0x41')]({},_0x4aca7c,_0x177cb6['options']);return db['FreshsalesField'][_0xc0c2('0x4a')](_0x4aca7c)[_0xc0c2('0x27')](handleEntityNotFound(_0x49dca4,null))[_0xc0c2('0x27')](respondWithResult(_0x49dca4,null))[_0xc0c2('0x45')](handleError(_0x49dca4,null));};exports[_0xc0c2('0x4b')]=function(_0x4d7bc3,_0x3ac87e){return db[_0xc0c2('0x2f')][_0xc0c2('0x4b')](_0x4d7bc3['body'],{})[_0xc0c2('0x27')](respondWithResult(_0x3ac87e,0xc9))['catch'](handleError(_0x3ac87e,null));};exports[_0xc0c2('0x25')]=function(_0x31344a,_0x3212ff){if(_0x31344a[_0xc0c2('0x4c')]['id']){delete _0x31344a[_0xc0c2('0x4c')]['id'];}return db['FreshsalesField'][_0xc0c2('0x4a')]({'where':{'id':_0x31344a[_0xc0c2('0x47')]['id']}})[_0xc0c2('0x27')](handleEntityNotFound(_0x3212ff,null))[_0xc0c2('0x27')](saveUpdates(_0x31344a[_0xc0c2('0x4c')],null))[_0xc0c2('0x27')](respondWithResult(_0x3212ff,null))['catch'](handleError(_0x3212ff,null));};exports['destroy']=function(_0x31997e,_0x2e93f7){return db[_0xc0c2('0x2f')]['find']({'where':{'id':_0x31997e[_0xc0c2('0x47')]['id']}})[_0xc0c2('0x27')](handleEntityNotFound(_0x2e93f7,null))[_0xc0c2('0x27')](removeEntity(_0x2e93f7,null))[_0xc0c2('0x45')](handleError(_0x2e93f7,null));};
\ No newline at end of file