Built motion from commit (unavailable).|2.5.13
[motion2.git] / server / api / intSalesforceField / intSalesforceField.controller.js
index f76889c..6b1ad03 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0aec=['show','params','intersection','find','create','body','destroy','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','to-csv','ejs','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','json','count','offset','limit','status','set','Content-Range','apply','reject','save','update','error','stack','name','index','map','SalesforceField','rawAttributes','type','key','model','query','keys','filters','attributes','fields','length','hasOwnProperty','order','sort','pick','filter','where','merge','options','includeAll','include','then','catch'];(function(_0xb45f7c,_0x572595){var _0x49bb5f=function(_0x545ce1){while(--_0x545ce1){_0xb45f7c['push'](_0xb45f7c['shift']());}};_0x49bb5f(++_0x572595);}(_0x0aec,0xdc));var _0xc0ae=function(_0x4ba8c3,_0x33c457){_0x4ba8c3=_0x4ba8c3-0x0;var _0xf65364=_0x0aec[_0x4ba8c3];return _0xf65364;};'use strict';var pdf=require(_0xc0ae('0x0'));var emlformat=require(_0xc0ae('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xc0ae('0x2'));var jsonpatch=require(_0xc0ae('0x3'));var rp=require(_0xc0ae('0x4'));var moment=require(_0xc0ae('0x5'));var BPromise=require(_0xc0ae('0x6'));var Mustache=require(_0xc0ae('0x7'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0xc0ae('0x8'));var ejs=require(_0xc0ae('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0xc0ae('0xa'));var crypto=require('crypto');var jsforce=require(_0xc0ae('0xb'));var deskjs=require(_0xc0ae('0xc'));var toCsv=require(_0xc0ae('0x8'));var querystring=require(_0xc0ae('0xd'));var Papa=require(_0xc0ae('0xe'));var Redis=require(_0xc0ae('0xf'));var authService=require(_0xc0ae('0x10'));var qs=require(_0xc0ae('0x11'));var as=require(_0xc0ae('0x12'));var hardwareService=require(_0xc0ae('0x13'));var logger=require(_0xc0ae('0x14'))('api');var utils=require(_0xc0ae('0x15'));var config=require(_0xc0ae('0x16'));var licenseUtil=require('../../config/license/util');var db=require(_0xc0ae('0x17'))['db'];function respondWithStatusCode(_0x127879,_0x33ae87){_0x33ae87=_0x33ae87||0xcc;return function(_0x397f89){if(_0x397f89){return _0x127879[_0xc0ae('0x18')](_0x33ae87);}return _0x127879['status'](_0x33ae87)['end']();};}function respondWithResult(_0xfd25a0,_0x55fa31){_0x55fa31=_0x55fa31||0xc8;return function(_0x13063b){if(_0x13063b){return _0xfd25a0['status'](_0x55fa31)[_0xc0ae('0x19')](_0x13063b);}};}function respondWithFilteredResult(_0x7f6124,_0x1fb04d){return function(_0x46152d){if(_0x46152d){var _0xa72b7c=_0x46152d[_0xc0ae('0x1a')],_0x48ed46=_0x1fb04d[_0xc0ae('0x1b')],_0x40b941=_0x1fb04d[_0xc0ae('0x1b')]+_0x1fb04d[_0xc0ae('0x1c')],_0x5b2261;if(_0x40b941>=_0xa72b7c){_0x40b941=_0xa72b7c;_0x5b2261=0xc8;}else{_0x5b2261=0xce;}_0x7f6124[_0xc0ae('0x1d')](_0x5b2261);return _0x7f6124[_0xc0ae('0x1e')](_0xc0ae('0x1f'),_0x48ed46+'-'+_0x40b941+'/'+_0xa72b7c)[_0xc0ae('0x19')](_0x46152d);}return null;};}function patchUpdates(_0x311bbc){return function(_0x115859){try{jsonpatch[_0xc0ae('0x20')](_0x115859,_0x311bbc,!![]);}catch(_0x2c46a6){return BPromise[_0xc0ae('0x21')](_0x2c46a6);}return _0x115859[_0xc0ae('0x22')]();};}function saveUpdates(_0x3e5ac0,_0x2fd4bf){return function(_0x309f9e){if(_0x309f9e){return _0x309f9e[_0xc0ae('0x23')](_0x3e5ac0)['then'](function(_0x3d563a){return _0x3d563a;});}return null;};}function removeEntity(_0x478c82,_0x1bbba5){return function(_0x25c940){if(_0x25c940){return _0x25c940['destroy']()['then'](function(){_0x478c82[_0xc0ae('0x1d')](0xcc)['end']();});}};}function handleEntityNotFound(_0x25b0e7,_0x440e7f){return function(_0x21ed24){if(!_0x21ed24){_0x25b0e7[_0xc0ae('0x18')](0x194);}return _0x21ed24;};}function handleError(_0xd2a941,_0x3170dd){_0x3170dd=_0x3170dd||0x1f4;return function(_0x1e8c58){logger[_0xc0ae('0x24')](_0x1e8c58[_0xc0ae('0x25')]);if(_0x1e8c58[_0xc0ae('0x26')]){delete _0x1e8c58[_0xc0ae('0x26')];}_0xd2a941[_0xc0ae('0x1d')](_0x3170dd)['send'](_0x1e8c58);};}exports[_0xc0ae('0x27')]=function(_0x3b31ea,_0x26e750){var _0x30cf82={},_0x4f91ec={},_0xe23279={'count':0x0,'rows':[]};var _0x5e5080=_[_0xc0ae('0x28')](db[_0xc0ae('0x29')][_0xc0ae('0x2a')],function(_0x11447f){return{'name':_0x11447f['fieldName'],'type':_0x11447f[_0xc0ae('0x2b')][_0xc0ae('0x2c')]};});_0x4f91ec[_0xc0ae('0x2d')]=_['map'](_0x5e5080,_0xc0ae('0x26'));_0x4f91ec[_0xc0ae('0x2e')]=_[_0xc0ae('0x2f')](_0x3b31ea[_0xc0ae('0x2e')]);_0x4f91ec[_0xc0ae('0x30')]=_['intersection'](_0x4f91ec[_0xc0ae('0x2d')],_0x4f91ec['query']);_0x30cf82[_0xc0ae('0x31')]=_['intersection'](_0x4f91ec[_0xc0ae('0x2d')],qs[_0xc0ae('0x32')](_0x3b31ea[_0xc0ae('0x2e')][_0xc0ae('0x32')]));_0x30cf82['attributes']=_0x30cf82[_0xc0ae('0x31')][_0xc0ae('0x33')]?_0x30cf82[_0xc0ae('0x31')]:_0x4f91ec[_0xc0ae('0x2d')];if(!_0x3b31ea[_0xc0ae('0x2e')][_0xc0ae('0x34')]('nolimit')){_0x30cf82['limit']=qs[_0xc0ae('0x1c')](_0x3b31ea[_0xc0ae('0x2e')][_0xc0ae('0x1c')]);_0x30cf82[_0xc0ae('0x1b')]=qs[_0xc0ae('0x1b')](_0x3b31ea['query'][_0xc0ae('0x1b')]);}_0x30cf82[_0xc0ae('0x35')]=qs[_0xc0ae('0x36')](_0x3b31ea[_0xc0ae('0x2e')][_0xc0ae('0x36')]);_0x30cf82['where']=qs[_0xc0ae('0x30')](_[_0xc0ae('0x37')](_0x3b31ea['query'],_0x4f91ec[_0xc0ae('0x30')]),_0x5e5080);if(_0x3b31ea[_0xc0ae('0x2e')][_0xc0ae('0x38')]){_0x30cf82[_0xc0ae('0x39')]=_[_0xc0ae('0x3a')](_0x30cf82['where'],{'$or':_[_0xc0ae('0x28')](_0x5e5080,function(_0x149b9b){if(_0x149b9b['type']!=='VIRTUAL'){var _0x435c39={};_0x435c39[_0x149b9b[_0xc0ae('0x26')]]={'$like':'%'+_0x3b31ea['query'][_0xc0ae('0x38')]+'%'};return _0x435c39;}})});}_0x30cf82=_[_0xc0ae('0x3a')]({},_0x30cf82,_0x3b31ea[_0xc0ae('0x3b')]);var _0x480be0={'where':_0x30cf82[_0xc0ae('0x39')]};return db[_0xc0ae('0x29')][_0xc0ae('0x1a')](_0x480be0)['then'](function(_0x24bc64){_0xe23279[_0xc0ae('0x1a')]=_0x24bc64;if(_0x3b31ea[_0xc0ae('0x2e')][_0xc0ae('0x3c')]){_0x30cf82[_0xc0ae('0x3d')]=[{'all':!![]}];}return db['SalesforceField']['findAll'](_0x30cf82);})['then'](function(_0x1eb1c9){_0xe23279['rows']=_0x1eb1c9;return _0xe23279;})[_0xc0ae('0x3e')](respondWithFilteredResult(_0x26e750,_0x30cf82))[_0xc0ae('0x3f')](handleError(_0x26e750,null));};exports[_0xc0ae('0x40')]=function(_0x436f54,_0x231eb9){var _0x207154={'raw':!![],'where':{'id':_0x436f54[_0xc0ae('0x41')]['id']}},_0x41f840={};_0x41f840[_0xc0ae('0x2d')]=_[_0xc0ae('0x2f')](db['SalesforceField'][_0xc0ae('0x2a')]);_0x41f840[_0xc0ae('0x2e')]=_[_0xc0ae('0x2f')](_0x436f54[_0xc0ae('0x2e')]);_0x41f840[_0xc0ae('0x30')]=_[_0xc0ae('0x42')](_0x41f840[_0xc0ae('0x2d')],_0x41f840['query']);_0x207154[_0xc0ae('0x31')]=_[_0xc0ae('0x42')](_0x41f840[_0xc0ae('0x2d')],qs['fields'](_0x436f54['query'][_0xc0ae('0x32')]));_0x207154[_0xc0ae('0x31')]=_0x207154[_0xc0ae('0x31')]['length']?_0x207154[_0xc0ae('0x31')]:_0x41f840[_0xc0ae('0x2d')];if(_0x436f54[_0xc0ae('0x2e')][_0xc0ae('0x3c')]){_0x207154[_0xc0ae('0x3d')]=[{'all':!![]}];}_0x207154=_[_0xc0ae('0x3a')]({},_0x207154,_0x436f54[_0xc0ae('0x3b')]);return db[_0xc0ae('0x29')][_0xc0ae('0x43')](_0x207154)[_0xc0ae('0x3e')](handleEntityNotFound(_0x231eb9,null))[_0xc0ae('0x3e')](respondWithResult(_0x231eb9,null))[_0xc0ae('0x3f')](handleError(_0x231eb9,null));};exports[_0xc0ae('0x44')]=function(_0x4edbb8,_0x1ed658){return db[_0xc0ae('0x29')][_0xc0ae('0x44')](_0x4edbb8['body'],{})[_0xc0ae('0x3e')](respondWithResult(_0x1ed658,0xc9))['catch'](handleError(_0x1ed658,null));};exports[_0xc0ae('0x23')]=function(_0x3bb406,_0x305880){if(_0x3bb406[_0xc0ae('0x45')]['id']){delete _0x3bb406[_0xc0ae('0x45')]['id'];}return db[_0xc0ae('0x29')]['find']({'where':{'id':_0x3bb406[_0xc0ae('0x41')]['id']}})[_0xc0ae('0x3e')](handleEntityNotFound(_0x305880,null))['then'](saveUpdates(_0x3bb406[_0xc0ae('0x45')],null))[_0xc0ae('0x3e')](respondWithResult(_0x305880,null))[_0xc0ae('0x3f')](handleError(_0x305880,null));};exports[_0xc0ae('0x46')]=function(_0x3830e4,_0x169321){return db['SalesforceField'][_0xc0ae('0x43')]({'where':{'id':_0x3830e4[_0xc0ae('0x41')]['id']}})[_0xc0ae('0x3e')](handleEntityNotFound(_0x169321,null))['then'](removeEntity(_0x169321,null))[_0xc0ae('0x3f')](handleError(_0x169321,null));};
\ No newline at end of file
+var _0x1b62=['include','find','create','body','destroy','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','ejs','lodash','squel','crypto','jsforce','to-csv','querystring','ioredis','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','json','offset','set','Content-Range','apply','reject','update','then','end','stack','name','send','index','map','rawAttributes','fieldName','type','key','model','query','filters','intersection','fields','length','attributes','hasOwnProperty','nolimit','limit','sort','where','merge','options','SalesforceField','count','includeAll','findAll','catch','params'];(function(_0x151002,_0x1c9af6){var _0x1a7a58=function(_0x282ec3){while(--_0x282ec3){_0x151002['push'](_0x151002['shift']());}};_0x1a7a58(++_0x1c9af6);}(_0x1b62,0x19d));var _0x21b6=function(_0x644560,_0x1783aa){_0x644560=_0x644560-0x0;var _0x41b76b=_0x1b62[_0x644560];return _0x41b76b;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x21b6('0x0'));var jsonpatch=require(_0x21b6('0x1'));var rp=require(_0x21b6('0x2'));var moment=require(_0x21b6('0x3'));var BPromise=require(_0x21b6('0x4'));var Mustache=require('mustache');var util=require(_0x21b6('0x5'));var path=require(_0x21b6('0x6'));var sox=require(_0x21b6('0x7'));var csv=require('to-csv');var ejs=require(_0x21b6('0x8'));var fs=require('fs');var _=require(_0x21b6('0x9'));var squel=require(_0x21b6('0xa'));var crypto=require(_0x21b6('0xb'));var jsforce=require(_0x21b6('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x21b6('0xd'));var querystring=require(_0x21b6('0xe'));var Papa=require('papaparse');var Redis=require(_0x21b6('0xf'));var authService=require('../../components/auth/service');var qs=require(_0x21b6('0x10'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0x21b6('0x11'));var logger=require('../../config/logger')(_0x21b6('0x12'));var utils=require(_0x21b6('0x13'));var config=require(_0x21b6('0x14'));var licenseUtil=require(_0x21b6('0x15'));var db=require(_0x21b6('0x16'))['db'];function respondWithStatusCode(_0xb94b35,_0x23cd9c){_0x23cd9c=_0x23cd9c||0xcc;return function(_0xcabdfd){if(_0xcabdfd){return _0xb94b35[_0x21b6('0x17')](_0x23cd9c);}return _0xb94b35[_0x21b6('0x18')](_0x23cd9c)['end']();};}function respondWithResult(_0x5db399,_0x35f29c){_0x35f29c=_0x35f29c||0xc8;return function(_0x478acd){if(_0x478acd){return _0x5db399[_0x21b6('0x18')](_0x35f29c)[_0x21b6('0x19')](_0x478acd);}};}function respondWithFilteredResult(_0x20c4c6,_0x5a8a4b){return function(_0x52b79b){if(_0x52b79b){var _0x4e8f75=_0x52b79b['count'],_0x13f216=_0x5a8a4b[_0x21b6('0x1a')],_0x1d7848=_0x5a8a4b['offset']+_0x5a8a4b['limit'],_0x4779e1;if(_0x1d7848>=_0x4e8f75){_0x1d7848=_0x4e8f75;_0x4779e1=0xc8;}else{_0x4779e1=0xce;}_0x20c4c6[_0x21b6('0x18')](_0x4779e1);return _0x20c4c6[_0x21b6('0x1b')](_0x21b6('0x1c'),_0x13f216+'-'+_0x1d7848+'/'+_0x4e8f75)[_0x21b6('0x19')](_0x52b79b);}return null;};}function patchUpdates(_0x3b277d){return function(_0x89dc68){try{jsonpatch[_0x21b6('0x1d')](_0x89dc68,_0x3b277d,!![]);}catch(_0x4bc26e){return BPromise[_0x21b6('0x1e')](_0x4bc26e);}return _0x89dc68['save']();};}function saveUpdates(_0x3974f1,_0x3ea110){return function(_0x29e57f){if(_0x29e57f){return _0x29e57f[_0x21b6('0x1f')](_0x3974f1)['then'](function(_0x5360e5){return _0x5360e5;});}return null;};}function removeEntity(_0x57fab6,_0x52707c){return function(_0x4b6229){if(_0x4b6229){return _0x4b6229['destroy']()[_0x21b6('0x20')](function(){_0x57fab6[_0x21b6('0x18')](0xcc)[_0x21b6('0x21')]();});}};}function handleEntityNotFound(_0x201930,_0xd0394b){return function(_0x596d29){if(!_0x596d29){_0x201930[_0x21b6('0x17')](0x194);}return _0x596d29;};}function handleError(_0x5ab9ca,_0x16aeb6){_0x16aeb6=_0x16aeb6||0x1f4;return function(_0x40f32f){logger['error'](_0x40f32f[_0x21b6('0x22')]);if(_0x40f32f[_0x21b6('0x23')]){delete _0x40f32f[_0x21b6('0x23')];}_0x5ab9ca[_0x21b6('0x18')](_0x16aeb6)[_0x21b6('0x24')](_0x40f32f);};}exports[_0x21b6('0x25')]=function(_0x5a4fe6,_0x2c84e3){var _0x475af4={},_0x587f0e={},_0x26a0a2={'count':0x0,'rows':[]};var _0x428c18=_[_0x21b6('0x26')](db['SalesforceField'][_0x21b6('0x27')],function(_0x327666){return{'name':_0x327666[_0x21b6('0x28')],'type':_0x327666[_0x21b6('0x29')][_0x21b6('0x2a')]};});_0x587f0e[_0x21b6('0x2b')]=_[_0x21b6('0x26')](_0x428c18,_0x21b6('0x23'));_0x587f0e[_0x21b6('0x2c')]=_['keys'](_0x5a4fe6[_0x21b6('0x2c')]);_0x587f0e[_0x21b6('0x2d')]=_['intersection'](_0x587f0e[_0x21b6('0x2b')],_0x587f0e[_0x21b6('0x2c')]);_0x475af4['attributes']=_[_0x21b6('0x2e')](_0x587f0e['model'],qs[_0x21b6('0x2f')](_0x5a4fe6[_0x21b6('0x2c')][_0x21b6('0x2f')]));_0x475af4['attributes']=_0x475af4['attributes'][_0x21b6('0x30')]?_0x475af4[_0x21b6('0x31')]:_0x587f0e[_0x21b6('0x2b')];if(!_0x5a4fe6[_0x21b6('0x2c')][_0x21b6('0x32')](_0x21b6('0x33'))){_0x475af4[_0x21b6('0x34')]=qs[_0x21b6('0x34')](_0x5a4fe6[_0x21b6('0x2c')][_0x21b6('0x34')]);_0x475af4[_0x21b6('0x1a')]=qs[_0x21b6('0x1a')](_0x5a4fe6[_0x21b6('0x2c')]['offset']);}_0x475af4['order']=qs['sort'](_0x5a4fe6['query'][_0x21b6('0x35')]);_0x475af4[_0x21b6('0x36')]=qs[_0x21b6('0x2d')](_['pick'](_0x5a4fe6[_0x21b6('0x2c')],_0x587f0e[_0x21b6('0x2d')]),_0x428c18);if(_0x5a4fe6[_0x21b6('0x2c')]['filter']){_0x475af4[_0x21b6('0x36')]=_['merge'](_0x475af4[_0x21b6('0x36')],{'$or':_[_0x21b6('0x26')](_0x428c18,function(_0x2dcde5){if(_0x2dcde5[_0x21b6('0x29')]!=='VIRTUAL'){var _0x3636d5={};_0x3636d5[_0x2dcde5[_0x21b6('0x23')]]={'$like':'%'+_0x5a4fe6[_0x21b6('0x2c')]['filter']+'%'};return _0x3636d5;}})});}_0x475af4=_[_0x21b6('0x37')]({},_0x475af4,_0x5a4fe6[_0x21b6('0x38')]);var _0x14abf2={'where':_0x475af4[_0x21b6('0x36')]};return db[_0x21b6('0x39')][_0x21b6('0x3a')](_0x14abf2)[_0x21b6('0x20')](function(_0x2b52c3){_0x26a0a2[_0x21b6('0x3a')]=_0x2b52c3;if(_0x5a4fe6[_0x21b6('0x2c')][_0x21b6('0x3b')]){_0x475af4['include']=[{'all':!![]}];}return db['SalesforceField'][_0x21b6('0x3c')](_0x475af4);})[_0x21b6('0x20')](function(_0x50da50){_0x26a0a2['rows']=_0x50da50;return _0x26a0a2;})['then'](respondWithFilteredResult(_0x2c84e3,_0x475af4))[_0x21b6('0x3d')](handleError(_0x2c84e3,null));};exports['show']=function(_0x15d4c2,_0x702c0c){var _0x3e968d={'raw':!![],'where':{'id':_0x15d4c2[_0x21b6('0x3e')]['id']}},_0x7423fd={};_0x7423fd[_0x21b6('0x2b')]=_['keys'](db['SalesforceField'][_0x21b6('0x27')]);_0x7423fd[_0x21b6('0x2c')]=_['keys'](_0x15d4c2[_0x21b6('0x2c')]);_0x7423fd[_0x21b6('0x2d')]=_[_0x21b6('0x2e')](_0x7423fd[_0x21b6('0x2b')],_0x7423fd['query']);_0x3e968d[_0x21b6('0x31')]=_['intersection'](_0x7423fd[_0x21b6('0x2b')],qs[_0x21b6('0x2f')](_0x15d4c2[_0x21b6('0x2c')]['fields']));_0x3e968d[_0x21b6('0x31')]=_0x3e968d[_0x21b6('0x31')][_0x21b6('0x30')]?_0x3e968d[_0x21b6('0x31')]:_0x7423fd[_0x21b6('0x2b')];if(_0x15d4c2['query']['includeAll']){_0x3e968d[_0x21b6('0x3f')]=[{'all':!![]}];}_0x3e968d=_[_0x21b6('0x37')]({},_0x3e968d,_0x15d4c2[_0x21b6('0x38')]);return db[_0x21b6('0x39')][_0x21b6('0x40')](_0x3e968d)[_0x21b6('0x20')](handleEntityNotFound(_0x702c0c,null))[_0x21b6('0x20')](respondWithResult(_0x702c0c,null))[_0x21b6('0x3d')](handleError(_0x702c0c,null));};exports[_0x21b6('0x41')]=function(_0x58e6ee,_0x50ccd6){return db[_0x21b6('0x39')]['create'](_0x58e6ee[_0x21b6('0x42')],{})[_0x21b6('0x20')](respondWithResult(_0x50ccd6,0xc9))[_0x21b6('0x3d')](handleError(_0x50ccd6,null));};exports[_0x21b6('0x1f')]=function(_0x51c1d6,_0x4f817e){if(_0x51c1d6[_0x21b6('0x42')]['id']){delete _0x51c1d6[_0x21b6('0x42')]['id'];}return db[_0x21b6('0x39')][_0x21b6('0x40')]({'where':{'id':_0x51c1d6[_0x21b6('0x3e')]['id']}})[_0x21b6('0x20')](handleEntityNotFound(_0x4f817e,null))[_0x21b6('0x20')](saveUpdates(_0x51c1d6['body'],null))['then'](respondWithResult(_0x4f817e,null))[_0x21b6('0x3d')](handleError(_0x4f817e,null));};exports[_0x21b6('0x43')]=function(_0x5736dd,_0x411a9f){return db[_0x21b6('0x39')][_0x21b6('0x40')]({'where':{'id':_0x5736dd[_0x21b6('0x3e')]['id']}})['then'](handleEntityNotFound(_0x411a9f,null))['then'](removeEntity(_0x411a9f,null))[_0x21b6('0x3d')](handleError(_0x411a9f,null));};
\ No newline at end of file