Built motion from commit (unavailable).|2.5.14
[motion2.git] / server / api / userProfileSection / userProfileSection.controller.js
index 3b2f94a..47fee0f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdafb=['error','name','send','map','UserProfileSection','rawAttributes','fieldName','type','key','keys','model','query','fields','attributes','nolimit','order','sort','filters','pick','filter','where','merge','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','intersection','length','create','body','find','params','destroy','describe','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','to-csv','ejs','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','end'];(function(_0x122096,_0x60c295){var _0x3d1966=function(_0x3d569e){while(--_0x3d569e){_0x122096['push'](_0x122096['shift']());}};_0x3d1966(++_0x60c295);}(_0xdafb,0x10a));var _0xbdaf=function(_0x1ef6d0,_0x516bac){_0x1ef6d0=_0x1ef6d0-0x0;var _0x2a87e3=_0xdafb[_0x1ef6d0];return _0x2a87e3;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xbdaf('0x0'));var rimraf=require(_0xbdaf('0x1'));var zipdir=require(_0xbdaf('0x2'));var jsonpatch=require(_0xbdaf('0x3'));var rp=require(_0xbdaf('0x4'));var moment=require(_0xbdaf('0x5'));var BPromise=require(_0xbdaf('0x6'));var Mustache=require('mustache');var util=require(_0xbdaf('0x7'));var path=require('path');var sox=require('sox');var csv=require(_0xbdaf('0x8'));var ejs=require(_0xbdaf('0x9'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xbdaf('0xa'));var jsforce=require('jsforce');var deskjs=require(_0xbdaf('0xb'));var toCsv=require(_0xbdaf('0x8'));var querystring=require(_0xbdaf('0xc'));var Papa=require(_0xbdaf('0xd'));var Redis=require(_0xbdaf('0xe'));var authService=require(_0xbdaf('0xf'));var qs=require('../../components/parsers/qs');var as=require(_0xbdaf('0x10'));var hardwareService=require(_0xbdaf('0x11'));var logger=require(_0xbdaf('0x12'))(_0xbdaf('0x13'));var utils=require(_0xbdaf('0x14'));var config=require(_0xbdaf('0x15'));var licenseUtil=require(_0xbdaf('0x16'));var db=require(_0xbdaf('0x17'))['db'];function respondWithStatusCode(_0x23a1ee,_0x5733a0){_0x5733a0=_0x5733a0||0xcc;return function(_0x595aea){if(_0x595aea){return _0x23a1ee[_0xbdaf('0x18')](_0x5733a0);}return _0x23a1ee[_0xbdaf('0x19')](_0x5733a0)['end']();};}function respondWithResult(_0x2be207,_0x4f5d77){_0x4f5d77=_0x4f5d77||0xc8;return function(_0xacff2b){if(_0xacff2b){return _0x2be207[_0xbdaf('0x19')](_0x4f5d77)[_0xbdaf('0x1a')](_0xacff2b);}};}function respondWithFilteredResult(_0x19f919,_0x4231ae){return function(_0x56c281){if(_0x56c281){var _0x27f28c=_0x56c281[_0xbdaf('0x1b')],_0x23e927=_0x4231ae[_0xbdaf('0x1c')],_0x598587=_0x4231ae[_0xbdaf('0x1c')]+_0x4231ae[_0xbdaf('0x1d')],_0x47b8a8;if(_0x598587>=_0x27f28c){_0x598587=_0x27f28c;_0x47b8a8=0xc8;}else{_0x47b8a8=0xce;}_0x19f919['status'](_0x47b8a8);return _0x19f919[_0xbdaf('0x1e')](_0xbdaf('0x1f'),_0x23e927+'-'+_0x598587+'/'+_0x27f28c)[_0xbdaf('0x1a')](_0x56c281);}return null;};}function patchUpdates(_0x190109){return function(_0x533b3b){try{jsonpatch[_0xbdaf('0x20')](_0x533b3b,_0x190109,!![]);}catch(_0x1a0319){return BPromise[_0xbdaf('0x21')](_0x1a0319);}return _0x533b3b[_0xbdaf('0x22')]();};}function saveUpdates(_0x2e324a,_0x2a89b5){return function(_0x11cb19){if(_0x11cb19){return _0x11cb19[_0xbdaf('0x23')](_0x2e324a)[_0xbdaf('0x24')](function(_0x2d07ef){return _0x2d07ef;});}return null;};}function removeEntity(_0x160d2b,_0x3fd8ff){return function(_0x508a26){if(_0x508a26){return _0x508a26['destroy']()[_0xbdaf('0x24')](function(){_0x160d2b[_0xbdaf('0x19')](0xcc)[_0xbdaf('0x25')]();});}};}function handleEntityNotFound(_0xb11169,_0x4757ee){return function(_0x1fcc46){if(!_0x1fcc46){_0xb11169[_0xbdaf('0x18')](0x194);}return _0x1fcc46;};}function handleError(_0x31af57,_0x493506){_0x493506=_0x493506||0x1f4;return function(_0x3d88ec){logger[_0xbdaf('0x26')](_0x3d88ec['stack']);if(_0x3d88ec['name']){delete _0x3d88ec[_0xbdaf('0x27')];}_0x31af57[_0xbdaf('0x19')](_0x493506)[_0xbdaf('0x28')](_0x3d88ec);};}exports['index']=function(_0x31018e,_0x40391a){var _0x495d76={},_0x363353={},_0x57676c={'count':0x0,'rows':[]};var _0x55ddab=_[_0xbdaf('0x29')](db[_0xbdaf('0x2a')][_0xbdaf('0x2b')],function(_0x255047){return{'name':_0x255047[_0xbdaf('0x2c')],'type':_0x255047[_0xbdaf('0x2d')][_0xbdaf('0x2e')]};});_0x363353['model']=_['map'](_0x55ddab,'name');_0x363353['query']=_[_0xbdaf('0x2f')](_0x31018e['query']);_0x363353['filters']=_['intersection'](_0x363353[_0xbdaf('0x30')],_0x363353[_0xbdaf('0x31')]);_0x495d76['attributes']=_['intersection'](_0x363353[_0xbdaf('0x30')],qs['fields'](_0x31018e[_0xbdaf('0x31')][_0xbdaf('0x32')]));_0x495d76[_0xbdaf('0x33')]=_0x495d76[_0xbdaf('0x33')]['length']?_0x495d76[_0xbdaf('0x33')]:_0x363353['model'];if(!_0x31018e[_0xbdaf('0x31')]['hasOwnProperty'](_0xbdaf('0x34'))){_0x495d76[_0xbdaf('0x1d')]=qs[_0xbdaf('0x1d')](_0x31018e['query']['limit']);_0x495d76[_0xbdaf('0x1c')]=qs[_0xbdaf('0x1c')](_0x31018e[_0xbdaf('0x31')][_0xbdaf('0x1c')]);}_0x495d76[_0xbdaf('0x35')]=qs[_0xbdaf('0x36')](_0x31018e[_0xbdaf('0x31')]['sort']);_0x495d76['where']=qs[_0xbdaf('0x37')](_[_0xbdaf('0x38')](_0x31018e[_0xbdaf('0x31')],_0x363353[_0xbdaf('0x37')]),_0x55ddab);if(_0x31018e[_0xbdaf('0x31')][_0xbdaf('0x39')]){_0x495d76[_0xbdaf('0x3a')]=_[_0xbdaf('0x3b')](_0x495d76[_0xbdaf('0x3a')],{'$or':_['map'](_0x55ddab,function(_0x3d7be4){if(_0x3d7be4[_0xbdaf('0x2d')]!==_0xbdaf('0x3c')){var _0x52584e={};_0x52584e[_0x3d7be4[_0xbdaf('0x27')]]={'$like':'%'+_0x31018e[_0xbdaf('0x31')][_0xbdaf('0x39')]+'%'};return _0x52584e;}})});}_0x495d76=_[_0xbdaf('0x3b')]({},_0x495d76,_0x31018e[_0xbdaf('0x3d')]);var _0x39ccdd={'where':_0x495d76[_0xbdaf('0x3a')]};return db[_0xbdaf('0x2a')][_0xbdaf('0x1b')](_0x39ccdd)[_0xbdaf('0x24')](function(_0x3d4d9b){_0x57676c['count']=_0x3d4d9b;if(_0x31018e['query'][_0xbdaf('0x3e')]){_0x495d76[_0xbdaf('0x3f')]=[{'all':!![]}];}return db[_0xbdaf('0x2a')][_0xbdaf('0x40')](_0x495d76);})[_0xbdaf('0x24')](function(_0x293fd1){_0x57676c[_0xbdaf('0x41')]=_0x293fd1;return _0x57676c;})['then'](respondWithFilteredResult(_0x40391a,_0x495d76))[_0xbdaf('0x42')](handleError(_0x40391a,null));};exports[_0xbdaf('0x43')]=function(_0x13d09a,_0x3f361a){var _0xfb6d72={'raw':![],'where':{'id':_0x13d09a['params']['id']}},_0x4ac904={};_0x4ac904[_0xbdaf('0x30')]=_['keys'](db['UserProfileSection']['rawAttributes']);_0x4ac904[_0xbdaf('0x31')]=_['keys'](_0x13d09a['query']);_0x4ac904[_0xbdaf('0x37')]=_[_0xbdaf('0x44')](_0x4ac904[_0xbdaf('0x30')],_0x4ac904['query']);_0xfb6d72['attributes']=_[_0xbdaf('0x44')](_0x4ac904[_0xbdaf('0x30')],qs[_0xbdaf('0x32')](_0x13d09a[_0xbdaf('0x31')]['fields']));_0xfb6d72['attributes']=_0xfb6d72['attributes'][_0xbdaf('0x45')]?_0xfb6d72[_0xbdaf('0x33')]:_0x4ac904[_0xbdaf('0x30')];if(_0x13d09a[_0xbdaf('0x31')][_0xbdaf('0x3e')]){_0xfb6d72[_0xbdaf('0x3f')]=[{'all':!![]}];}_0xfb6d72=_[_0xbdaf('0x3b')]({},_0xfb6d72,_0x13d09a[_0xbdaf('0x3d')]);return db[_0xbdaf('0x2a')]['find'](_0xfb6d72)[_0xbdaf('0x24')](handleEntityNotFound(_0x3f361a,null))['then'](respondWithResult(_0x3f361a,null))[_0xbdaf('0x42')](handleError(_0x3f361a,null));};exports['create']=function(_0x563eed,_0x5a31d3){return db['UserProfileSection'][_0xbdaf('0x46')](_0x563eed[_0xbdaf('0x47')],{})['then'](respondWithResult(_0x5a31d3,0xc9))[_0xbdaf('0x42')](handleError(_0x5a31d3,null));};exports['update']=function(_0x36a0b9,_0x348bad){if(_0x36a0b9[_0xbdaf('0x47')]['id']){delete _0x36a0b9[_0xbdaf('0x47')]['id'];}return db['UserProfileSection'][_0xbdaf('0x48')]({'where':{'id':_0x36a0b9[_0xbdaf('0x49')]['id']}})['then'](handleEntityNotFound(_0x348bad,null))['then'](saveUpdates(_0x36a0b9[_0xbdaf('0x47')],null))['then'](respondWithResult(_0x348bad,null))[_0xbdaf('0x42')](handleError(_0x348bad,null));};exports[_0xbdaf('0x4a')]=function(_0x4bc26e,_0x6199dd){return db[_0xbdaf('0x2a')][_0xbdaf('0x48')]({'where':{'id':_0x4bc26e[_0xbdaf('0x49')]['id']}})[_0xbdaf('0x24')](handleEntityNotFound(_0x6199dd,null))['then'](removeEntity(_0x6199dd,null))[_0xbdaf('0x42')](handleError(_0x6199dd,null));};exports[_0xbdaf('0x4b')]=function(_0x1fa8a7,_0x1138c2){return db['UserProfileSection'][_0xbdaf('0x4b')]()[_0xbdaf('0x24')](respondWithResult(_0x1138c2,null))['catch'](handleError(_0x1138c2,null));};
\ No newline at end of file
+var _0x7261=['jsforce','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','end','json','offset','limit','status','set','Content-Range','reject','save','update','destroy','error','stack','name','send','index','map','UserProfileSection','rawAttributes','type','key','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','pick','filter','where','merge','VIRTUAL','options','count','then','includeAll','include','findAll','rows','catch','params','find','create','body','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','path','sox','ejs','lodash','squel','crypto'];(function(_0x2dc89,_0xda2bc0){var _0x375b28=function(_0x5d3ce8){while(--_0x5d3ce8){_0x2dc89['push'](_0x2dc89['shift']());}};_0x375b28(++_0xda2bc0);}(_0x7261,0x91));var _0x1726=function(_0x57868d,_0x238f03){_0x57868d=_0x57868d-0x0;var _0xc30fcb=_0x7261[_0x57868d];return _0xc30fcb;};'use strict';var pdf=require(_0x1726('0x0'));var emlformat=require(_0x1726('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x1726('0x2'));var jsonpatch=require(_0x1726('0x3'));var rp=require(_0x1726('0x4'));var moment=require('moment');var BPromise=require(_0x1726('0x5'));var Mustache=require(_0x1726('0x6'));var util=require('util');var path=require(_0x1726('0x7'));var sox=require(_0x1726('0x8'));var csv=require('to-csv');var ejs=require(_0x1726('0x9'));var fs=require('fs');var _=require(_0x1726('0xa'));var squel=require(_0x1726('0xb'));var crypto=require(_0x1726('0xc'));var jsforce=require(_0x1726('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x1726('0xe'));var querystring=require(_0x1726('0xf'));var Papa=require(_0x1726('0x10'));var Redis=require(_0x1726('0x11'));var authService=require(_0x1726('0x12'));var qs=require(_0x1726('0x13'));var as=require(_0x1726('0x14'));var hardwareService=require(_0x1726('0x15'));var logger=require(_0x1726('0x16'))(_0x1726('0x17'));var utils=require(_0x1726('0x18'));var config=require(_0x1726('0x19'));var licenseUtil=require(_0x1726('0x1a'));var db=require(_0x1726('0x1b'))['db'];function respondWithStatusCode(_0x1ec005,_0x4cd6bb){_0x4cd6bb=_0x4cd6bb||0xcc;return function(_0x4e88e6){if(_0x4e88e6){return _0x1ec005[_0x1726('0x1c')](_0x4cd6bb);}return _0x1ec005['status'](_0x4cd6bb)[_0x1726('0x1d')]();};}function respondWithResult(_0x48361a,_0x5c2a6f){_0x5c2a6f=_0x5c2a6f||0xc8;return function(_0x4c0481){if(_0x4c0481){return _0x48361a['status'](_0x5c2a6f)[_0x1726('0x1e')](_0x4c0481);}};}function respondWithFilteredResult(_0x3122d7,_0x5d652d){return function(_0x1fce0c){if(_0x1fce0c){var _0x21fa53=_0x1fce0c['count'],_0x4cec89=_0x5d652d['offset'],_0x1be596=_0x5d652d[_0x1726('0x1f')]+_0x5d652d[_0x1726('0x20')],_0x4c533b;if(_0x1be596>=_0x21fa53){_0x1be596=_0x21fa53;_0x4c533b=0xc8;}else{_0x4c533b=0xce;}_0x3122d7[_0x1726('0x21')](_0x4c533b);return _0x3122d7[_0x1726('0x22')](_0x1726('0x23'),_0x4cec89+'-'+_0x1be596+'/'+_0x21fa53)[_0x1726('0x1e')](_0x1fce0c);}return null;};}function patchUpdates(_0x1db604){return function(_0xfd7f8a){try{jsonpatch['apply'](_0xfd7f8a,_0x1db604,!![]);}catch(_0x533caa){return BPromise[_0x1726('0x24')](_0x533caa);}return _0xfd7f8a[_0x1726('0x25')]();};}function saveUpdates(_0x9f6523,_0x15a84d){return function(_0x39cd32){if(_0x39cd32){return _0x39cd32[_0x1726('0x26')](_0x9f6523)['then'](function(_0x534534){return _0x534534;});}return null;};}function removeEntity(_0xa7cd46,_0x3f4498){return function(_0x4a1ec2){if(_0x4a1ec2){return _0x4a1ec2[_0x1726('0x27')]()['then'](function(){_0xa7cd46[_0x1726('0x21')](0xcc)['end']();});}};}function handleEntityNotFound(_0x57b76f,_0x538df1){return function(_0x3ff7f7){if(!_0x3ff7f7){_0x57b76f[_0x1726('0x1c')](0x194);}return _0x3ff7f7;};}function handleError(_0xff2462,_0x305a1f){_0x305a1f=_0x305a1f||0x1f4;return function(_0x28be2a){logger[_0x1726('0x28')](_0x28be2a[_0x1726('0x29')]);if(_0x28be2a[_0x1726('0x2a')]){delete _0x28be2a['name'];}_0xff2462[_0x1726('0x21')](_0x305a1f)[_0x1726('0x2b')](_0x28be2a);};}exports[_0x1726('0x2c')]=function(_0x1c0e32,_0x1505ba){var _0x11ffbe={},_0x59e148={},_0x1b4eb7={'count':0x0,'rows':[]};var _0x11b9f2=_[_0x1726('0x2d')](db[_0x1726('0x2e')][_0x1726('0x2f')],function(_0x267620){return{'name':_0x267620['fieldName'],'type':_0x267620[_0x1726('0x30')][_0x1726('0x31')]};});_0x59e148[_0x1726('0x32')]=_['map'](_0x11b9f2,'name');_0x59e148[_0x1726('0x33')]=_[_0x1726('0x34')](_0x1c0e32[_0x1726('0x33')]);_0x59e148[_0x1726('0x35')]=_[_0x1726('0x36')](_0x59e148[_0x1726('0x32')],_0x59e148[_0x1726('0x33')]);_0x11ffbe[_0x1726('0x37')]=_['intersection'](_0x59e148[_0x1726('0x32')],qs['fields'](_0x1c0e32[_0x1726('0x33')][_0x1726('0x38')]));_0x11ffbe[_0x1726('0x37')]=_0x11ffbe[_0x1726('0x37')][_0x1726('0x39')]?_0x11ffbe[_0x1726('0x37')]:_0x59e148[_0x1726('0x32')];if(!_0x1c0e32['query'][_0x1726('0x3a')](_0x1726('0x3b'))){_0x11ffbe[_0x1726('0x20')]=qs['limit'](_0x1c0e32[_0x1726('0x33')][_0x1726('0x20')]);_0x11ffbe[_0x1726('0x1f')]=qs[_0x1726('0x1f')](_0x1c0e32[_0x1726('0x33')][_0x1726('0x1f')]);}_0x11ffbe['order']=qs['sort'](_0x1c0e32[_0x1726('0x33')][_0x1726('0x3c')]);_0x11ffbe['where']=qs[_0x1726('0x35')](_[_0x1726('0x3d')](_0x1c0e32[_0x1726('0x33')],_0x59e148[_0x1726('0x35')]),_0x11b9f2);if(_0x1c0e32[_0x1726('0x33')][_0x1726('0x3e')]){_0x11ffbe[_0x1726('0x3f')]=_[_0x1726('0x40')](_0x11ffbe[_0x1726('0x3f')],{'$or':_['map'](_0x11b9f2,function(_0x37700b){if(_0x37700b[_0x1726('0x30')]!==_0x1726('0x41')){var _0x448f1e={};_0x448f1e[_0x37700b['name']]={'$like':'%'+_0x1c0e32[_0x1726('0x33')][_0x1726('0x3e')]+'%'};return _0x448f1e;}})});}_0x11ffbe=_[_0x1726('0x40')]({},_0x11ffbe,_0x1c0e32[_0x1726('0x42')]);var _0x272bba={'where':_0x11ffbe[_0x1726('0x3f')]};return db[_0x1726('0x2e')][_0x1726('0x43')](_0x272bba)[_0x1726('0x44')](function(_0x11f964){_0x1b4eb7['count']=_0x11f964;if(_0x1c0e32[_0x1726('0x33')][_0x1726('0x45')]){_0x11ffbe[_0x1726('0x46')]=[{'all':!![]}];}return db[_0x1726('0x2e')][_0x1726('0x47')](_0x11ffbe);})[_0x1726('0x44')](function(_0xd980f9){_0x1b4eb7[_0x1726('0x48')]=_0xd980f9;return _0x1b4eb7;})['then'](respondWithFilteredResult(_0x1505ba,_0x11ffbe))[_0x1726('0x49')](handleError(_0x1505ba,null));};exports['show']=function(_0x124f4c,_0x4bddc8){var _0x49066e={'raw':![],'where':{'id':_0x124f4c[_0x1726('0x4a')]['id']}},_0x463181={};_0x463181[_0x1726('0x32')]=_[_0x1726('0x34')](db[_0x1726('0x2e')]['rawAttributes']);_0x463181['query']=_[_0x1726('0x34')](_0x124f4c[_0x1726('0x33')]);_0x463181['filters']=_['intersection'](_0x463181['model'],_0x463181[_0x1726('0x33')]);_0x49066e[_0x1726('0x37')]=_[_0x1726('0x36')](_0x463181[_0x1726('0x32')],qs[_0x1726('0x38')](_0x124f4c[_0x1726('0x33')][_0x1726('0x38')]));_0x49066e[_0x1726('0x37')]=_0x49066e['attributes'][_0x1726('0x39')]?_0x49066e['attributes']:_0x463181[_0x1726('0x32')];if(_0x124f4c[_0x1726('0x33')][_0x1726('0x45')]){_0x49066e[_0x1726('0x46')]=[{'all':!![]}];}_0x49066e=_[_0x1726('0x40')]({},_0x49066e,_0x124f4c['options']);return db[_0x1726('0x2e')][_0x1726('0x4b')](_0x49066e)[_0x1726('0x44')](handleEntityNotFound(_0x4bddc8,null))[_0x1726('0x44')](respondWithResult(_0x4bddc8,null))[_0x1726('0x49')](handleError(_0x4bddc8,null));};exports[_0x1726('0x4c')]=function(_0x1a4aa8,_0x430f6e){return db[_0x1726('0x2e')][_0x1726('0x4c')](_0x1a4aa8['body'],{})[_0x1726('0x44')](respondWithResult(_0x430f6e,0xc9))[_0x1726('0x49')](handleError(_0x430f6e,null));};exports[_0x1726('0x26')]=function(_0x17d664,_0x482613){if(_0x17d664[_0x1726('0x4d')]['id']){delete _0x17d664[_0x1726('0x4d')]['id'];}return db['UserProfileSection'][_0x1726('0x4b')]({'where':{'id':_0x17d664[_0x1726('0x4a')]['id']}})['then'](handleEntityNotFound(_0x482613,null))[_0x1726('0x44')](saveUpdates(_0x17d664['body'],null))['then'](respondWithResult(_0x482613,null))['catch'](handleError(_0x482613,null));};exports['destroy']=function(_0xd81fc5,_0x46ac2d){return db[_0x1726('0x2e')][_0x1726('0x4b')]({'where':{'id':_0xd81fc5['params']['id']}})[_0x1726('0x44')](handleEntityNotFound(_0x46ac2d,null))[_0x1726('0x44')](removeEntity(_0x46ac2d,null))[_0x1726('0x49')](handleError(_0x46ac2d,null));};exports[_0x1726('0x4e')]=function(_0x14ce4b,_0x5ca894){return db['UserProfileSection'][_0x1726('0x4e')]()[_0x1726('0x44')](respondWithResult(_0x5ca894,null))['catch'](handleError(_0x5ca894,null));};
\ No newline at end of file