Built motion from commit 753c950e.|2.5.42
[motion2.git] / server / api / openchannelApplication / openchannelApplication.controller.js
index efc1967..6b9d601 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd68c=['json','limit','undefined','count','offset','set','Content-Range','apply','save','update','then','destroy','sendStatus','error','stack','name','OpenchannelApplication','rawAttributes','fieldName','type','key','model','map','keys','filters','intersection','query','attributes','hasOwnProperty','nolimit','order','sort','where','pick','merge','VIRTUAL','filter','includeAll','include','findAll','rows','catch','fields','length','options','find','create','body','params','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','jsforce','desk.js','querystring','ioredis','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','status','end'];(function(_0x3df871,_0xda2e11){var _0x570f7b=function(_0xfaac78){while(--_0xfaac78){_0x3df871['push'](_0x3df871['shift']());}};_0x570f7b(++_0xda2e11);}(_0xd68c,0x7e));var _0xcd68=function(_0x20181d,_0x4967f4){_0x20181d=_0x20181d-0x0;var _0x1fc5a2=_0xd68c[_0x20181d];return _0x1fc5a2;};'use strict';var emlformat=require(_0xcd68('0x0'));var rimraf=require(_0xcd68('0x1'));var zipdir=require(_0xcd68('0x2'));var jsonpatch=require(_0xcd68('0x3'));var rp=require(_0xcd68('0x4'));var moment=require(_0xcd68('0x5'));var BPromise=require(_0xcd68('0x6'));var Mustache=require(_0xcd68('0x7'));var util=require(_0xcd68('0x8'));var path=require(_0xcd68('0x9'));var sox=require(_0xcd68('0xa'));var csv=require(_0xcd68('0xb'));var ejs=require(_0xcd68('0xc'));var fs=require('fs');var fs_extra=require('fs-extra');var _=require('lodash');var squel=require(_0xcd68('0xd'));var crypto=require('crypto');var jsforce=require(_0xcd68('0xe'));var deskjs=require(_0xcd68('0xf'));var toCsv=require(_0xcd68('0xb'));var querystring=require(_0xcd68('0x10'));var Papa=require('papaparse');var Redis=require(_0xcd68('0x11'));var authService=require('../../components/auth/service');var qs=require(_0xcd68('0x12'));var as=require(_0xcd68('0x13'));var hardwareService=require(_0xcd68('0x14'));var logger=require(_0xcd68('0x15'))(_0xcd68('0x16'));var utils=require(_0xcd68('0x17'));var config=require(_0xcd68('0x18'));var licenseUtil=require(_0xcd68('0x19'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1b68e7,_0xb80998){_0xb80998=_0xb80998||0xcc;return function(_0x13bbd6){if(_0x13bbd6){return _0x1b68e7['sendStatus'](_0xb80998);}return _0x1b68e7[_0xcd68('0x1a')](_0xb80998)[_0xcd68('0x1b')]();};}function respondWithResult(_0x163ac7,_0x89f8ba){_0x89f8ba=_0x89f8ba||0xc8;return function(_0x280081){if(_0x280081){return _0x163ac7[_0xcd68('0x1a')](_0x89f8ba)[_0xcd68('0x1c')](_0x280081);}};}function respondWithFilteredResult(_0x1443fc,_0x1961e5){return function(_0xc344d){if(_0xc344d){var _0xb36260=typeof _0x1961e5['offset']==='undefined'&&typeof _0x1961e5[_0xcd68('0x1d')]===_0xcd68('0x1e');var _0x3980c1=_0xc344d[_0xcd68('0x1f')];var _0x51225f=_0xb36260?0x0:_0x1961e5[_0xcd68('0x20')];var _0x53689f=_0xb36260?_0xc344d[_0xcd68('0x1f')]:_0x1961e5[_0xcd68('0x20')]+_0x1961e5[_0xcd68('0x1d')];var _0x35202a;if(_0x53689f>=_0x3980c1){_0x53689f=_0x3980c1;_0x35202a=0xc8;}else{_0x35202a=0xce;}_0x1443fc[_0xcd68('0x1a')](_0x35202a);return _0x1443fc[_0xcd68('0x21')](_0xcd68('0x22'),_0x51225f+'-'+_0x53689f+'/'+_0x3980c1)[_0xcd68('0x1c')](_0xc344d);}return null;};}function patchUpdates(_0x12cf4b){return function(_0x9a98f4){try{jsonpatch[_0xcd68('0x23')](_0x9a98f4,_0x12cf4b,!![]);}catch(_0x26189c){return BPromise['reject'](_0x26189c);}return _0x9a98f4[_0xcd68('0x24')]();};}function saveUpdates(_0x426a44,_0x127423){return function(_0x5c0c7d){if(_0x5c0c7d){return _0x5c0c7d[_0xcd68('0x25')](_0x426a44)[_0xcd68('0x26')](function(_0x5b54c9){return _0x5b54c9;});}return null;};}function removeEntity(_0x547af4,_0x3e1d19){return function(_0x553452){if(_0x553452){return _0x553452[_0xcd68('0x27')]()[_0xcd68('0x26')](function(){_0x547af4['status'](0xcc)[_0xcd68('0x1b')]();});}};}function handleEntityNotFound(_0x5653a0,_0x333abe){return function(_0x5b56b1){if(!_0x5b56b1){_0x5653a0[_0xcd68('0x28')](0x194);}return _0x5b56b1;};}function handleError(_0x53c7cb,_0x1e2a7d){_0x1e2a7d=_0x1e2a7d||0x1f4;return function(_0x508213){logger[_0xcd68('0x29')](_0x508213[_0xcd68('0x2a')]);if(_0x508213[_0xcd68('0x2b')]){delete _0x508213[_0xcd68('0x2b')];}_0x53c7cb[_0xcd68('0x1a')](_0x1e2a7d)['send'](_0x508213);};}exports['index']=function(_0x4d17dc,_0x21a88a){var _0x40c225={},_0x4266b3={},_0xeff7c1={'count':0x0,'rows':[]};var _0x4805b6=_['map'](db[_0xcd68('0x2c')][_0xcd68('0x2d')],function(_0x3fd339){return{'name':_0x3fd339[_0xcd68('0x2e')],'type':_0x3fd339[_0xcd68('0x2f')][_0xcd68('0x30')]};});_0x4266b3[_0xcd68('0x31')]=_[_0xcd68('0x32')](_0x4805b6,_0xcd68('0x2b'));_0x4266b3['query']=_[_0xcd68('0x33')](_0x4d17dc['query']);_0x4266b3[_0xcd68('0x34')]=_[_0xcd68('0x35')](_0x4266b3[_0xcd68('0x31')],_0x4266b3[_0xcd68('0x36')]);_0x40c225[_0xcd68('0x37')]=_['intersection'](_0x4266b3['model'],qs['fields'](_0x4d17dc[_0xcd68('0x36')]['fields']));_0x40c225[_0xcd68('0x37')]=_0x40c225[_0xcd68('0x37')]['length']?_0x40c225['attributes']:_0x4266b3[_0xcd68('0x31')];if(!_0x4d17dc[_0xcd68('0x36')][_0xcd68('0x38')](_0xcd68('0x39'))){_0x40c225[_0xcd68('0x1d')]=qs[_0xcd68('0x1d')](_0x4d17dc[_0xcd68('0x36')]['limit']);_0x40c225['offset']=qs[_0xcd68('0x20')](_0x4d17dc['query']['offset']);}_0x40c225[_0xcd68('0x3a')]=qs[_0xcd68('0x3b')](_0x4d17dc[_0xcd68('0x36')][_0xcd68('0x3b')]);_0x40c225[_0xcd68('0x3c')]=qs['filters'](_[_0xcd68('0x3d')](_0x4d17dc[_0xcd68('0x36')],_0x4266b3['filters']),_0x4805b6);if(_0x4d17dc[_0xcd68('0x36')]['filter']){_0x40c225[_0xcd68('0x3c')]=_[_0xcd68('0x3e')](_0x40c225[_0xcd68('0x3c')],{'$or':_['map'](_0x4805b6,function(_0x13ef4f){if(_0x13ef4f['type']!==_0xcd68('0x3f')){var _0x55c2ad={};_0x55c2ad[_0x13ef4f[_0xcd68('0x2b')]]={'$like':'%'+_0x4d17dc[_0xcd68('0x36')][_0xcd68('0x40')]+'%'};return _0x55c2ad;}})});}_0x40c225=_['merge']({},_0x40c225,_0x4d17dc['options']);var _0x33130a={'where':_0x40c225[_0xcd68('0x3c')]};return db[_0xcd68('0x2c')][_0xcd68('0x1f')](_0x33130a)[_0xcd68('0x26')](function(_0x3449ba){_0xeff7c1[_0xcd68('0x1f')]=_0x3449ba;if(_0x4d17dc[_0xcd68('0x36')][_0xcd68('0x41')]){_0x40c225[_0xcd68('0x42')]=[{'all':!![]}];}return db[_0xcd68('0x2c')][_0xcd68('0x43')](_0x40c225);})[_0xcd68('0x26')](function(_0x4b2407){_0xeff7c1[_0xcd68('0x44')]=_0x4b2407;return _0xeff7c1;})['then'](respondWithFilteredResult(_0x21a88a,_0x40c225))[_0xcd68('0x45')](handleError(_0x21a88a,null));};exports['show']=function(_0x43fffb,_0x522aa8){var _0x57627d={'raw':!![],'where':{'id':_0x43fffb['params']['id']}},_0x2b24f0={};_0x2b24f0[_0xcd68('0x31')]=_[_0xcd68('0x33')](db[_0xcd68('0x2c')]['rawAttributes']);_0x2b24f0['query']=_['keys'](_0x43fffb[_0xcd68('0x36')]);_0x2b24f0[_0xcd68('0x34')]=_[_0xcd68('0x35')](_0x2b24f0[_0xcd68('0x31')],_0x2b24f0[_0xcd68('0x36')]);_0x57627d[_0xcd68('0x37')]=_['intersection'](_0x2b24f0[_0xcd68('0x31')],qs[_0xcd68('0x46')](_0x43fffb['query'][_0xcd68('0x46')]));_0x57627d[_0xcd68('0x37')]=_0x57627d[_0xcd68('0x37')][_0xcd68('0x47')]?_0x57627d[_0xcd68('0x37')]:_0x2b24f0[_0xcd68('0x31')];if(_0x43fffb[_0xcd68('0x36')][_0xcd68('0x41')]){_0x57627d[_0xcd68('0x42')]=[{'all':!![]}];}_0x57627d=_[_0xcd68('0x3e')]({},_0x57627d,_0x43fffb[_0xcd68('0x48')]);return db['OpenchannelApplication'][_0xcd68('0x49')](_0x57627d)[_0xcd68('0x26')](handleEntityNotFound(_0x522aa8,null))[_0xcd68('0x26')](respondWithResult(_0x522aa8,null))[_0xcd68('0x45')](handleError(_0x522aa8,null));};exports[_0xcd68('0x4a')]=function(_0x393aa3,_0x136a51){return db['OpenchannelApplication']['create'](_0x393aa3[_0xcd68('0x4b')],{})[_0xcd68('0x26')](respondWithResult(_0x136a51,0xc9))['catch'](handleError(_0x136a51,null));};exports[_0xcd68('0x25')]=function(_0x20e7f7,_0xc6d435){if(_0x20e7f7['body']['id']){delete _0x20e7f7['body']['id'];}return db[_0xcd68('0x2c')][_0xcd68('0x49')]({'where':{'id':_0x20e7f7['params']['id']}})[_0xcd68('0x26')](handleEntityNotFound(_0xc6d435,null))[_0xcd68('0x26')](saveUpdates(_0x20e7f7[_0xcd68('0x4b')],null))[_0xcd68('0x26')](respondWithResult(_0xc6d435,null))['catch'](handleError(_0xc6d435,null));};exports[_0xcd68('0x27')]=function(_0x13540a,_0x58c6c9){return db[_0xcd68('0x2c')][_0xcd68('0x49')]({'where':{'id':_0x13540a[_0xcd68('0x4c')]['id']}})[_0xcd68('0x26')](handleEntityNotFound(_0x58c6c9,null))[_0xcd68('0x26')](removeEntity(_0x58c6c9,null))['catch'](handleError(_0x58c6c9,null));};
\ No newline at end of file
+var _0xf17b=['model','fields','attributes','sort','where','filters','pick','filter','merge','type','options','OpenchannelApplication','includeAll','catch','params','rawAttributes','length','include','find','create','body','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','util','path','to-csv','ejs','fs-extra','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','status','json','offset','limit','count','set','Content-Range','reject','update','then','destroy','sendStatus','error','stack','name','send','index','map','key','query','keys','intersection'];(function(_0x38697a,_0x2af2f2){var _0x2995e3=function(_0x1a7de0){while(--_0x1a7de0){_0x38697a['push'](_0x38697a['shift']());}};_0x2995e3(++_0x2af2f2);}(_0xf17b,0x12d));var _0xbf17=function(_0x334619,_0x4d049e){_0x334619=_0x334619-0x0;var _0x174dea=_0xf17b[_0x334619];return _0x174dea;};'use strict';var emlformat=require(_0xbf17('0x0'));var rimraf=require(_0xbf17('0x1'));var zipdir=require(_0xbf17('0x2'));var jsonpatch=require(_0xbf17('0x3'));var rp=require(_0xbf17('0x4'));var moment=require(_0xbf17('0x5'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xbf17('0x6'));var path=require(_0xbf17('0x7'));var sox=require('sox');var csv=require(_0xbf17('0x8'));var ejs=require(_0xbf17('0x9'));var fs=require('fs');var fs_extra=require(_0xbf17('0xa'));var _=require(_0xbf17('0xb'));var squel=require(_0xbf17('0xc'));var crypto=require(_0xbf17('0xd'));var jsforce=require(_0xbf17('0xe'));var deskjs=require(_0xbf17('0xf'));var toCsv=require('to-csv');var querystring=require(_0xbf17('0x10'));var Papa=require(_0xbf17('0x11'));var Redis=require(_0xbf17('0x12'));var authService=require(_0xbf17('0x13'));var qs=require(_0xbf17('0x14'));var as=require(_0xbf17('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xbf17('0x16'))('api');var utils=require(_0xbf17('0x17'));var config=require(_0xbf17('0x18'));var licenseUtil=require(_0xbf17('0x19'));var db=require(_0xbf17('0x1a'))['db'];function respondWithStatusCode(_0x4a06a9,_0x3e2b29){_0x3e2b29=_0x3e2b29||0xcc;return function(_0x540b37){if(_0x540b37){return _0x4a06a9['sendStatus'](_0x3e2b29);}return _0x4a06a9[_0xbf17('0x1b')](_0x3e2b29)['end']();};}function respondWithResult(_0x388cf2,_0x13bdb5){_0x13bdb5=_0x13bdb5||0xc8;return function(_0x561b65){if(_0x561b65){return _0x388cf2[_0xbf17('0x1b')](_0x13bdb5)[_0xbf17('0x1c')](_0x561b65);}};}function respondWithFilteredResult(_0x222835,_0x5ce313){return function(_0x3a3090){if(_0x3a3090){var _0x2edc60=typeof _0x5ce313[_0xbf17('0x1d')]==='undefined'&&typeof _0x5ce313[_0xbf17('0x1e')]==='undefined';var _0x1a3a1b=_0x3a3090[_0xbf17('0x1f')];var _0x55ba24=_0x2edc60?0x0:_0x5ce313['offset'];var _0x5b7591=_0x2edc60?_0x3a3090['count']:_0x5ce313['offset']+_0x5ce313[_0xbf17('0x1e')];var _0x478904;if(_0x5b7591>=_0x1a3a1b){_0x5b7591=_0x1a3a1b;_0x478904=0xc8;}else{_0x478904=0xce;}_0x222835['status'](_0x478904);return _0x222835[_0xbf17('0x20')](_0xbf17('0x21'),_0x55ba24+'-'+_0x5b7591+'/'+_0x1a3a1b)[_0xbf17('0x1c')](_0x3a3090);}return null;};}function patchUpdates(_0x3a4cb1){return function(_0x3d7dda){try{jsonpatch['apply'](_0x3d7dda,_0x3a4cb1,!![]);}catch(_0x44fa09){return BPromise[_0xbf17('0x22')](_0x44fa09);}return _0x3d7dda['save']();};}function saveUpdates(_0x26794c,_0x41196c){return function(_0x188d0c){if(_0x188d0c){return _0x188d0c[_0xbf17('0x23')](_0x26794c)[_0xbf17('0x24')](function(_0x2bb9cf){return _0x2bb9cf;});}return null;};}function removeEntity(_0x5e1b7b,_0x1691d7){return function(_0x22c097){if(_0x22c097){return _0x22c097[_0xbf17('0x25')]()['then'](function(){_0x5e1b7b[_0xbf17('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4cf845,_0x15e43f){return function(_0x135d29){if(!_0x135d29){_0x4cf845[_0xbf17('0x26')](0x194);}return _0x135d29;};}function handleError(_0x3bbd29,_0x5add7a){_0x5add7a=_0x5add7a||0x1f4;return function(_0x57614f){logger[_0xbf17('0x27')](_0x57614f[_0xbf17('0x28')]);if(_0x57614f[_0xbf17('0x29')]){delete _0x57614f[_0xbf17('0x29')];}_0x3bbd29[_0xbf17('0x1b')](_0x5add7a)[_0xbf17('0x2a')](_0x57614f);};}exports[_0xbf17('0x2b')]=function(_0x4d3146,_0x260196){var _0x16470c={},_0x514f12={},_0x5b315f={'count':0x0,'rows':[]};var _0x4f28d5=_[_0xbf17('0x2c')](db['OpenchannelApplication']['rawAttributes'],function(_0x28e219){return{'name':_0x28e219['fieldName'],'type':_0x28e219['type'][_0xbf17('0x2d')]};});_0x514f12['model']=_['map'](_0x4f28d5,_0xbf17('0x29'));_0x514f12[_0xbf17('0x2e')]=_[_0xbf17('0x2f')](_0x4d3146[_0xbf17('0x2e')]);_0x514f12['filters']=_[_0xbf17('0x30')](_0x514f12[_0xbf17('0x31')],_0x514f12[_0xbf17('0x2e')]);_0x16470c['attributes']=_['intersection'](_0x514f12[_0xbf17('0x31')],qs[_0xbf17('0x32')](_0x4d3146[_0xbf17('0x2e')]['fields']));_0x16470c[_0xbf17('0x33')]=_0x16470c['attributes']['length']?_0x16470c['attributes']:_0x514f12[_0xbf17('0x31')];if(!_0x4d3146['query']['hasOwnProperty']('nolimit')){_0x16470c[_0xbf17('0x1e')]=qs[_0xbf17('0x1e')](_0x4d3146[_0xbf17('0x2e')][_0xbf17('0x1e')]);_0x16470c[_0xbf17('0x1d')]=qs[_0xbf17('0x1d')](_0x4d3146[_0xbf17('0x2e')]['offset']);}_0x16470c['order']=qs[_0xbf17('0x34')](_0x4d3146[_0xbf17('0x2e')][_0xbf17('0x34')]);_0x16470c[_0xbf17('0x35')]=qs[_0xbf17('0x36')](_[_0xbf17('0x37')](_0x4d3146['query'],_0x514f12['filters']),_0x4f28d5);if(_0x4d3146[_0xbf17('0x2e')][_0xbf17('0x38')]){_0x16470c[_0xbf17('0x35')]=_[_0xbf17('0x39')](_0x16470c['where'],{'$or':_[_0xbf17('0x2c')](_0x4f28d5,function(_0xeb804f){if(_0xeb804f[_0xbf17('0x3a')]!=='VIRTUAL'){var _0x50c2b5={};_0x50c2b5[_0xeb804f[_0xbf17('0x29')]]={'$like':'%'+_0x4d3146['query'][_0xbf17('0x38')]+'%'};return _0x50c2b5;}})});}_0x16470c=_[_0xbf17('0x39')]({},_0x16470c,_0x4d3146[_0xbf17('0x3b')]);var _0x371e3d={'where':_0x16470c[_0xbf17('0x35')]};return db[_0xbf17('0x3c')]['count'](_0x371e3d)['then'](function(_0x2c35a8){_0x5b315f[_0xbf17('0x1f')]=_0x2c35a8;if(_0x4d3146[_0xbf17('0x2e')][_0xbf17('0x3d')]){_0x16470c['include']=[{'all':!![]}];}return db[_0xbf17('0x3c')]['findAll'](_0x16470c);})['then'](function(_0xe8f720){_0x5b315f['rows']=_0xe8f720;return _0x5b315f;})['then'](respondWithFilteredResult(_0x260196,_0x16470c))[_0xbf17('0x3e')](handleError(_0x260196,null));};exports['show']=function(_0x5b7382,_0x1cb177){var _0xba438c={'raw':!![],'where':{'id':_0x5b7382[_0xbf17('0x3f')]['id']}},_0x4520bf={};_0x4520bf[_0xbf17('0x31')]=_[_0xbf17('0x2f')](db[_0xbf17('0x3c')][_0xbf17('0x40')]);_0x4520bf['query']=_[_0xbf17('0x2f')](_0x5b7382[_0xbf17('0x2e')]);_0x4520bf[_0xbf17('0x36')]=_['intersection'](_0x4520bf[_0xbf17('0x31')],_0x4520bf[_0xbf17('0x2e')]);_0xba438c[_0xbf17('0x33')]=_[_0xbf17('0x30')](_0x4520bf['model'],qs[_0xbf17('0x32')](_0x5b7382['query'][_0xbf17('0x32')]));_0xba438c[_0xbf17('0x33')]=_0xba438c[_0xbf17('0x33')][_0xbf17('0x41')]?_0xba438c[_0xbf17('0x33')]:_0x4520bf[_0xbf17('0x31')];if(_0x5b7382[_0xbf17('0x2e')]['includeAll']){_0xba438c[_0xbf17('0x42')]=[{'all':!![]}];}_0xba438c=_[_0xbf17('0x39')]({},_0xba438c,_0x5b7382[_0xbf17('0x3b')]);return db[_0xbf17('0x3c')][_0xbf17('0x43')](_0xba438c)[_0xbf17('0x24')](handleEntityNotFound(_0x1cb177,null))[_0xbf17('0x24')](respondWithResult(_0x1cb177,null))[_0xbf17('0x3e')](handleError(_0x1cb177,null));};exports[_0xbf17('0x44')]=function(_0x42e8f0,_0x1c0fe7){return db[_0xbf17('0x3c')][_0xbf17('0x44')](_0x42e8f0[_0xbf17('0x45')],{})[_0xbf17('0x24')](respondWithResult(_0x1c0fe7,0xc9))[_0xbf17('0x3e')](handleError(_0x1c0fe7,null));};exports[_0xbf17('0x23')]=function(_0x3a6af1,_0x9c632d){if(_0x3a6af1[_0xbf17('0x45')]['id']){delete _0x3a6af1['body']['id'];}return db[_0xbf17('0x3c')][_0xbf17('0x43')]({'where':{'id':_0x3a6af1['params']['id']}})[_0xbf17('0x24')](handleEntityNotFound(_0x9c632d,null))['then'](saveUpdates(_0x3a6af1[_0xbf17('0x45')],null))[_0xbf17('0x24')](respondWithResult(_0x9c632d,null))['catch'](handleError(_0x9c632d,null));};exports[_0xbf17('0x25')]=function(_0x15b57a,_0x3b1535){return db[_0xbf17('0x3c')][_0xbf17('0x43')]({'where':{'id':_0x15b57a[_0xbf17('0x3f')]['id']}})['then'](handleEntityNotFound(_0x3b1535,null))[_0xbf17('0x24')](removeEntity(_0x3b1535,null))[_0xbf17('0x3e')](handleError(_0x3b1535,null));};
\ No newline at end of file