diff --git a/cdn/js/bootstrap-fileupload.min.js b/cdn/js/bootstrap-fileupload.min.js
new file mode 100755
index 0000000..e8772d5
--- /dev/null
+++ b/cdn/js/bootstrap-fileupload.min.js
@@ -0,0 +1 @@
+!function(a){"use strict";var b=function(b,c){this.$element=a(b);this.type=this.$element.data("uploadtype")||(this.$element.find(".thumbnail").length>0?"image":"file");this.$input=this.$element.find(":file");if(this.$input.length===0)return;this.name=this.$input.attr("name")||c.name;this.$hidden=this.$element.find(':hidden[name="'+this.name+'"]');if(this.$hidden.length===0){this.$hidden=a('');this.$element.prepend(this.$hidden)}this.$preview=this.$element.find(".fileupload-preview");var d=this.$preview.css("height");if(this.$preview.css("display")!="inline"&&d!="0px"&&d!="none")this.$preview.css("line-height",d);this.$remove=this.$element.find('[data-dismiss="fileupload"]');this.listen()};b.prototype={listen:function(){this.$input.on("change.fileupload",a.proxy(this.change,this));if(this.$remove)this.$remove.on("click.fileupload",a.proxy(this.clear,this))},change:function(a,b){var c=a.target.files!==undefined?a.target.files[0]:{name:a.target.value.replace(/^.+\\/,"")};if(!c||b==="clear")return;this.$hidden.attr("name","");this.$input.attr("name",this.name);if(this.type==="image"&&this.$preview.length>0&&(typeof c.type!=="undefined"?c.type.match("image.*"):c.name.match("\\.(gif|png|jpe?g)$"))&&typeof FileReader!=="undefined"){var d=new FileReader;var e=this.$preview;var f=this.$element;d.onload=function(a){e.html('
");f.addClass("fileupload-exists").removeClass("fileupload-new")};d.readAsDataURL(c)}else{this.$preview.text(c.name);this.$element.addClass("fileupload-exists").removeClass("fileupload-new")}},clear:function(a){this.$hidden.val("");this.$hidden.attr("name",this.name);this.$input.attr("name","");this.$preview.html("");this.$element.addClass("fileupload-new").removeClass("fileupload-exists");this.$input.trigger("change",["clear"]);a.preventDefault();return false}};a.fn.fileupload=function(c){return this.each(function(){var d=a(this),e=d.data("fileupload");if(!e)d.data("fileupload",e=new b(this,c))})};a.fn.fileupload.Constructor=b;a(function(){a("body").on("click.fileupload.data-api",'[data-provides="fileupload"]',function(b){var c=a(this);if(c.data("fileupload"))return;c.fileupload(c.data());if(a(b.target).data("dismiss")=="fileupload")a(b.target).trigger("click.fileupload")})})}(window.jQuery)
\ No newline at end of file
diff --git a/cdn/js/bootstrap-inputmask.min.js b/cdn/js/bootstrap-inputmask.min.js
new file mode 100755
index 0000000..b8f9107
--- /dev/null
+++ b/cdn/js/bootstrap-inputmask.min.js
@@ -0,0 +1 @@
+!function(a){"use strict";var b=window.orientation!==undefined,c=navigator.userAgent.toLowerCase().indexOf("android")>-1;a.mask={definitions:{9:"[0-9]",a:"[A-Za-z]","?":"[A-Za-z0-9]","*":"."},dataName:"rawMaskFn"};var d=function(b,d){if(c)return;this.$element=a(b);this.mask=d.mask;this.options=a.extend({},a.fn.inputmask.defaults,d);this.init();this.listen();this.checkVal()};d.prototype={init:function(){var b=a.mask.definitions;var c=this.mask.length;this.tests=[];this.partialPosition=this.mask.length;this.firstNonMaskPos=null;a.each(this.mask.split(""),a.proxy(function(a,d){if(d=="?"){c--;this.partialPosition=a}else if(b[d]){this.tests.push(new RegExp(b[d]));if(this.firstNonMaskPos===null)this.firstNonMaskPos=this.tests.length-1}else{this.tests.push(null)}},this));this.buffer=a.map(this.mask.split(""),a.proxy(function(a,c){if(a!="?")return b[a]?this.options.placeholder:a},this));this.focusText=this.$element.val();this.$element.data(a.mask.dataName,a.proxy(function(){return a.map(this.buffer,function(a,b){return this.tests[b]&&a!=this.options.placeholder?a:null}).join("")},this))},listen:function(){if(this.$element.attr("readonly"))return;var b=(a.browser.msie?"paste":"input")+".mask";this.$element.on("unmask",a.proxy(this.unmask,this)).on("focus.mask",a.proxy(this.focusEvent,this)).on("blur.mask",a.proxy(this.blurEvent,this)).on("keydown.mask",a.proxy(this.keydownEvent,this)).on("keypress.mask",a.proxy(this.keypressEvent,this)).on(b,a.proxy(this.pasteEvent,this))},caret:function(a,b){if(this.$element.length===0)return;if(typeof a=="number"){b=typeof b=="number"?b:a;return this.$element.each(function(){if(this.setSelectionRange){this.setSelectionRange(a,b)}else if(this.createTextRange){var c=this.createTextRange();c.collapse(true);c.moveEnd("character",b);c.moveStart("character",a);c.select()}})}else{if(this.$element[0].setSelectionRange){a=this.$element[0].selectionStart;b=this.$element[0].selectionEnd}else if(document.selection&&document.selection.createRange){var c=document.selection.createRange();a=0-c.duplicate().moveStart("character",-1e5);b=a+c.text.length}return{begin:a,end:b}}},seekNext:function(a){var b=this.mask.length;while(++a<=b&&!this.tests[a]);return a},seekPrev:function(a){while(--a>=0&&!this.tests[a]);return a},shiftL:function(a,b){var c=this.mask.length;if(a<0)return;for(var d=a,e=this.seekNext(b);dc.length)break}else if(this.buffer[e]==c.charAt(f)&&e!=this.partialPosition){f++;d=e}}if(!a&&d+1=this.partialPosition){this.writeBuffer();if(!a)this.$element.val(this.$element.val().substring(0,d+1))}return this.partialPosition?e:this.firstNonMaskPos}};a.fn.inputmask=function(b){return this.each(function(){var c=a(this),e=c.data("inputmask");if(!e)c.data("inputmask",e=new d(this,b))})};a.fn.inputmask.defaults={placeholder:"_"};a.fn.inputmask.Constructor=d;a(function(){a("body").on("focus.inputmask.data-api","[data-mask]",function(b){var c=a(this);if(c.data("inputmask"))return;b.preventDefault();c.inputmask(c.data())})})}(window.jQuery)
\ No newline at end of file
diff --git a/cdn/js/bootstrap-rowlink.min.js b/cdn/js/bootstrap-rowlink.min.js
new file mode 100755
index 0000000..275957d
--- /dev/null
+++ b/cdn/js/bootstrap-rowlink.min.js
@@ -0,0 +1 @@
+!function(a){"use strict";var b=function(b,c){c=a.extend({},a.fn.rowlink.defaults,c);var d=b.nodeName=="tr"?a(b):a(b).find("tr:has(td)");d.each(function(){var b=a(this).find(c.target).first();if(!b.length)return;var d=b.attr("href");a(this).find("td").not(".nolink").click(function(){window.location=d});a(this).addClass("rowlink");b.replaceWith(b.html())})};a.fn.rowlink=function(c){return this.each(function(){var d=a(this),e=d.data("rowlink");if(!e)d.data("rowlink",e=new b(this,c))})};a.fn.rowlink.defaults={target:"a"};a.fn.rowlink.Constructor=b;a(function(){a('[data-provides="rowlink"]').each(function(){a(this).rowlink(a(this).data())})})}(window.jQuery)
\ No newline at end of file