diff --git a/dist/textAngular.min.js b/dist/textAngular.min.js index bb357bbe..9cd1a72d 100644 --- a/dist/textAngular.min.js +++ b/dist/textAngular.min.js @@ -2,7 +2,7 @@ @license textAngular Author : Austin Anderson License : 2013 MIT -Version 1.3.0-pre14 +Version 1.3.0-pre15 See README.md or https://github.com/fraywing/textAngular/wiki for requirements and use. */ @@ -10,9 +10,9 @@ angular.module("textAngularSetup",[]).value("taOptions",{toolbar:[["h1","h2","h3 @license textAngular Author : Austin Anderson License : 2013 MIT -Version 1.3.0-pre14 +Version 1.3.0-pre15 See README.md or https://github.com/fraywing/textAngular/wiki for requirements and use. */ -function(){"Use Strict";function a(a){try{return 0!==angular.element(a).length}catch(b){return!1}}function b(a,c){var d=[],e=a.children();return e.length&&angular.forEach(e,function(a){d=d.concat(b(angular.element(a),c))}),void 0!==a.attr(c)&&d.push(a),d}function c(b,c){if(!b||""===b||r.hasOwnProperty(b))throw"textAngular Error: A unique name is required for a Tool Definition";if(c.display&&(""===c.display||!a(c.display))||!c.display&&!c.buttontext&&!c.iconclass)throw'textAngular Error: Tool Definition for "'+b+'" does not have a valid display/iconclass/buttontext value';r[b]=c}var d={ie:function(){for(var a,b=3,c=document.createElement("div"),d=c.getElementsByTagName("i");c.innerHTML="",d[0];);return b>4?b:a}(),webkit:/AppleWebKit\/([\d.]+)/i.test(navigator.userAgent)},e=!1;d.webkit&&(document.addEventListener("mousedown",function(a){var b=a||window.event,c=b.target;if(e&&null!==c){for(var d=!1,f=c;null!==f&&"html"!==f.tagName.toLowerCase()&&!d;)d="true"===f.contentEditable,f=f.parentNode;d||(document.getElementById("textAngular-editableFix-010203040506070809").setSelectionRange(0,0),c.focus(),c.select&&c.select())}e=!1},!1),angular.element(document).ready(function(){angular.element(document.body).append(angular.element(''))}));var f=/^(address|article|aside|audio|blockquote|canvas|dd|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|noscript|ol|output|p|pre|section|table|tfoot|ul|video)$/gi,g=/^(ul|li|ol)$/gi,h=/^(address|article|aside|audio|blockquote|canvas|dd|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|noscript|ol|output|p|pre|section|table|tfoot|ul|video|li)$/gi;String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});var i,j,k,l,m;if(d.ie>8||void 0===d.ie){for(var n=document.styleSheets,o=0;o");return d[0].innerHTML=c,angular.forEach(a,function(a){var c=[];a.selector&&""!==a.selector?c=d.find(a.selector):a.customAttribute&&""!==a.customAttribute&&(c=b(d,a.customAttribute)),angular.forEach(c,function(b){b=angular.element(b),a.selector&&""!==a.selector&&a.customAttribute&&""!==a.customAttribute?void 0!==b.attr(a.customAttribute)&&a.renderLogic(b):a.renderLogic(b)})}),d[0].innerHTML}}]).factory("taFixChrome",function(){var a=function(a){for(var b=angular.element("
"+a+"
"),c=angular.element(b).find("span"),d=0;d0&&"BR"===e.next()[0].tagName&&e.next().remove(),e.replaceWith(e[0].innerHTML)))}var f=b[0].innerHTML.replace(/style="[^"]*?(line-height: 1.428571429;|color: inherit; line-height: 1.1;)[^"]*"/gi,"");return f!==b[0].innerHTML&&(b[0].innerHTML=f),b[0].innerHTML};return a}).factory("taSanitize",["$sanitize",function(a){return function(c,d,e){var f=angular.element("
"+c+"
");angular.forEach(b(f,"align"),function(a){a.css("text-align",a.attr("align")),a.removeAttr("align")});var g;c=f[0].innerHTML;try{g=a(c),e&&(g=c)}catch(h){g=d||""}return g}}]).factory("taToolExecuteAction",["$q","$log",function(a,b){return function(c){void 0!==c&&(this.$editor=function(){return c});var d=a.defer(),e=d.promise,f=this.$editor();e["finally"](function(){f.endAction.call(f)});var g;try{g=this.action(d,f.startAction())}catch(h){b.error(h)}(g||void 0===g)&&d.resolve()}}]),angular.module("textAngular.DOM",["textAngular.factories"]).factory("taExecCommand",["taSelection","taBrowserTag","$document",function(a,b,c){var d=function(b,c){var d,e,f=b.find("li");for(e=f.length-1;e>=0;e--)d=angular.element("<"+c+">"+f[e].innerHTML+""),b.after(d);b.remove(),a.setSelectionToElementEnd(d[0])},e=function(b){/()$/i.test(b.innerHTML.trim())?a.setSelectionBeforeElement(angular.element(b).find("br")[0]):a.setSelectionToElementEnd(b)},h=function(a,b){var c=angular.element("<"+b+">"+a[0].innerHTML+"");a.after(c),a.remove(),e(c.find("li")[0])},i=function(a,c,d){for(var f="",g=0;g"+a[g].innerHTML+"";var h=angular.element("<"+d+">"+f+"");c.after(h),c.remove(),e(h.find("li")[0])};return function(e,j){return e=b(e),function(k,l,m){var n,o,p,q,r,s,t,u=angular.element("<"+e+">");try{t=a.getSelectionElement()}catch(v){}var w=angular.element(t);if(void 0!==t){var x=t.tagName.toLowerCase();if("insertorderedlist"===k.toLowerCase()||"insertunorderedlist"===k.toLowerCase()){var y=b("insertorderedlist"===k.toLowerCase()?"ol":"ul");if(x===y)return d(w,e);if("li"===x&&w.parent()[0].tagName.toLowerCase()===y&&1===w.parent().children().length)return d(w.parent(),e);if("li"===x&&w.parent()[0].tagName.toLowerCase()!==y&&1===w.parent().children().length)return h(w.parent(),y);if(x.match(f)&&!w.hasClass("ta-bind")){if("ol"===x||"ul"===x)return h(w,y);var z=!1;return angular.forEach(w.children(),function(a){a.tagName.match(f)&&(z=!0)}),z?i(w.children(),w,y):i([angular.element("
"+t.innerHTML+"
")[0]],w,y)}if(x.match(f)){if(q=a.getOnlySelectedElements(),0===q.length)o=angular.element("<"+y+">
  • "+t.innerHTML+"
  • "),w.html(""),w.append(o);else{if(1===q.length&&("ol"===q[0].tagName.toLowerCase()||"ul"===q[0].tagName.toLowerCase()))return q[0].tagName.toLowerCase()===y?d(angular.element(q[0]),e):h(angular.element(q[0]),y);p="";var A=[];for(n=0;n"+B[0].innerHTML+"":B[0].childNodes[0].innerHTML,A.unshift(B)}o=angular.element("<"+y+">"+p+""),A.pop().replaceWith(o),angular.forEach(A,function(a){a.remove()})}return void a.setSelectionToElementEnd(o[0])}}else{if("formatblock"===k.toLowerCase()){for(s=m.toLowerCase().replace(/[<>]/gi,""),"default"===s.trim()&&(s=e,m="<"+e+">"),o="li"===x?w.parent():w;!o[0].tagName||!o[0].tagName.match(f)&&!o.parent().attr("contenteditable");)o=o.parent(),x=(o[0].tagName||"").toLowerCase();if(x===s){q=o.children();var C=!1;for(n=0;n=0;n--)q[n].parentNode&&q[n].parentNode.removeChild(q[n])}else for(n=0;n"),u[0].innerHTML=E[n].outerHTML,E[n]=u[0]),D.parent()[0].insertBefore(E[n],D[0]);D.remove()}return void a.setSelectionToElementEnd(o[0])}if("createlink"===k.toLowerCase()){var F=a.getSelection();if(F.collapsed)return void a.insertHtml(''+m+"",j)}else if("inserthtml"===k.toLowerCase())return void a.insertHtml(m,j)}}try{c[0].execCommand(k,l,m)}catch(v){}}}}]).service("taSelection",["$window","$document",function(a,b){var c=b[0],d=a.rangy,e={getSelection:function(){var a=d.getSelection().getRangeAt(0),b=a.commonAncestorContainer;return b=3===b.nodeType?b.parentNode:b,{start:{element:a.startContainer,offset:a.startOffset},end:{element:a.endContainer,offset:a.endOffset},container:b,collapsed:a.collapsed}},getOnlySelectedElements:function(){var a=d.getSelection().getRangeAt(0),b=a.commonAncestorContainer;return b=3===b.nodeType?b.parentNode:b,a.getNodes([1],function(a){return a.parentNode===b})},getSelectionElement:function(){return e.getSelection().container},setSelection:function(a,b,c){var e=d.createRange();e.setStart(a,b),e.setEnd(a,c),d.getSelection().setSingleRange(e)},setSelectionBeforeElement:function(a){var b=d.createRange();b.selectNode(a),b.collapse(!0),d.getSelection().setSingleRange(b)},setSelectionAfterElement:function(a){var b=d.createRange();b.selectNode(a),b.collapse(!1),d.getSelection().setSingleRange(b)},setSelectionToElementStart:function(a){var b=d.createRange();b.selectNodeContents(a),b.collapse(!0),d.getSelection().setSingleRange(b)},setSelectionToElementEnd:function(a){var b=d.createRange();b.selectNodeContents(a),b.collapse(!1),d.getSelection().setSingleRange(b)},insertHtml:function(a,b){var g,h,i,j,k,l,m,n,o,p=angular.element("
    "+a+"
    "),q=d.getSelection().getRangeAt(0),r=c.createDocumentFragment(),s=p[0].childNodes,t=!0;if(s.length>0){for(j=[],i=0;i)$/i.test(q.startContainer.innerHTML)&&q.selectNode(q.startContainer)}else t=!0,o=r=c.createTextNode(a);if(t)q.deleteContents();else if(q.collapsed&&q.startContainer!==b&&q.startContainer.parentNode!==b){if(3===q.startContainer.nodeType){for(g=q.startContainer.parentNode,j=g.childNodes,l=[],m=[],k=0;k)$/i.test(g.innerHTML.trim())&&(q.setStartBefore(g),q.setEndBefore(g),angular.element(g).remove()),/^(|)$/i.test(h.innerHTML.trim())&&angular.element(h).remove()}else q.deleteContents();q.insertNode(r),o&&e.setSelectionToElementEnd(o)}};return e}]),angular.module("textAngular.validators",[]).directive("taMaxText",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a){var b=angular.element("
    ");b.html(a);var c=b.text().length;return f>=c?(d.$setValidity("taMaxText",!0),a):void d.$setValidity("taMaxText",!1)}var f=parseInt(a.$eval(c.taMaxText));if(isNaN(f))throw"Max text must be an integer";c.$observe("taMaxText",function(a){if(f=parseInt(a),isNaN(f))throw"Max text must be an integer";d.$dirty&&d.$setViewValue(d.$viewValue)}),d.$parsers.unshift(e)}}}).directive("taMinText",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a){var b=angular.element("
    ");b.html(a);var c=b.text().length;return!c||c>=f?(d.$setValidity("taMinText",!0),a):void d.$setValidity("taMinText",!1)}var f=parseInt(a.$eval(c.taMinText));if(isNaN(f))throw"Min text must be an integer";c.$observe("taMinText",function(a){if(f=parseInt(a),isNaN(f))throw"Min text must be an integer";d.$dirty&&d.$setViewValue(d.$viewValue)}),d.$parsers.unshift(e)}}}),angular.module("textAngular.taBind",["textAngular.factories","textAngular.DOM"]).directive("taBind",["taSanitize","$timeout","$window","$document","taFixChrome","taBrowserTag","taSelection","taSelectableElements","taApplyCustomRenderers","taOptions",function(a,c,f,g,i,l,m,n,o,q){return{require:"ngModel",link:function(l,r,s,t){var u,v,w,x=void 0!==r.attr("contenteditable")&&r.attr("contenteditable"),y=x||"textarea"===r[0].tagName.toLowerCase()||"input"===r[0].tagName.toLowerCase(),z=!1,A=!1,B=s.taUnsafeSanitizer||q.disableSanitizer,C=/^(9|19|20|27|33|34|35|36|37|38|39|40|45|112|113|114|115|116|117|118|119|120|121|122|123|144|145)$/i,D=/^(8|13|32|46|59|61|107|109|186|187|188|189|190|191|192|219|220|221|222)$/i,E=/<(a|abbr|acronym|bdi|bdo|big|cite|code|del|dfn|img|ins|kbd|label|map|mark|q|ruby|rp|rt|s|samp|time|tt|var)[^>]*>/i,F=/^<[^>]+>(\s| )*<\/[^>]+>$/gi;void 0===s.taDefaultWrap&&(s.taDefaultWrap="p"),""===s.taDefaultWrap?(v="",w=void 0===d.ie?"

    ":d.ie>=11?"


    ":d.ie<=8?"

     

    ":"

     

    "):(v=void 0===d.ie||d.ie>=11?"<"+s.taDefaultWrap+">
    ":d.ie<=8?"<"+s.taDefaultWrap.toUpperCase()+">":"<"+s.taDefaultWrap+">",w=void 0===d.ie||d.ie>=11?"<"+s.taDefaultWrap+">
    ":d.ie<=8?"<"+s.taDefaultWrap.toUpperCase()+"> ":"<"+s.taDefaultWrap+"> ");var G=function(a){return a=a.trim(),0===a.length||a===w||F.test(a)||!(/>\s*(([^\s<]+)\s*)+]+\s*)+$/i.test(a)||E.test(a))};r.addClass("ta-bind");var H;l["$undoManager"+(s.id||"")]=t.$undoManager={_stack:[],_index:0,_max:1e3,push:function(a){return"undefined"==typeof a||null===a||"undefined"!=typeof this.current()&&null!==this.current()&&a===this.current()?a:(this._indexthis._max&&this._stack.shift(),this._index=this._stack.length-1,a)},undo:function(){return this.setToIndex(this._index-1)},redo:function(){return this.setToIndex(this._index+1)},setToIndex:function(a){return 0>a||a>this._stack.length-1?void 0:(this._index=a,this.current())},current:function(){return this._stack[this._index]}};var I=l["$undoTaBind"+(s.id||"")]=function(){if(!z&&x){var a=t.$undoManager.undo();"undefined"!=typeof a&&null!==a&&(r[0].innerHTML=a,L(a,!1),m.setSelectionToElementEnd(r[0].childNodes.length?r[0].childNodes[r[0].childNodes.length-1]:r[0]))}},J=l["$redoTaBind"+(s.id||"")]=function(){if(!z&&x){var a=t.$undoManager.redo();"undefined"!=typeof a&&null!==a&&(r[0].innerHTML=a,L(a,!1),m.setSelectionToElementEnd(r[0].childNodes.length?r[0].childNodes[r[0].childNodes.length-1]:r[0]))}},K=function(){if(x)return r[0].innerHTML;if(y)return r.val();throw"textAngular Error: attempting to update non-editable taBind"},L=function(a,b){("undefined"==typeof b||null===b)&&(b=!0&&x),("undefined"==typeof a||null===a)&&(a=K()),G(a)?(""!==t.$viewValue&&t.$setViewValue(""),b&&""!==t.$undoManager.current()&&t.$undoManager.push("")):t.$viewValue!==a&&(t.$setViewValue(a),b&&t.$undoManager.push(a))};if(l["updateTaBind"+(s.id||"")]=function(){z||L()},y)if(x){var M=function(a,b,c){r[0].childNodes&&r[0].childNodes.length>0?c(a,b):(that={s:a,_:b,cb:c},that.callself=function(){M(that.s,that._,that.cb)},setTimeout(that.callself,20))},N=function(d,e){if(text=r[0].innerHTML,r[0].innerHTML=d,f.rangy.restoreSelection(e),text.trim().length){if(text.match(/class=["']*Mso(Normal|List)/i)){var g=text.match(/([\s\S]*?)/i);g=g?g[1]:text,g=g.replace(/[\s\S]*?<\/o:p>/gi,"").replace(/class=(["']|)MsoNormal(["']|)/gi,"");var h=angular.element("
    "+g+"
    "),i=angular.element("
    "),j={element:null,lastIndent:[],lastLi:null,isUl:!1};j.lastIndent.peek=function(){var a=this.length;return a>0?this[a-1]:void 0};for(var k=function(a){j.isUl=a,j.element=angular.element(a?"
      ":"
        "),j.lastIndent=[],j.lastIndent.peek=function(){var a=this.length;return a>0?this[a-1]:void 0},j.lastLevelMatch=null},l=0;l<=h[0].childNodes.length;l++)if(h[0].childNodes[l]&&"#text"!==h[0].childNodes[l].nodeName&&"p"===h[0].childNodes[l].tagName.toLowerCase()){var n=angular.element(h[0].childNodes[l]),o=(n.attr("class")||"").match(/MsoList(Bullet|Number|Paragraph)(CxSp(First|Middle|Last)|)/i);if(o){if(n[0].childNodes.length<2||n[0].childNodes[1].childNodes.length<1)continue;var p="bullet"===o[1].toLowerCase()||"number"!==o[1].toLowerCase()&&!(/^[^0-9a-z<]*[0-9a-z]+[^0-9a-z<>]]":"
          "),j.lastLi.append(j.element);else if(null!=j.lastIndent.peek()&&j.lastIndent.peek()>s){for(;null!=j.lastIndent.peek()&&j.lastIndent.peek()>s;)if("li"!==j.element.parent()[0].tagName.toLowerCase()){if(!/[uo]l/i.test(j.element.parent()[0].tagName.toLowerCase()))break;j.element=j.element.parent(),j.lastIndent.pop()}else j.element=j.element.parent();j.isUl="ul"===j.element[0].tagName.toLowerCase(),p!==j.isUl&&(k(p),i.append(j.element))}j.lastLevelMatch=u,s!==j.lastIndent.peek()&&j.lastIndent.push(s),j.lastLi=angular.element("
        1. "),j.element.append(j.lastLi),j.lastLi.html(n.html().replace(/[\s\S]*?/gi,"")),n.remove()}else k(!1),i.append(n)}var v=function(a){a=angular.element(a);for(var b=a[0].childNodes.length-1;b>=0;b--)a.after(a[0].childNodes[b]);a.remove()};angular.forEach(i.find("span"),function(a){a.removeAttribute("lang"),a.attributes.length<=0&&v(a)}),angular.forEach(i.find("font"),v),text=i.html()}else{if(text=text.replace(/<(|\/)meta[^>]*?>/gi,""),text.match(/<[^>]*?(ta-bind)[^>]*?>/)){if(text.match(/<[^>]*?(text-angular)[^>]*?>/)){var w=angular.element("
          "+text+"
          ");w.find("textarea").remove();for(var x=b(w,"ta-bind"),y=0;y',"")}}else text.match(/^]*?>/gi,""));text=text.replace(/
          ]*?>/gi,"")}text=a(text,"",B),m.insertHtml(text,r[0]),c(function(){t.$setViewValue(K())},0)}};if(r.on("paste",function(a,b){b&&angular.extend(a,b);var c=f.rangy.saveSelection();if(z)return a.stopPropagation(),a.preventDefault(),!1;var d=r[0].innerHTML,e=(a.originalEvent||a).clipboardData;if(e&&e.getData){for(var g="",h=0;h$/i.test(c.innerHTML.trim())&&"blockquote"===c.parentNode.tagName.toLowerCase()&&!c.nextSibling){$selection=angular.element(c);var e=$selection.parent();e.after(d),$selection.remove(),0===e.children().length&&e.remove(),m.setSelectionToElementStart(d[0]),a.preventDefault()}else/^<[^>]+><\/[^>]+>$/i.test(c.innerHTML.trim())&&"blockquote"===c.tagName.toLowerCase()&&($selection=angular.element(c),$selection.after(d),$selection.remove(),m.setSelectionToElementStart(d[0]),a.preventDefault())}}),r.on("keyup",function(a,b){if(b&&angular.extend(a,b),H&&c.cancel(H),!z&&!C.test(a.keyCode)){if(""!==v&&13===a.keyCode&&!a.shiftKey){for(var d=m.getSelectionElement();!d.tagName.match(h)&&d!==r[0];)d=d.parentNode;if(d.tagName.toLowerCase()!==s.taDefaultWrap&&"li"!==d.tagName.toLowerCase()&&(""===d.innerHTML.trim()||"
          "===d.innerHTML.trim())){var e=angular.element(v);angular.element(d).replaceWith(e),m.setSelectionToElementStart(e[0])}}var f=K();""!==v&&""===f.trim()&&(r[0].innerHTML=v,m.setSelectionToElementStart(r.children()[0]));var g=u!==a.keyCode&&D.test(a.keyCode);L(f,g),g||(H=c(function(){t.$undoManager.push(f)},250)),u=a.keyCode}}),r.on("blur",function(){A=!1,z||L(),t.$render()}),s.placeholder&&(d.ie>8||void 0===d.ie)){var O;if(!s.id)throw"textAngular Error: An unique ID is required for placeholders to work";O=j("#"+s.id+".placeholder-text:before",'content: "'+s.placeholder+'"'),l.$on("$destroy",function(){k(O)})}r.on("focus",function(){A=!0,t.$render()}),r.on("mousedown",function(a,b){b&&angular.extend(a,b),a.stopPropagation()})}else r.on("change blur",function(){z||t.$setViewValue(K())});var P=function(b){return t.$oldViewValue=a(i(b),t.$oldViewValue,B)},Q=function(a){return s.required&&t.$setValidity("required",!G(a)),a};t.$parsers.push(P),t.$parsers.push(Q),t.$formatters.push(P),t.$formatters.push(function(a){if(G(a))return a;var b=angular.element("
          "+a+"
          ");return 0===b.children().length&&(a="<"+s.taDefaultWrap+">"+a+""),a}),t.$formatters.push(Q),t.$formatters.push(function(a){return t.$undoManager.push(a||"")});var R=function(a){return l.$emit("ta-element-select",this),a.preventDefault(),!1},S=function(a,b){if(b&&angular.extend(a,b),!p&&!z){p=!0;var d;d=a.originalEvent?a.originalEvent.dataTransfer:a.dataTransfer,l.$emit("ta-drop-event",this,a,d),c(function(){p=!1,L(),T()},100)}},T=l["reApplyOnSelectorHandlers"+(s.id||"")]=function(){z||angular.forEach(n,function(a){r.find(a).off("click",R).on("click",R)})},U=function(a){r[0].innerHTML=a};t.$render=function(){var a=t.$viewValue||"";g[0].activeElement!==r[0]?x?(s.placeholder?""===a?(A?r.removeClass("placeholder-text"):r.addClass("placeholder-text"),U(v)):(r.removeClass("placeholder-text"),U(a)):U(""===a?v:a),z?r.off("drop",S):(T(),r.on("drop",S))):"textarea"!==r[0].tagName.toLowerCase()&&"input"!==r[0].tagName.toLowerCase()?U(o(a)):r.val(a):x&&r.removeClass("placeholder-text")},s.taReadonly&&(z=l.$eval(s.taReadonly),z?(r.addClass("ta-readonly"),("textarea"===r[0].tagName.toLowerCase()||"input"===r[0].tagName.toLowerCase())&&r.attr("disabled","disabled"),void 0!==r.attr("contenteditable")&&r.attr("contenteditable")&&r.removeAttr("contenteditable")):(r.removeClass("ta-readonly"),"textarea"===r[0].tagName.toLowerCase()||"input"===r[0].tagName.toLowerCase()?r.removeAttr("disabled"):x&&r.attr("contenteditable","true")),l.$watch(s.taReadonly,function(a,b){b!==a&&(a?(r.addClass("ta-readonly"),("textarea"===r[0].tagName.toLowerCase()||"input"===r[0].tagName.toLowerCase())&&r.attr("disabled","disabled"),void 0!==r.attr("contenteditable")&&r.attr("contenteditable")&&r.removeAttr("contenteditable"),angular.forEach(n,function(a){r.find(a).on("click",R)}),r.off("drop",S)):(r.removeClass("ta-readonly"),"textarea"===r[0].tagName.toLowerCase()||"input"===r[0].tagName.toLowerCase()?r.removeAttr("disabled"):x&&r.attr("contenteditable","true"),angular.forEach(n,function(a){r.find(a).off("click",R)}),r.on("drop",S)),z=a)})),x&&!z&&(angular.forEach(n,function(a){r.find(a).on("click",R)}),r.on("drop",S),r.on("blur",function(){d.webkit&&(e=!0)}))}}}]);var p=!1,q=angular.module("textAngular",["ngSanitize","textAngularSetup","textAngular.factories","textAngular.DOM","textAngular.validators","textAngular.taBind"]),r={};q.constant("taRegisterTool",c),q.value("taTools",r),q.config([function(){angular.forEach(r,function(a,b){delete r[b]})}]),q.run([function(){if(!window.rangy)throw"rangy-core.js and rangy-selectionsaverestore.js are required for textAngular to work correctly, rangy-core is not yet loaded.";if(window.rangy.init(),!window.rangy.saveSelection)throw"rangy-selectionsaverestore.js is required for textAngular to work correctly."}]),q.directive("textAngular",["$compile","$timeout","taOptions","taSelection","taExecCommand","textAngularManager","$window","$document","$animate","$log","$q",function(a,b,c,d,e,f,g,h,i,j,k){return{require:"?ngModel",scope:{},restrict:"EA",link:function(l,m,n,o){var p,q,r,s,t,u,v,w,x,y=n.serial?n.serial:Math.floor(1e16*Math.random());l._name=n.name?n.name:"textAngularEditor"+y;var z=function(a,c,d){b(function(){var b=function(){a.off(c,b),d()};a.on(c,b)},100)};x=e(n.taDefaultWrap),angular.extend(l,angular.copy(c),{wrapSelection:function(a,b,c){"undo"===a.toLowerCase()?l["$undoTaBindtaTextElement"+y]():"redo"===a.toLowerCase()?l["$redoTaBindtaTextElement"+y]():(x(a,!1,b),c&&l["reApplyOnSelectorHandlerstaTextElement"+y](),l.displayElements.text[0].focus())},showHtml:l.$eval(n.taShowHtml)||!1}),n.taFocussedClass&&(l.classes.focussed=n.taFocussedClass),n.taTextEditorClass&&(l.classes.textEditor=n.taTextEditorClass),n.taHtmlEditorClass&&(l.classes.htmlEditor=n.taHtmlEditorClass),n.taTextEditorSetup&&(l.setup.textEditorSetup=l.$parent.$eval(n.taTextEditorSetup)),n.taHtmlEditorSetup&&(l.setup.htmlEditorSetup=l.$parent.$eval(n.taHtmlEditorSetup)),l.fileDropHandler=n.taFileDrop?l.$parent.$eval(n.taFileDrop):l.defaultFileDropHandler,v=m[0].innerHTML,m[0].innerHTML="",l.displayElements={forminput:angular.element(""),html:angular.element(""),text:angular.element("
          "),scrollWindow:angular.element("
          "),popover:angular.element('
          '),popoverArrow:angular.element('
          '),popoverContainer:angular.element('
          '),resize:{overlay:angular.element('
          '),background:angular.element('
          '),anchors:[angular.element('
          '),angular.element('
          '),angular.element('
          '),angular.element('
          ')],info:angular.element('
          ')}},l.displayElements.popover.append(l.displayElements.popoverArrow),l.displayElements.popover.append(l.displayElements.popoverContainer),l.displayElements.scrollWindow.append(l.displayElements.popover),l.displayElements.popover.on("mousedown",function(a,b){return b&&angular.extend(a,b),a.preventDefault(),!1}),l.showPopover=function(a){l.displayElements.popover.css("display","block"),l.reflowPopover(a),i.addClass(l.displayElements.popover,"in"),z(m,"click keyup",function(){l.hidePopover()})},l.reflowPopover=function(a){l.displayElements.text[0].offsetHeight-51>a[0].offsetTop?(l.displayElements.popover.css("top",a[0].offsetTop+a[0].offsetHeight+"px"),l.displayElements.popover.removeClass("top").addClass("bottom")):(l.displayElements.popover.css("top",a[0].offsetTop-54+"px"),l.displayElements.popover.removeClass("bottom").addClass("top"));var b=l.displayElements.text[0].offsetWidth-l.displayElements.popover[0].offsetWidth,c=a[0].offsetLeft+a[0].offsetWidth/2-l.displayElements.popover[0].offsetWidth/2;l.displayElements.popover.css("left",Math.max(0,Math.min(b,c))+"px"),l.displayElements.popoverArrow.css("margin-left",Math.min(c,Math.max(0,c-b))-11+"px")},l.hidePopover=function(){var a=function(){l.displayElements.popover.css("display",""),l.displayElements.popoverContainer.attr("style",""),l.displayElements.popoverContainer.attr("class","popover-content")};k.when(i.removeClass(l.displayElements.popover,"in",a)).then(a)},l.displayElements.resize.overlay.append(l.displayElements.resize.background),angular.forEach(l.displayElements.resize.anchors,function(a){l.displayElements.resize.overlay.append(a)}),l.displayElements.resize.overlay.append(l.displayElements.resize.info),l.displayElements.scrollWindow.append(l.displayElements.resize.overlay),l.reflowResizeOverlay=function(a){a=angular.element(a)[0],l.displayElements.resize.overlay.css({display:"block",left:a.offsetLeft-5+"px",top:a.offsetTop-5+"px",width:a.offsetWidth+10+"px",height:a.offsetHeight+10+"px"}),l.displayElements.resize.info.text(a.offsetWidth+" x "+a.offsetHeight)},l.showResizeOverlay=function(a){var b=function(b){var c={width:parseInt(a.attr("width")),height:parseInt(a.attr("height")),x:b.clientX,y:b.clientY};void 0===c.width&&(c.width=a[0].offsetWidth),void 0===c.height&&(c.height=a[0].offsetHeight),l.hidePopover();var d=c.height/c.width,e=function(b){var e={x:Math.max(0,c.width+(b.clientX-c.x)),y:Math.max(0,c.height+(b.clientY-c.y))},f=function(a,b){a=angular.element(a),"img"===a[0].tagName.toLowerCase()&&(b.height&&(a.attr("height",b.height),delete b.height),b.width&&(a.attr("width",b.width),delete b.width)),a.css(b)};if(b.shiftKey){var g=e.y/e.x;f(a,{width:d>g?e.x:e.y/d,height:d>g?e.x*d:e.y})}else f(a,{width:e.x,height:e.y});l.reflowResizeOverlay(a)};h.find("body").on("mousemove",e),z(l.displayElements.resize.overlay,"mouseup",function(){h.find("body").off("mousemove",e),l.showPopover(a)}),b.stopPropagation(),b.preventDefault()};l.displayElements.resize.anchors[3].on("mousedown",b),l.reflowResizeOverlay(a),z(m,"click",function(){l.hideResizeOverlay()})},l.hideResizeOverlay=function(){l.displayElements.resize.overlay.css("display","")},l.setup.htmlEditorSetup(l.displayElements.html),l.setup.textEditorSetup(l.displayElements.text),l.displayElements.html.attr({id:"taHtmlElement"+y,"ng-show":"showHtml","ta-bind":"ta-bind","ng-model":"html"}),l.displayElements.text.attr({id:"taTextElement"+y,contentEditable:"true","ta-bind":"ta-bind","ng-model":"html"}),l.displayElements.scrollWindow.attr({"ng-hide":"showHtml"}),n.taDefaultWrap&&l.displayElements.text.attr("ta-default-wrap",n.taDefaultWrap),n.taUnsafeSanitizer&&(l.displayElements.text.attr("ta-unsafe-sanitizer",n.taUnsafeSanitizer),l.displayElements.html.attr("ta-unsafe-sanitizer",n.taUnsafeSanitizer)),l.displayElements.scrollWindow.append(l.displayElements.text),m.append(l.displayElements.scrollWindow),m.append(l.displayElements.html),l.displayElements.forminput.attr("name",l._name),m.append(l.displayElements.forminput),n.tabindex&&(m.removeAttr("tabindex"),l.displayElements.text.attr("tabindex",n.tabindex),l.displayElements.html.attr("tabindex",n.tabindex)),n.placeholder&&(l.displayElements.text.attr("placeholder",n.placeholder),l.displayElements.html.attr("placeholder",n.placeholder)),n.taDisabled&&(l.displayElements.text.attr("ta-readonly","disabled"),l.displayElements.html.attr("ta-readonly","disabled"),l.disabled=l.$parent.$eval(n.taDisabled),l.$parent.$watch(n.taDisabled,function(a){l.disabled=a,l.disabled?m.addClass(l.classes.disabled):m.removeClass(l.classes.disabled) +function(){"Use Strict";function a(a){try{return 0!==angular.element(a).length}catch(b){return!1}}function b(a,c){var d=[],e=a.children();return e.length&&angular.forEach(e,function(a){d=d.concat(b(angular.element(a),c))}),void 0!==a.attr(c)&&d.push(a),d}function c(b,c){if(!b||""===b||r.hasOwnProperty(b))throw"textAngular Error: A unique name is required for a Tool Definition";if(c.display&&(""===c.display||!a(c.display))||!c.display&&!c.buttontext&&!c.iconclass)throw'textAngular Error: Tool Definition for "'+b+'" does not have a valid display/iconclass/buttontext value';r[b]=c}var d={ie:function(){for(var a,b=3,c=document.createElement("div"),d=c.getElementsByTagName("i");c.innerHTML="",d[0];);return b>4?b:a}(),webkit:/AppleWebKit\/([\d.]+)/i.test(navigator.userAgent)},e=!1;d.webkit&&(document.addEventListener("mousedown",function(a){var b=a||window.event,c=b.target;if(e&&null!==c){for(var d=!1,f=c;null!==f&&"html"!==f.tagName.toLowerCase()&&!d;)d="true"===f.contentEditable,f=f.parentNode;d||(document.getElementById("textAngular-editableFix-010203040506070809").setSelectionRange(0,0),c.focus(),c.select&&c.select())}e=!1},!1),angular.element(document).ready(function(){angular.element(document.body).append(angular.element(''))}));var f=/^(address|article|aside|audio|blockquote|canvas|dd|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|noscript|ol|output|p|pre|section|table|tfoot|ul|video)$/gi,g=/^(ul|li|ol)$/gi,h=/^(address|article|aside|audio|blockquote|canvas|dd|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|noscript|ol|output|p|pre|section|table|tfoot|ul|video|li)$/gi;String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});var i,j,k,l,m;if(d.ie>8||void 0===d.ie){for(var n=document.styleSheets,o=0;o
    ");return d[0].innerHTML=c,angular.forEach(a,function(a){var c=[];a.selector&&""!==a.selector?c=d.find(a.selector):a.customAttribute&&""!==a.customAttribute&&(c=b(d,a.customAttribute)),angular.forEach(c,function(b){b=angular.element(b),a.selector&&""!==a.selector&&a.customAttribute&&""!==a.customAttribute?void 0!==b.attr(a.customAttribute)&&a.renderLogic(b):a.renderLogic(b)})}),d[0].innerHTML}}]).factory("taFixChrome",function(){var a=function(a){for(var b=angular.element("
    "+a+"
    "),c=angular.element(b).find("span"),d=0;d0&&"BR"===e.next()[0].tagName&&e.next().remove(),e.replaceWith(e[0].innerHTML)))}var f=b[0].innerHTML.replace(/style="[^"]*?(line-height: 1.428571429;|color: inherit; line-height: 1.1;)[^"]*"/gi,"");return f!==b[0].innerHTML&&(b[0].innerHTML=f),b[0].innerHTML};return a}).factory("taSanitize",["$sanitize",function(a){return function(c,d,e){var f=angular.element("
    "+c+"
    ");angular.forEach(b(f,"align"),function(a){a.css("text-align",a.attr("align")),a.removeAttr("align")});var g;c=f[0].innerHTML;try{g=a(c),e&&(g=c)}catch(h){g=d||""}return g}}]).factory("taToolExecuteAction",["$q","$log",function(a,b){return function(c){void 0!==c&&(this.$editor=function(){return c});var d=a.defer(),e=d.promise,f=this.$editor();e["finally"](function(){f.endAction.call(f)});var g;try{g=this.action(d,f.startAction())}catch(h){b.error(h)}(g||void 0===g)&&d.resolve()}}]),angular.module("textAngular.DOM",["textAngular.factories"]).factory("taExecCommand",["taSelection","taBrowserTag","$document",function(a,b,c){var d=function(b,c){var d,e,f=b.find("li");for(e=f.length-1;e>=0;e--)d=angular.element("<"+c+">"+f[e].innerHTML+""),b.after(d);b.remove(),a.setSelectionToElementEnd(d[0])},e=function(b){/()$/i.test(b.innerHTML.trim())?a.setSelectionBeforeElement(angular.element(b).find("br")[0]):a.setSelectionToElementEnd(b)},h=function(a,b){var c=angular.element("<"+b+">"+a[0].innerHTML+"");a.after(c),a.remove(),e(c.find("li")[0])},i=function(a,c,d){for(var f="",g=0;g"+a[g].innerHTML+"";var h=angular.element("<"+d+">"+f+"");c.after(h),c.remove(),e(h.find("li")[0])};return function(e,j){return e=b(e),function(k,l,m){var n,o,p,q,r,s,t,u=angular.element("<"+e+">");try{t=a.getSelectionElement()}catch(v){}var w=angular.element(t);if(void 0!==t){var x=t.tagName.toLowerCase();if("insertorderedlist"===k.toLowerCase()||"insertunorderedlist"===k.toLowerCase()){var y=b("insertorderedlist"===k.toLowerCase()?"ol":"ul");if(x===y)return d(w,e);if("li"===x&&w.parent()[0].tagName.toLowerCase()===y&&1===w.parent().children().length)return d(w.parent(),e);if("li"===x&&w.parent()[0].tagName.toLowerCase()!==y&&1===w.parent().children().length)return h(w.parent(),y);if(x.match(f)&&!w.hasClass("ta-bind")){if("ol"===x||"ul"===x)return h(w,y);var z=!1;return angular.forEach(w.children(),function(a){a.tagName.match(f)&&(z=!0)}),z?i(w.children(),w,y):i([angular.element("
    "+t.innerHTML+"
    ")[0]],w,y)}if(x.match(f)){if(q=a.getOnlySelectedElements(),0===q.length)o=angular.element("<"+y+">
  • "+t.innerHTML+"
  • "),w.html(""),w.append(o);else{if(1===q.length&&("ol"===q[0].tagName.toLowerCase()||"ul"===q[0].tagName.toLowerCase()))return q[0].tagName.toLowerCase()===y?d(angular.element(q[0]),e):h(angular.element(q[0]),y);p="";var A=[];for(n=0;n"+B[0].innerHTML+"":B[0].childNodes[0].innerHTML,A.unshift(B)}o=angular.element("<"+y+">"+p+""),A.pop().replaceWith(o),angular.forEach(A,function(a){a.remove()})}return void a.setSelectionToElementEnd(o[0])}}else{if("formatblock"===k.toLowerCase()){for(s=m.toLowerCase().replace(/[<>]/gi,""),"default"===s.trim()&&(s=e,m="<"+e+">"),o="li"===x?w.parent():w;!o[0].tagName||!o[0].tagName.match(f)&&!o.parent().attr("contenteditable");)o=o.parent(),x=(o[0].tagName||"").toLowerCase();if(x===s){q=o.children();var C=!1;for(n=0;n=0;n--)q[n].parentNode&&q[n].parentNode.removeChild(q[n])}else for(n=0;n"),u[0].innerHTML=E[n].outerHTML,E[n]=u[0]),D.parent()[0].insertBefore(E[n],D[0]);D.remove()}return void a.setSelectionToElementEnd(o[0])}if("createlink"===k.toLowerCase()){var F=a.getSelection();if(F.collapsed)return void a.insertHtml(''+m+"",j)}else if("inserthtml"===k.toLowerCase())return void a.insertHtml(m,j)}}try{c[0].execCommand(k,l,m)}catch(v){}}}}]).service("taSelection",["$window","$document",function(a,b){var c=b[0],d=a.rangy,e={getSelection:function(){var a=d.getSelection().getRangeAt(0),b=a.commonAncestorContainer;return b=3===b.nodeType?b.parentNode:b,{start:{element:a.startContainer,offset:a.startOffset},end:{element:a.endContainer,offset:a.endOffset},container:b,collapsed:a.collapsed}},getOnlySelectedElements:function(){var a=d.getSelection().getRangeAt(0),b=a.commonAncestorContainer;return b=3===b.nodeType?b.parentNode:b,a.getNodes([1],function(a){return a.parentNode===b})},getSelectionElement:function(){return e.getSelection().container},setSelection:function(a,b,c){var e=d.createRange();e.setStart(a,b),e.setEnd(a,c),d.getSelection().setSingleRange(e)},setSelectionBeforeElement:function(a){var b=d.createRange();b.selectNode(a),b.collapse(!0),d.getSelection().setSingleRange(b)},setSelectionAfterElement:function(a){var b=d.createRange();b.selectNode(a),b.collapse(!1),d.getSelection().setSingleRange(b)},setSelectionToElementStart:function(a){var b=d.createRange();b.selectNodeContents(a),b.collapse(!0),d.getSelection().setSingleRange(b)},setSelectionToElementEnd:function(a){var b=d.createRange();b.selectNodeContents(a),b.collapse(!1),d.getSelection().setSingleRange(b)},insertHtml:function(a,b){var g,h,i,j,k,l,m,n,o,p=angular.element("
    "+a+"
    "),q=d.getSelection().getRangeAt(0),r=c.createDocumentFragment(),s=p[0].childNodes,t=!0;if(s.length>0){for(j=[],i=0;i)$/i.test(q.startContainer.innerHTML)&&q.selectNode(q.startContainer)}else t=!0,o=r=c.createTextNode(a);if(t)q.deleteContents();else if(q.collapsed&&q.startContainer!==b&&q.startContainer.parentNode!==b){if(3===q.startContainer.nodeType){for(g=q.startContainer.parentNode,j=g.childNodes,l=[],m=[],k=0;k)$/i.test(g.innerHTML.trim())&&(q.setStartBefore(g),q.setEndBefore(g),angular.element(g).remove()),/^(|)$/i.test(h.innerHTML.trim())&&angular.element(h).remove()}else q.deleteContents();q.insertNode(r),o&&e.setSelectionToElementEnd(o)}};return e}]),angular.module("textAngular.validators",[]).directive("taMaxText",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a){var b=angular.element("
    ");b.html(a);var c=b.text().length;return f>=c?(d.$setValidity("taMaxText",!0),a):void d.$setValidity("taMaxText",!1)}var f=parseInt(a.$eval(c.taMaxText));if(isNaN(f))throw"Max text must be an integer";c.$observe("taMaxText",function(a){if(f=parseInt(a),isNaN(f))throw"Max text must be an integer";d.$dirty&&d.$setViewValue(d.$viewValue)}),d.$parsers.unshift(e)}}}).directive("taMinText",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a){var b=angular.element("
    ");b.html(a);var c=b.text().length;return!c||c>=f?(d.$setValidity("taMinText",!0),a):void d.$setValidity("taMinText",!1)}var f=parseInt(a.$eval(c.taMinText));if(isNaN(f))throw"Min text must be an integer";c.$observe("taMinText",function(a){if(f=parseInt(a),isNaN(f))throw"Min text must be an integer";d.$dirty&&d.$setViewValue(d.$viewValue)}),d.$parsers.unshift(e)}}}),angular.module("textAngular.taBind",["textAngular.factories","textAngular.DOM"]).directive("taBind",["taSanitize","$timeout","$window","$document","taFixChrome","taBrowserTag","taSelection","taSelectableElements","taApplyCustomRenderers","taOptions",function(a,c,f,g,i,l,m,n,o,q){return{require:"ngModel",link:function(l,r,s,t){var u,v,w,x=void 0!==r.attr("contenteditable")&&r.attr("contenteditable"),y=x||"textarea"===r[0].tagName.toLowerCase()||"input"===r[0].tagName.toLowerCase(),z=!1,A=!1,B=s.taUnsafeSanitizer||q.disableSanitizer,C=/^(9|19|20|27|33|34|35|36|37|38|39|40|45|112|113|114|115|116|117|118|119|120|121|122|123|144|145)$/i,D=/^(8|13|32|46|59|61|107|109|186|187|188|189|190|191|192|219|220|221|222)$/i,E=/<(a|abbr|acronym|bdi|bdo|big|cite|code|del|dfn|img|ins|kbd|label|map|mark|q|ruby|rp|rt|s|samp|time|tt|var)[^>]*>/i;void 0===s.taDefaultWrap&&(s.taDefaultWrap="p"),""===s.taDefaultWrap?(v="",w=void 0===d.ie?"

    ":d.ie>=11?"


    ":d.ie<=8?"

     

    ":"

     

    "):(v=void 0===d.ie||d.ie>=11?"<"+s.taDefaultWrap+">
    ":d.ie<=8?"<"+s.taDefaultWrap.toUpperCase()+">":"<"+s.taDefaultWrap+">",w=void 0===d.ie||d.ie>=11?"<"+s.taDefaultWrap+">
    ":d.ie<=8?"<"+s.taDefaultWrap.toUpperCase()+"> ":"<"+s.taDefaultWrap+"> ");var F=function(a){var b=a.indexOf(">");return-1===b?0===a.trim().length:(a=a.trim().substring(b,b+100),0===a.length||a===w||/^>(\s| )*<\/[^>]+>$/gi.test(a)?!0:/>\s*[^\s<]/i.test(a)||E.test(a)?!1:!0)};r.addClass("ta-bind");var G;l["$undoManager"+(s.id||"")]=t.$undoManager={_stack:[],_index:0,_max:1e3,push:function(a){return"undefined"==typeof a||null===a||"undefined"!=typeof this.current()&&null!==this.current()&&a===this.current()?a:(this._indexthis._max&&this._stack.shift(),this._index=this._stack.length-1,a)},undo:function(){return this.setToIndex(this._index-1)},redo:function(){return this.setToIndex(this._index+1)},setToIndex:function(a){return 0>a||a>this._stack.length-1?void 0:(this._index=a,this.current())},current:function(){return this._stack[this._index]}};var H=l["$undoTaBind"+(s.id||"")]=function(){if(!z&&x){var a=t.$undoManager.undo();"undefined"!=typeof a&&null!==a&&(r[0].innerHTML=a,K(a,!1),m.setSelectionToElementEnd(r[0].childNodes.length?r[0].childNodes[r[0].childNodes.length-1]:r[0]))}},I=l["$redoTaBind"+(s.id||"")]=function(){if(!z&&x){var a=t.$undoManager.redo();"undefined"!=typeof a&&null!==a&&(r[0].innerHTML=a,K(a,!1),m.setSelectionToElementEnd(r[0].childNodes.length?r[0].childNodes[r[0].childNodes.length-1]:r[0]))}},J=function(){if(x)return r[0].innerHTML;if(y)return r.val();throw"textAngular Error: attempting to update non-editable taBind"},K=function(a,b){("undefined"==typeof b||null===b)&&(b=!0&&x),("undefined"==typeof a||null===a)&&(a=J()),F(a)?(""!==t.$viewValue&&t.$setViewValue(""),b&&""!==t.$undoManager.current()&&t.$undoManager.push("")):t.$viewValue!==a&&(t.$setViewValue(a),b&&t.$undoManager.push(a))};if(l["updateTaBind"+(s.id||"")]=function(){z||K()},y)if(x){var L=function(a,b,c){r[0].childNodes&&r[0].childNodes.length>0?c(a,b):(that={s:a,_:b,cb:c},that.callself=function(){L(that.s,that._,that.cb)},setTimeout(that.callself,20))},M=function(d,e){if(text=r[0].innerHTML,r[0].innerHTML=d,f.rangy.restoreSelection(e),text.trim().length){if(text.match(/class=["']*Mso(Normal|List)/i)){var g=text.match(/([\s\S]*?)/i);g=g?g[1]:text,g=g.replace(/[\s\S]*?<\/o:p>/gi,"").replace(/class=(["']|)MsoNormal(["']|)/gi,"");var h=angular.element("
    "+g+"
    "),i=angular.element("
    "),j={element:null,lastIndent:[],lastLi:null,isUl:!1};j.lastIndent.peek=function(){var a=this.length;return a>0?this[a-1]:void 0};for(var k=function(a){j.isUl=a,j.element=angular.element(a?"
      ":"
        "),j.lastIndent=[],j.lastIndent.peek=function(){var a=this.length;return a>0?this[a-1]:void 0},j.lastLevelMatch=null},l=0;l<=h[0].childNodes.length;l++)if(h[0].childNodes[l]&&"#text"!==h[0].childNodes[l].nodeName&&"p"===h[0].childNodes[l].tagName.toLowerCase()){var n=angular.element(h[0].childNodes[l]),o=(n.attr("class")||"").match(/MsoList(Bullet|Number|Paragraph)(CxSp(First|Middle|Last)|)/i);if(o){if(n[0].childNodes.length<2||n[0].childNodes[1].childNodes.length<1)continue;var p="bullet"===o[1].toLowerCase()||"number"!==o[1].toLowerCase()&&!(/^[^0-9a-z<]*[0-9a-z]+[^0-9a-z<>]]":"
          "),j.lastLi.append(j.element);else if(null!=j.lastIndent.peek()&&j.lastIndent.peek()>s){for(;null!=j.lastIndent.peek()&&j.lastIndent.peek()>s;)if("li"!==j.element.parent()[0].tagName.toLowerCase()){if(!/[uo]l/i.test(j.element.parent()[0].tagName.toLowerCase()))break;j.element=j.element.parent(),j.lastIndent.pop()}else j.element=j.element.parent();j.isUl="ul"===j.element[0].tagName.toLowerCase(),p!==j.isUl&&(k(p),i.append(j.element))}j.lastLevelMatch=u,s!==j.lastIndent.peek()&&j.lastIndent.push(s),j.lastLi=angular.element("
        1. "),j.element.append(j.lastLi),j.lastLi.html(n.html().replace(/[\s\S]*?/gi,"")),n.remove()}else k(!1),i.append(n)}var v=function(a){a=angular.element(a);for(var b=a[0].childNodes.length-1;b>=0;b--)a.after(a[0].childNodes[b]);a.remove()};angular.forEach(i.find("span"),function(a){a.removeAttribute("lang"),a.attributes.length<=0&&v(a)}),angular.forEach(i.find("font"),v),text=i.html()}else{if(text=text.replace(/<(|\/)meta[^>]*?>/gi,""),text.match(/<[^>]*?(ta-bind)[^>]*?>/)){if(text.match(/<[^>]*?(text-angular)[^>]*?>/)){var w=angular.element("
          "+text+"
          ");w.find("textarea").remove();for(var x=b(w,"ta-bind"),y=0;y',"")}}else text.match(/^]*?>/gi,""));text=text.replace(/
          ]*?>/gi,"")}text=a(text,"",B),m.insertHtml(text,r[0]),c(function(){t.$setViewValue(J())},0)}};if(r.on("paste",function(a,b){b&&angular.extend(a,b);var c=f.rangy.saveSelection();if(z)return a.stopPropagation(),a.preventDefault(),!1;var d=r[0].innerHTML,e=(a.originalEvent||a).clipboardData;if(e&&e.getData){for(var g="",h=0;h$/i.test(c.innerHTML.trim())&&"blockquote"===c.parentNode.tagName.toLowerCase()&&!c.nextSibling){$selection=angular.element(c);var e=$selection.parent();e.after(d),$selection.remove(),0===e.children().length&&e.remove(),m.setSelectionToElementStart(d[0]),a.preventDefault()}else/^<[^>]+><\/[^>]+>$/i.test(c.innerHTML.trim())&&"blockquote"===c.tagName.toLowerCase()&&($selection=angular.element(c),$selection.after(d),$selection.remove(),m.setSelectionToElementStart(d[0]),a.preventDefault())}}),r.on("keyup",function(a,b){if(b&&angular.extend(a,b),G&&c.cancel(G),!z&&!C.test(a.keyCode)){if(""!==v&&13===a.keyCode&&!a.shiftKey){for(var d=m.getSelectionElement();!d.tagName.match(h)&&d!==r[0];)d=d.parentNode;if(d.tagName.toLowerCase()!==s.taDefaultWrap&&"li"!==d.tagName.toLowerCase()&&(""===d.innerHTML.trim()||"
          "===d.innerHTML.trim())){var e=angular.element(v);angular.element(d).replaceWith(e),m.setSelectionToElementStart(e[0])}}var f=J();""!==v&&""===f.trim()&&(r[0].innerHTML=v,m.setSelectionToElementStart(r.children()[0]));var g=u!==a.keyCode&&D.test(a.keyCode);K(f,g),g||(G=c(function(){t.$undoManager.push(f)},250)),u=a.keyCode}}),r.on("blur",function(){A=!1,z||K(),t.$render()}),s.placeholder&&(d.ie>8||void 0===d.ie)){var N;if(!s.id)throw"textAngular Error: An unique ID is required for placeholders to work";N=j("#"+s.id+".placeholder-text:before",'content: "'+s.placeholder+'"'),l.$on("$destroy",function(){k(N)})}r.on("focus",function(){A=!0,t.$render()}),r.on("mousedown",function(a,b){b&&angular.extend(a,b),a.stopPropagation()})}else r.on("change blur",function(){z||t.$setViewValue(J())});var O=function(b){return t.$oldViewValue=a(i(b),t.$oldViewValue,B)},P=function(a){return s.required&&t.$setValidity("required",!F(a)),a};t.$parsers.push(O),t.$parsers.push(P),t.$formatters.push(O),t.$formatters.push(function(a){if(F(a))return a;var b=angular.element("
          "+a+"
          ");return 0===b.children().length&&(a="<"+s.taDefaultWrap+">"+a+""),a}),t.$formatters.push(P),t.$formatters.push(function(a){return t.$undoManager.push(a||"")});var Q=function(a){return l.$emit("ta-element-select",this),a.preventDefault(),!1},R=function(a,b){if(b&&angular.extend(a,b),!p&&!z){p=!0;var d;d=a.originalEvent?a.originalEvent.dataTransfer:a.dataTransfer,l.$emit("ta-drop-event",this,a,d),c(function(){p=!1,K(),S()},100)}},S=l["reApplyOnSelectorHandlers"+(s.id||"")]=function(){z||angular.forEach(n,function(a){r.find(a).off("click",Q).on("click",Q)})},T=function(a){r[0].innerHTML=a};t.$render=function(){var a=t.$viewValue||"";g[0].activeElement!==r[0]?x?(s.placeholder?""===a?(A?r.removeClass("placeholder-text"):r.addClass("placeholder-text"),T(v)):(r.removeClass("placeholder-text"),T(a)):T(""===a?v:a),z?r.off("drop",R):(S(),r.on("drop",R))):"textarea"!==r[0].tagName.toLowerCase()&&"input"!==r[0].tagName.toLowerCase()?T(o(a)):r.val(a):x&&r.removeClass("placeholder-text")},s.taReadonly&&(z=l.$eval(s.taReadonly),z?(r.addClass("ta-readonly"),("textarea"===r[0].tagName.toLowerCase()||"input"===r[0].tagName.toLowerCase())&&r.attr("disabled","disabled"),void 0!==r.attr("contenteditable")&&r.attr("contenteditable")&&r.removeAttr("contenteditable")):(r.removeClass("ta-readonly"),"textarea"===r[0].tagName.toLowerCase()||"input"===r[0].tagName.toLowerCase()?r.removeAttr("disabled"):x&&r.attr("contenteditable","true")),l.$watch(s.taReadonly,function(a,b){b!==a&&(a?(r.addClass("ta-readonly"),("textarea"===r[0].tagName.toLowerCase()||"input"===r[0].tagName.toLowerCase())&&r.attr("disabled","disabled"),void 0!==r.attr("contenteditable")&&r.attr("contenteditable")&&r.removeAttr("contenteditable"),angular.forEach(n,function(a){r.find(a).on("click",Q)}),r.off("drop",R)):(r.removeClass("ta-readonly"),"textarea"===r[0].tagName.toLowerCase()||"input"===r[0].tagName.toLowerCase()?r.removeAttr("disabled"):x&&r.attr("contenteditable","true"),angular.forEach(n,function(a){r.find(a).off("click",Q)}),r.on("drop",R)),z=a)})),x&&!z&&(angular.forEach(n,function(a){r.find(a).on("click",Q)}),r.on("drop",R),r.on("blur",function(){d.webkit&&(e=!0)}))}}}]);var p=!1,q=angular.module("textAngular",["ngSanitize","textAngularSetup","textAngular.factories","textAngular.DOM","textAngular.validators","textAngular.taBind"]),r={};q.constant("taRegisterTool",c),q.value("taTools",r),q.config([function(){angular.forEach(r,function(a,b){delete r[b]})}]),q.run([function(){if(!window.rangy)throw"rangy-core.js and rangy-selectionsaverestore.js are required for textAngular to work correctly, rangy-core is not yet loaded.";if(window.rangy.init(),!window.rangy.saveSelection)throw"rangy-selectionsaverestore.js is required for textAngular to work correctly."}]),q.directive("textAngular",["$compile","$timeout","taOptions","taSelection","taExecCommand","textAngularManager","$window","$document","$animate","$log","$q",function(a,b,c,d,e,f,g,h,i,j,k){return{require:"?ngModel",scope:{},restrict:"EA",link:function(l,m,n,o){var p,q,r,s,t,u,v,w,x,y=n.serial?n.serial:Math.floor(1e16*Math.random());l._name=n.name?n.name:"textAngularEditor"+y;var z=function(a,c,d){b(function(){var b=function(){a.off(c,b),d()};a.on(c,b)},100)};x=e(n.taDefaultWrap),angular.extend(l,angular.copy(c),{wrapSelection:function(a,b,c){"undo"===a.toLowerCase()?l["$undoTaBindtaTextElement"+y]():"redo"===a.toLowerCase()?l["$redoTaBindtaTextElement"+y]():(x(a,!1,b),c&&l["reApplyOnSelectorHandlerstaTextElement"+y](),l.displayElements.text[0].focus())},showHtml:l.$eval(n.taShowHtml)||!1}),n.taFocussedClass&&(l.classes.focussed=n.taFocussedClass),n.taTextEditorClass&&(l.classes.textEditor=n.taTextEditorClass),n.taHtmlEditorClass&&(l.classes.htmlEditor=n.taHtmlEditorClass),n.taTextEditorSetup&&(l.setup.textEditorSetup=l.$parent.$eval(n.taTextEditorSetup)),n.taHtmlEditorSetup&&(l.setup.htmlEditorSetup=l.$parent.$eval(n.taHtmlEditorSetup)),l.fileDropHandler=n.taFileDrop?l.$parent.$eval(n.taFileDrop):l.defaultFileDropHandler,v=m[0].innerHTML,m[0].innerHTML="",l.displayElements={forminput:angular.element(""),html:angular.element(""),text:angular.element("
          "),scrollWindow:angular.element("
          "),popover:angular.element('
          '),popoverArrow:angular.element('
          '),popoverContainer:angular.element('
          '),resize:{overlay:angular.element('
          '),background:angular.element('
          '),anchors:[angular.element('
          '),angular.element('
          '),angular.element('
          '),angular.element('
          ')],info:angular.element('
          ')}},l.displayElements.popover.append(l.displayElements.popoverArrow),l.displayElements.popover.append(l.displayElements.popoverContainer),l.displayElements.scrollWindow.append(l.displayElements.popover),l.displayElements.popover.on("mousedown",function(a,b){return b&&angular.extend(a,b),a.preventDefault(),!1}),l.showPopover=function(a){l.displayElements.popover.css("display","block"),l.reflowPopover(a),i.addClass(l.displayElements.popover,"in"),z(m,"click keyup",function(){l.hidePopover()})},l.reflowPopover=function(a){l.displayElements.text[0].offsetHeight-51>a[0].offsetTop?(l.displayElements.popover.css("top",a[0].offsetTop+a[0].offsetHeight+"px"),l.displayElements.popover.removeClass("top").addClass("bottom")):(l.displayElements.popover.css("top",a[0].offsetTop-54+"px"),l.displayElements.popover.removeClass("bottom").addClass("top"));var b=l.displayElements.text[0].offsetWidth-l.displayElements.popover[0].offsetWidth,c=a[0].offsetLeft+a[0].offsetWidth/2-l.displayElements.popover[0].offsetWidth/2;l.displayElements.popover.css("left",Math.max(0,Math.min(b,c))+"px"),l.displayElements.popoverArrow.css("margin-left",Math.min(c,Math.max(0,c-b))-11+"px")},l.hidePopover=function(){var a=function(){l.displayElements.popover.css("display",""),l.displayElements.popoverContainer.attr("style",""),l.displayElements.popoverContainer.attr("class","popover-content")};k.when(i.removeClass(l.displayElements.popover,"in",a)).then(a)},l.displayElements.resize.overlay.append(l.displayElements.resize.background),angular.forEach(l.displayElements.resize.anchors,function(a){l.displayElements.resize.overlay.append(a)}),l.displayElements.resize.overlay.append(l.displayElements.resize.info),l.displayElements.scrollWindow.append(l.displayElements.resize.overlay),l.reflowResizeOverlay=function(a){a=angular.element(a)[0],l.displayElements.resize.overlay.css({display:"block",left:a.offsetLeft-5+"px",top:a.offsetTop-5+"px",width:a.offsetWidth+10+"px",height:a.offsetHeight+10+"px"}),l.displayElements.resize.info.text(a.offsetWidth+" x "+a.offsetHeight)},l.showResizeOverlay=function(a){var b=function(b){var c={width:parseInt(a.attr("width")),height:parseInt(a.attr("height")),x:b.clientX,y:b.clientY};void 0===c.width&&(c.width=a[0].offsetWidth),void 0===c.height&&(c.height=a[0].offsetHeight),l.hidePopover();var d=c.height/c.width,e=function(b){var e={x:Math.max(0,c.width+(b.clientX-c.x)),y:Math.max(0,c.height+(b.clientY-c.y))},f=function(a,b){a=angular.element(a),"img"===a[0].tagName.toLowerCase()&&(b.height&&(a.attr("height",b.height),delete b.height),b.width&&(a.attr("width",b.width),delete b.width)),a.css(b)};if(b.shiftKey){var g=e.y/e.x;f(a,{width:d>g?e.x:e.y/d,height:d>g?e.x*d:e.y})}else f(a,{width:e.x,height:e.y});l.reflowResizeOverlay(a)};h.find("body").on("mousemove",e),z(l.displayElements.resize.overlay,"mouseup",function(){h.find("body").off("mousemove",e),l.showPopover(a)}),b.stopPropagation(),b.preventDefault()};l.displayElements.resize.anchors[3].on("mousedown",b),l.reflowResizeOverlay(a),z(m,"click",function(){l.hideResizeOverlay()})},l.hideResizeOverlay=function(){l.displayElements.resize.overlay.css("display","")},l.setup.htmlEditorSetup(l.displayElements.html),l.setup.textEditorSetup(l.displayElements.text),l.displayElements.html.attr({id:"taHtmlElement"+y,"ng-show":"showHtml","ta-bind":"ta-bind","ng-model":"html"}),l.displayElements.text.attr({id:"taTextElement"+y,contentEditable:"true","ta-bind":"ta-bind","ng-model":"html"}),l.displayElements.scrollWindow.attr({"ng-hide":"showHtml"}),n.taDefaultWrap&&l.displayElements.text.attr("ta-default-wrap",n.taDefaultWrap),n.taUnsafeSanitizer&&(l.displayElements.text.attr("ta-unsafe-sanitizer",n.taUnsafeSanitizer),l.displayElements.html.attr("ta-unsafe-sanitizer",n.taUnsafeSanitizer)),l.displayElements.scrollWindow.append(l.displayElements.text),m.append(l.displayElements.scrollWindow),m.append(l.displayElements.html),l.displayElements.forminput.attr("name",l._name),m.append(l.displayElements.forminput),n.tabindex&&(m.removeAttr("tabindex"),l.displayElements.text.attr("tabindex",n.tabindex),l.displayElements.html.attr("tabindex",n.tabindex)),n.placeholder&&(l.displayElements.text.attr("placeholder",n.placeholder),l.displayElements.html.attr("placeholder",n.placeholder)),n.taDisabled&&(l.displayElements.text.attr("ta-readonly","disabled"),l.displayElements.html.attr("ta-readonly","disabled"),l.disabled=l.$parent.$eval(n.taDisabled),l.$parent.$watch(n.taDisabled,function(a){l.disabled=a,l.disabled?m.addClass(l.classes.disabled):m.removeClass(l.classes.disabled) })),a(l.displayElements.scrollWindow)(l),a(l.displayElements.html)(l),l.updateTaBindtaTextElement=l["updateTaBindtaTextElement"+y],l.updateTaBindtaHtmlElement=l["updateTaBindtaHtmlElement"+y],m.addClass("ta-root"),l.displayElements.scrollWindow.addClass("ta-text ta-editor "+l.classes.textEditor),l.displayElements.html.addClass("ta-html ta-editor "+l.classes.htmlEditor),l._actionRunning=!1;var A=!1;if(l.startAction=function(){return l._actionRunning=!0,A=g.rangy.saveSelection(),function(){A&&g.rangy.restoreSelection(A)}},l.endAction=function(){l._actionRunning=!1,A&&g.rangy.removeMarkers(A),A=!1,l.updateSelectedStyles(),l.showHtml||l["updateTaBindtaTextElement"+y]()},t=function(){m.addClass(l.classes.focussed),w.focus()},l.displayElements.html.on("focus",t),l.displayElements.text.on("focus",t),u=function(a){return l._actionRunning||h[0].activeElement===l.displayElements.html[0]||h[0].activeElement===l.displayElements.text[0]||(m.removeClass(l.classes.focussed),w.unfocus(),b(function(){m.triggerHandler("blur")},0)),a.preventDefault(),!1},l.displayElements.html.on("blur",u),l.displayElements.text.on("blur",u),l.queryFormatBlockState=function(a){return!l.showHtml&&a.toLowerCase()===h[0].queryCommandValue("formatBlock").toLowerCase()},l.queryCommandState=function(a){return l.showHtml?"":h[0].queryCommandState(a)},l.switchView=function(){l.showHtml=!l.showHtml,i.enabled(!1,l.displayElements.html),i.enabled(!1,l.displayElements.text),l.showHtml?b(function(){return i.enabled(!0,l.displayElements.html),i.enabled(!0,l.displayElements.text),l.displayElements.html[0].focus()},100):b(function(){return i.enabled(!0,l.displayElements.html),i.enabled(!0,l.displayElements.text),l.displayElements.text[0].focus()},100)},n.ngModel){var B=!0;o.$render=function(){if(B){B=!1;var a=l.$parent.$eval(n.ngModel);void 0!==a&&null!==a||!v||""===v||o.$setViewValue(v)}l.displayElements.forminput.val(o.$viewValue),l._elementSelectTriggered||h[0].activeElement===l.displayElements.html[0]||h[0].activeElement===l.displayElements.text[0]||(l.html=o.$viewValue||"")};var C=function(a){return n.required&&o.$setValidity("required",!(!a||""===a.trim())),a};o.$parsers.push(C),o.$formatters.push(C)}else l.displayElements.forminput.val(v),l.html=v;if(l.$watch("html",function(a,b){a!==b&&(n.ngModel&&o.$viewValue!==a&&o.$setViewValue(a),l.displayElements.forminput.val(a))}),n.taTargetToolbars)w=f.registerEditor(l._name,l,n.taTargetToolbars.split(","));else{var D=angular.element('
          ');n.taToolbar&&D.attr("ta-toolbar",n.taToolbar),n.taToolbarClass&&D.attr("ta-toolbar-class",n.taToolbarClass),n.taToolbarGroupClass&&D.attr("ta-toolbar-group-class",n.taToolbarGroupClass),n.taToolbarButtonClass&&D.attr("ta-toolbar-button-class",n.taToolbarButtonClass),n.taToolbarActiveButtonClass&&D.attr("ta-toolbar-active-button-class",n.taToolbarActiveButtonClass),n.taFocussedClass&&D.attr("ta-focussed-class",n.taFocussedClass),m.prepend(D),a(D)(l.$parent),w=f.registerEditor(l._name,l,["textAngularToolbar"+y])}l.$on("$destroy",function(){f.unregisterEditor(l._name)}),l.$on("ta-element-select",function(a,b){w.triggerElementSelect(a,b)&&l["reApplyOnSelectorHandlerstaTextElement"+y]()}),l.$on("ta-drop-event",function(a,c,d,e){l.displayElements.text[0].focus(),e&&e.files&&e.files.length>0?(angular.forEach(e.files,function(a){try{k.when(l.fileDropHandler(a,l.wrapSelection)||l.fileDropHandler!==l.defaultFileDropHandler&&k.when(l.defaultFileDropHandler(a,l.wrapSelection))).then(function(){l["updateTaBindtaTextElement"+y]()})}catch(b){j.error(b)}}),d.preventDefault(),d.stopPropagation()):b(function(){l["updateTaBindtaTextElement"+y]()},0)}),l._bUpdateSelectedStyles=!1,l.updateSelectedStyles=function(){var a;void 0!==(a=d.getSelectionElement())&&a.parentNode!==l.displayElements.text[0]?w.updateSelectedStyles(angular.element(a)):w.updateSelectedStyles(),l._bUpdateSelectedStyles&&b(l.updateSelectedStyles,200)},p=function(){l._bUpdateSelectedStyles||(l._bUpdateSelectedStyles=!0,l.$apply(function(){l.updateSelectedStyles()}))},l.displayElements.html.on("keydown",p),l.displayElements.text.on("keydown",p),q=function(){l._bUpdateSelectedStyles=!1},l.displayElements.html.on("keyup",q),l.displayElements.text.on("keyup",q),r=function(a,b){b&&angular.extend(a,b),l.$apply(function(){return w.sendKeyCommand(a)?(l._bUpdateSelectedStyles||l.updateSelectedStyles(),a.preventDefault(),!1):void 0})},l.displayElements.html.on("keypress",r),l.displayElements.text.on("keypress",r),s=function(){l._bUpdateSelectedStyles=!1,l.$apply(function(){l.updateSelectedStyles()})},l.displayElements.html.on("mouseup",s),l.displayElements.text.on("mouseup",s)}}}]),q.service("textAngularManager",["taToolExecuteAction","taTools","taRegisterTool",function(a,b,c){var d={},e={};return{registerEditor:function(c,f,g){if(!c||""===c)throw"textAngular Error: An editor requires a name";if(!f)throw"textAngular Error: An editor requires a scope";if(e[c])throw'textAngular Error: An Editor with name "'+c+'" already exists';var h=[];return angular.forEach(g,function(a){d[a]&&h.push(d[a])}),e[c]={scope:f,toolbars:g,_registerToolbar:function(a){this.toolbars.indexOf(a.name)>=0&&h.push(a)},editorFunctions:{disable:function(){angular.forEach(h,function(a){a.disabled=!0})},enable:function(){angular.forEach(h,function(a){a.disabled=!1})},focus:function(){angular.forEach(h,function(a){a._parent=f,a.disabled=!1,a.focussed=!0})},unfocus:function(){angular.forEach(h,function(a){a.disabled=!0,a.focussed=!1})},updateSelectedStyles:function(a){angular.forEach(h,function(b){angular.forEach(b.tools,function(c){c.activeState&&(b._parent=f,c.active=c.activeState(a))})})},sendKeyCommand:function(c){var d=!1;return(c.ctrlKey||c.metaKey)&&angular.forEach(b,function(b,e){if(b.commandKeyCode&&b.commandKeyCode===c.which)for(var g=0;g0)for(var k=0;k"),d.addClass(b&&b["class"]?b["class"]:g.classes.toolbarButton),d.attr("name",c.name),d.attr("unselectable","on"),d.attr("ng-disabled","isDisabled()"),d.attr("tabindex","-1"),d.attr("ng-click","executeAction()"),d.attr("ng-class","displayActiveToolClass(active)"),b&&b.tooltiptext&&d.attr("title",b.tooltiptext),d.on("mousedown",function(a,b){return b&&angular.extend(a,b),a.preventDefault(),!1}),b&&!b.display&&!c._display&&(d[0].innerHTML="",b.buttontext&&(d[0].innerHTML=b.buttontext),b.iconclass)){var e=angular.element(""),f=d[0].innerHTML;e.addClass(b.iconclass),d[0].innerHTML="",d.append(e),f&&""!==f&&d.append(" "+f)}return c._lastToolDefinition=angular.copy(b),a(d)(c)};g.tools={},g._parent={disabled:!0,showHtml:!1,queryFormatBlockState:function(){return!1},queryCommandState:function(){return!1}};var k={$window:f,$editor:function(){return g._parent},isDisabled:function(){return"function"!=typeof this.$eval("disabled")&&this.$eval("disabled")||this.$eval("disabled()")||"html"!==this.name&&this.$editor().showHtml||this.$parent.disabled||this.$editor().disabled},displayActiveToolClass:function(a){return a?g.classes.toolbarButtonActive:""},executeAction:e};angular.forEach(g.toolbar,function(a){var b=angular.element("
          ");b.addClass(g.classes.toolbarGroup),angular.forEach(a,function(a){g.tools[a]=angular.extend(g.$new(!0),d[a],k,{name:a}),g.tools[a].$element=j(d[a],g.tools[a]),b.append(g.tools[a].$element)}),h.append(b)}),g.updateToolDisplay=function(a,b,c){var d=g.tools[a];if(d){if(d._lastToolDefinition&&!c&&(b=angular.extend({},d._lastToolDefinition,b)),null===b.buttontext&&null===b.iconclass&&null===b.display)throw'textAngular Error: Tool Definition for updating "'+a+'" does not have a valid display/iconclass/buttontext value';null===b.buttontext&&delete b.buttontext,null===b.iconclass&&delete b.iconclass,null===b.display&&delete b.display;var e=j(b,d);d.$element.replaceWith(e),d.$element=e}},g.addTool=function(a,b,c,e){g.tools[a]=angular.extend(g.$new(!0),d[a],k,{name:a}),g.tools[a].$element=j(d[a],g.tools[a]);var f;void 0===c&&(c=g.toolbar.length-1),f=angular.element(h.children()[c]),void 0===e?(f.append(g.tools[a].$element),g.toolbar[c][g.toolbar[c].length-1]=a):(f.children().eq(e).after(g.tools[a].$element),g.toolbar[c][e]=a)},b.registerToolbar(g),g.$on("$destroy",function(){b.unregisterToolbar(g.name)})}}}])}()}({},function(){return this}()); \ No newline at end of file diff --git a/lib/taBind.js b/lib/taBind.js index 1f4bd563..bcccf696 100644 --- a/lib/taBind.js +++ b/lib/taBind.js @@ -20,7 +20,6 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM' // defaults to the paragraph element, but we need the line-break or it doesn't allow you to type into the empty element // non IE is '


          ', ie is '

          ' as for once IE gets it correct... var _defaultVal, _defaultTest; - var _trimTest = /^<[^>]+>(\s| )*<\/[^>]+>$/ig; // set the default to be a paragraph value if(attrs.taDefaultWrap === undefined) attrs.taDefaultWrap = 'p'; /* istanbul ignore next: ie specific test */ @@ -41,9 +40,14 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM' } var _blankTest = function(_blankVal){ - _blankVal = _blankVal.trim(); - return (_blankVal.length === 0 || _blankVal === _defaultTest || _trimTest.test(_blankVal) || - !(/>\s*(([^\s<]+)\s*)+]+\s*)+$/i.test(_blankVal) || INLINETAGS_NONBLANK.test(_blankVal)));// this regex tests if there is some content that isn't white space between tags, or there is just some text passed in + var _firstTagIndex = _blankVal.indexOf('>'); + if(_firstTagIndex === -1) return _blankVal.trim().length === 0; + _blankVal = _blankVal.trim().substring(_firstTagIndex, _firstTagIndex + 100); + // this regex is to match any number of whitespace only between two tags + if (_blankVal.length === 0 || _blankVal === _defaultTest || /^>(\s| )*<\/[^>]+>$/ig.test(_blankVal)) return true; + // this regex tests if there is a tag followed by some optional whitespace and some text after that + else if (/>\s*[^\s<]/i.test(_blankVal) || INLINETAGS_NONBLANK.test(_blankVal)) return false; + else return true; }; element.addClass('ta-bind'); diff --git a/src/textAngular.js b/src/textAngular.js index 90a5245b..6da9a13d 100644 --- a/src/textAngular.js +++ b/src/textAngular.js @@ -2,7 +2,7 @@ @license textAngular Author : Austin Anderson License : 2013 MIT -Version 1.3.0-pre14 +Version 1.3.0-pre15 See README.md or https://github.com/fraywing/textAngular/wiki for requirements and use. */ @@ -758,7 +758,6 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM' // defaults to the paragraph element, but we need the line-break or it doesn't allow you to type into the empty element // non IE is '


          ', ie is '

          ' as for once IE gets it correct... var _defaultVal, _defaultTest; - var _trimTest = /^<[^>]+>(\s| )*<\/[^>]+>$/ig; // set the default to be a paragraph value if(attrs.taDefaultWrap === undefined) attrs.taDefaultWrap = 'p'; /* istanbul ignore next: ie specific test */ @@ -779,9 +778,14 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM' } var _blankTest = function(_blankVal){ - _blankVal = _blankVal.trim(); - return (_blankVal.length === 0 || _blankVal === _defaultTest || _trimTest.test(_blankVal) || - !(/>\s*(([^\s<]+)\s*)+]+\s*)+$/i.test(_blankVal) || INLINETAGS_NONBLANK.test(_blankVal)));// this regex tests if there is some content that isn't white space between tags, or there is just some text passed in + var _firstTagIndex = _blankVal.indexOf('>'); + if(_firstTagIndex === -1) return _blankVal.trim().length === 0; + _blankVal = _blankVal.trim().substring(_firstTagIndex, _firstTagIndex + 100); + // this regex is to match any number of whitespace only between two tags + if (_blankVal.length === 0 || _blankVal === _defaultTest || /^>(\s| )*<\/[^>]+>$/ig.test(_blankVal)) return true; + // this regex tests if there is a tag followed by some optional whitespace and some text after that + else if (/>\s*[^\s<]/i.test(_blankVal) || INLINETAGS_NONBLANK.test(_blankVal)) return false; + else return true; }; element.addClass('ta-bind'); diff --git a/test/taBind/taBind.spec.js b/test/taBind/taBind.spec.js index 74b1a731..7aefcd77 100644 --- a/test/taBind/taBind.spec.js +++ b/test/taBind/taBind.spec.js @@ -458,4 +458,42 @@ describe('taBind', function () { })); }); }); + describe('performance tests', function(){ + it('should be fast', inject(function ($compile, $rootScope) { + var _counts = 0; + var _average = 0; + var _testFunc = function(){ + // Massive lorem ipsum... + var start = 0; + runs(function(){ + $rootScope.html = ''; + var element = $compile('
          ')($rootScope); + $rootScope.$digest(); + start = new Date().getTime(); + element.html('

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque faucibus ante ut finibus malesuada. Curabitur eu vehicula nibh. Quisque sit amet magna quis diam gravida consectetur. Sed at dui tristique, tempor ligula et, dapibus diam. Etiam a lorem sollicitudin, pellentesque ligula vel, ultrices turpis. Quisque commodo nunc purus, sed accumsan magna finibus ac. Fusce ut lacinia metus, tincidunt tristique magna. Phasellus quis elementum leo. Duis non velit ultricies, vehicula nisi sit amet, tempus magna. In sit amet fringilla lorem. Quisque sem sapien, facilisis quis lorem at, sollicitudin tempus nunc. Sed a fringilla urna, sed volutpat justo. Nunc et velit felis. Aliquam tincidunt a orci eget dapibus. Praesent rhoncus augue nec dolor vehicula tempor. Ut pulvinar sed lorem sit amet iaculis. Nunc blandit sagittis odio non mattis. Duis eget magna eu elit fringilla viverra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In euismod nulla ligula, quis dictum odio blandit non. Nunc suscipit consectetur pretium. Donec eleifend nulla pretium ipsum maximus, nec condimentum magna posuere. Suspendisse sollicitudin felis purus, eget iaculis ipsum tempor tincidunt. Vivamus iaculis at est nec laoreet. Vivamus iaculis vehicula molestie. Phasellus magna arcu, pellentesque molestie dignissim ac, congue ac lacus. In id lorem dolor. Etiam ultrices fermentum hendrerit. Etiam posuere lacus nibh, eu maximus magna vulputate eu. Curabitur non molestie sem. Proin dapibus gravida vehicula. Suspendisse porttitor, risus et imperdiet pulvinar, ante felis mollis ante, a sodales dui orci id quam. Proin quis lorem ante. Donec mollis metus nibh, ac feugiat nisi tempus placerat. Aenean quis est lorem. Suspendisse scelerisque metus vel orci maximus tempus. Vivamus nec turpis velit. Ut justo nunc, hendrerit sit amet nisl feugiat, sollicitudin congue metus. Fusce vestibulum laoreet imperdiet. Morbi augue nisi, viverra vitae scelerisque ut, tincidunt sit amet turpis. Proin lacus dui, pharetra blandit tincidunt ut, bibendum vel mauris. Morbi ultrices, felis in blandit tempus, odio leo semper mi, non sagittis lectus erat vel nibh. Donec malesuada massa eu elit rhoncus vulputate. Morbi quis lorem elit. Curabitur ac nisl in lorem malesuada finibus. Morbi molestie id quam consectetur facilisis. Donec congue quam eget leo interdum tristique eu vitae felis. Aliquam in sem ut lorem mollis maximus eu nec velit. Nam viverra eros vitae felis tempor, eget eleifend massa mattis. Proin volutpat luctus risus sit amet pellentesque. Donec efficitur vel enim sit amet rutrum. Sed ac ligula sed velit finibus commodo. Suspendisse potenti. Nam in aliquet ligula, sit amet imperdiet nisi. Cras sed rhoncus lorem. Nunc finibus viverra nulla et lobortis. Aenean sed sapien molestie, pellentesque massa sed, volutpat ipsum. Integer id interdum dolor. Aliquam eget tristique ex, in elementum mauris. Donec vitae lacinia lacus, sit amet ullamcorper ipsum. Curabitur et faucibus sem, eu bibendum felis. Cras lacinia ante sit amet dolor pulvinar feugiat. Integer venenatis magna et purus accumsan, in pellentesque felis vestibulum. Cras vulputate leo metus, ut tristique nunc faucibus a. Fusce euismod libero sed massa feugiat pellentesque. Sed a tincidunt eros. Integer ac nibh blandit, pellentesque lectus quis, pretium metus. Donec a tincidunt urna, non fringilla dolor. Nunc dictum auctor tortor eget facilisis. Nunc facilisis turpis sed enim lacinia, in tristique mi dapibus. Mauris suscipit velit sit amet augue iaculis, at congue felis semper. Mauris nec felis feugiat, scelerisque sapien non, egestas dolor. Curabitur pellentesque, nibh sit amet egestas tincidunt, erat nulla fermentum tortor, et dictum est diam at magna. Aliquam erat volutpat. Sed blandit varius enim, non dapibus diam. Aenean malesuada elit dui, vitae pellentesque turpis accumsan eget. Sed laoreet dui vel arcu blandit luctus. Vestibulum feugiat commodo sem in eleifend. Sed elementum ut nisi a hendrerit. Quisque at lobortis erat, a iaculis risus. Ut felis dolor, eleifend ut nisl at, convallis venenatis dolor. Nullam sit amet tempus sem. Phasellus id ipsum nulla. Aenean consequat consectetur bibendum. Maecenas laoreet lacus vel sagittis ultricies. Sed mollis egestas semper. Cras diam urna, vestibulum ut mattis sed, eleifend vel diam. Curabitur eget risus ut ligula pharetra eleifend eu eu augue. Nam ornare ex ac urna porttitor pulvinar. In faucibus euismod lacus eget sagittis. Sed ac velit mauris. Sed metus est, accumsan at lacus eget, interdum cursus est. Sed in lacinia orci. Donec vitae sapien tristique, placerat ipsum vel, interdum massa. Praesent enim est, rhoncus eget gravida vel, lacinia nec tellus. Vivamus nec dui non sem molestie molestie. Nam ac maximus lorem, a pharetra odio. Aliquam erat volutpat. In pretium consectetur eros, consectetur lacinia enim sollicitudin vel. Donec varius, odio nec fermentum elementum, nisi ex pretium nulla, eget accumsan risus velit ut enim. Sed sodales arcu diam, quis hendrerit sapien rhoncus quis. Donec malesuada ex sodales mauris faucibus bibendum. Nulla non eleifend ex. Mauris vitae blandit diam, sed aliquam lacus. Suspendisse quis erat in nulla imperdiet porttitor eget non nibh. Ut enim nunc, pharetra sit amet libero eget, ornare finibus velit. Nunc odio sapien, pretium imperdiet auctor at, semper eget libero. Suspendisse potenti. Sed tellus tortor, lobortis eget mi eget, consectetur sollicitudin justo. In hac habitasse platea dictumst. Suspendisse eget sem ut eros sagittis sagittis. Nullam a ex ornare, scelerisque dui sit amet, porta libero. Duis bibendum auctor neque ac efficitur. Curabitur vitae diam at lorem placerat cursus. Integer mollis vestibulum nisl sed cursus. Nam rhoncus mi vel aliquet tempus. Integer volutpat iaculis turpis, non egestas libero accumsan quis. Quisque consectetur libero eu pellentesque hendrerit. Nullam condimentum orci eu nunc varius, et egestas diam hendrerit. Aliquam consectetur rutrum neque, non porta elit maximus sit amet. Integer vel volutpat metus. Ut tincidunt vestibulum mollis. Duis est mauris, feugiat nec est eget, luctus faucibus dolor. In dui odio, commodo eget ipsum elementum, viverra pellentesque odio. In tristique scelerisque turpis, sed laoreet mi facilisis nec. Suspendisse luctus quam mauris, sed vulputate metus molestie eu. Maecenas sit amet dolor quam. Donec enim magna, scelerisque in ipsum sit amet, posuere mollis arcu. Sed aliquet tortor sit amet dapibus consectetur. Vivamus non imperdiet sapien. Nam auctor tincidunt lectus, non ultrices velit cursus nec. Ut vel aliquam leo. Mauris vulputate nulla sed massa rutrum imperdiet. Sed pellentesque mi ipsum. Morbi tincidunt id orci hendrerit aliquam. Aliquam tempor nibh in dignissim efficitur. Nullam ut lectus facilisis, ullamcorper nulla quis, faucibus ex. Donec eros nunc, facilisis non ipsum non, consectetur elementum nibh. Pellentesque eleifend venenatis turpis, non blandit ex interdum at. Nunc dictum placerat est, a sodales felis vestibulum non. Aenean in laoreet elit. Sed luctus sed ex eget viverra. Etiam porttitor, arcu condimentum sollicitudin faucibus, sem metus laoreet metus, non pellentesque augue odio quis purus. Mauris commodo libero vel erat ullamcorper viverra. Sed vitae pharetra augue. In laoreet nisi at varius dictum. Aliquam et lacus a diam dapibus tristique. Nunc luctus, nisi vitae pulvinar cursus, quam erat ullamcorper velit, ut feugiat tellus metus a neque. Etiam id quam vel elit pulvinar tincidunt. Vestibulum hendrerit, leo et egestas aliquet, diam tellus pellentesque sapien, id fringilla velit tellus vel dui. Proin tristique facilisis sem, non lacinia lectus interdum ac. Morbi vel dignissim eros. Curabitur at elit leo. Vivamus aliquet ex quam, non fringilla justo sollicitudin et. Quisque elit lacus, gravida sed viverra in, porta quis enim. Phasellus orci elit, iaculis vel finibus eu, rhoncus ac ante. Etiam non leo sit amet lacus sagittis eleifend. Nulla malesuada et massa quis ultricies. In id tellus neque. Etiam non erat sit amet erat consequat commodo. Pellentesque lobortis mauris ultrices massa placerat, id sollicitudin nisi pretium. Praesent a tortor ut nisi malesuada fringilla eget nec justo. Nullam varius, sem quis egestas pretium, purus magna posuere sem, et porta ipsum nibh quis lectus. Nulla pretium hendrerit nulla ut dapibus. Vivamus nec aliquam lorem. Vivamus molestie convallis turpis, id posuere est. Sed venenatis consectetur volutpat. Nunc imperdiet lectus vel risus tempor imperdiet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed magna velit, faucibus quis ultricies sit amet, molestie in magna. Nulla posuere molestie dolor ut pellentesque. Integer ullamcorper accumsan nibh. Morbi feugiat mollis turpis, vel fermentum mi iaculis ac. Nullam sed nisl venenatis, sodales nisi ut, efficitur odio. Morbi et finibus tellus, et accumsan tortor. Etiam eu elit in arcu laoreet molestie. Mauris ac malesuada ex, sed sagittis enim. Vivamus suscipit sit amet diam nec sodales. Curabitur et mi congue, malesuada est in, dapibus tortor. Duis porta, lectus et eleifend vulputate, ex magna condimentum odio, eu rhoncus libero magna vel justo. Fusce aliquet, leo ut faucibus efficitur, dolor nisl eleifend odio, blandit fermentum ante nisi at felis. Cras eu ante non augue malesuada scelerisque. Integer sodales nibh in ex tristique rhoncus. In hac habitasse platea dictumst. Morbi ullamcorper libero sed aliquet condimentum. Nulla sed purus vel nisl ornare placerat nec ut sapien. Donec scelerisque arcu ligula, sed sodales lacus vestibulum accumsan. Aenean in egestas urna. Fusce efficitur vel leo id convallis. In hac habitasse platea dictumst. Quisque at pulvinar ipsum. Pellentesque suscipit quis est eu imperdiet. Fusce lacinia at mi nec malesuada. In rutrum aliquam ullamcorper. Donec magna urna, laoreet eget arcu sed, imperdiet molestie diam. Donec hendrerit tristique mauris, et pellentesque ex euismod sed. Fusce eu ligula sagittis, pharetra felis id, vulputate eros. Vivamus pharetra nec leo nec volutpat. Curabitur eu fermentum velit. Suspendisse egestas aliquam ante eu congue. Proin eget euismod ipsum. Mauris nibh enim, sodales porttitor mi a, pellentesque tincidunt est. Fusce fermentum dignissim porta. Curabitur vel fermentum dolor. Aliquam bibendum luctus metus. Maecenas ut dolor lobortis odio rhoncus mattis vel sed purus. Sed viverra lacus non tempus porttitor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla lobortis rutrum placerat. Maecenas lectus risus, molestie vitae diam in, lacinia iaculis mauris. Pellentesque volutpat ligula nibh, in laoreet quam maximus sit amet. Curabitur non consequat est. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam lorem felis, mattis dictum iaculis a, suscipit eu lectus. Suspendisse potenti. Vivamus nunc quam, mattis a augue sodales, condimentum efficitur est. Donec sit amet nulla mi. Nam sit amet turpis laoreet, varius augue et, dapibus justo. Vestibulum ut nunc consequat, dictum diam vitae, facilisis nisl. Aliquam pellentesque tempor consequat. Etiam laoreet nisi at dapibus tincidunt. Phasellus in ante nibh. Fusce vel dui luctus, pretium sapien id, finibus tortor. Phasellus non vestibulum metus. Sed at convallis mauris, ut sollicitudin diam. Interdum et malesuada fames ac ante ipsum primis in faucibus. Curabitur cursus, lectus in mollis eleifend, lacus ante luctus dolor, id euismod massa augue ac eros. Quisque luctus lobortis ex, ac auctor mi interdum nec. Maecenas non scelerisque sapien. Fusce eleifend ac tellus vitae venenatis. Nunc posuere hendrerit risus nec condimentum. Donec non auctor lorem. Vestibulum et vehicula purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum imperdiet quis sem sed pellentesque. Nunc massa libero, maximus eu interdum in, ultricies id urna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi facilisis id leo et porttitor. Integer vel feugiat nulla. Vivamus malesuada tortor ac nulla finibus vulputate. Nam pretium felis at sem eleifend, dignissim lacinia enim rhoncus. Mauris ante diam, volutpat in fermentum id, volutpat ac risus. Suspendisse et ex nec ante eleifend rutrum eu eget augue. Fusce mollis diam ut nibh auctor sagittis. Donec sed nunc vitae neque bibendum suscipit. Nam placerat vel nisl quis luctus. Duis egestas neque in purus faucibus, eget porta dolor feugiat. Mauris vitae neque nec tellus dictum pulvinar sed a lacus. Fusce sollicitudin tellus ut tincidunt rutrum. Vestibulum suscipit erat a tortor tristique, et posuere nibh interdum. Suspendisse pharetra imperdiet volutpat. Vivamus tincidunt risus a pharetra viverra. Nunc non commodo diam, sit amet tincidunt quam. Duis hendrerit est nec viverra faucibus. Morbi auctor, nisl id pharetra placerat, turpis risus porta ipsum, sed lobortis diam eros vel purus. In vitae purus tincidunt, porttitor quam nec, fringilla eros. Etiam a imperdiet magna. Morbi dictum venenatis diam, sed sodales purus gravida vitae. Phasellus non libero non tellus bibendum elementum. Phasellus gravida lacinia orci eu venenatis. Vivamus nunc orci, pellentesque vitae tincidunt in, tincidunt vel massa. Integer maximus sem non velit ullamcorper semper. Praesent mollis ultrices est, in volutpat turpis euismod blandit. Ut sit amet diam quam. Morbi a egestas quam. Duis at nulla sit amet ante pharetra malesuada. Donec auctor in ex quis tempor. Curabitur eget leo volutpat, condimentum felis eget, ultricies magna. Mauris id dignissim enim. Suspendisse interdum tristique elit, vitae bibendum lectus imperdiet at. Morbi sodales accumsan erat quis tincidunt. Vivamus vulputate ex posuere varius ullamcorper. In vulputate dictum lectus. Sed commodo eu urna vitae fringilla. Sed gravida erat quis sodales auctor. Fusce at luctus ante, non posuere justo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla facilisi. Suspendisse viverra, lectus in vestibulum tincidunt, nisi ipsum convallis nibh, porttitor molestie mi ex a urna. Vivamus non luctus leo. Nullam commodo nisl eget nisl finibus laoreet. Vestibulum vestibulum sollicitudin lorem, id bibendum magna tristique in. Vestibulum sit amet tincidunt purus, ut dictum tortor. Maecenas congue venenatis accumsan. Praesent tincidunt commodo leo a fermentum. Donec vulputate gravida dictum. Nulla facilisi. Morbi quam nisl, mattis quis odio id, finibus malesuada massa. Nullam in tempus nulla. Duis tempor porta consectetur. Ut sed quam suscipit, lobortis leo ut, vestibulum dui. Donec sit amet lectus a urna vulputate lacinia. Phasellus orci turpis, blandit at imperdiet tempor, suscipit at turpis. Duis ut urna eu odio tristique porttitor vel nec dolor. Fusce sed ipsum dapibus, porta metus vel, luctus libero. Phasellus metus risus, consectetur id tempus eu, consectetur non tellus. Pellentesque felis est, pellentesque in fringilla id, ornare vel lectus. Vestibulum pulvinar, lorem in condimentum bibendum, orci lectus fermentum nulla, nec malesuada elit nisi et turpis. Ut consectetur, ex facilisis euismod euismod, est justo scelerisque sem, vitae placerat felis justo a dui. Sed ut felis id odio sodales pharetra sit amet et ligula. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer vitae consequat magna, sed laoreet massa. Vivamus lobortis ligula ac varius pulvinar. Curabitur a suscipit neque. Phasellus ac quam in sem fringilla facilisis. Morbi eu odio neque. Pellentesque vehicula dictum placerat. Vestibulum at quam non justo rhoncus mollis nec at nunc. Aliquam sollicitudin molestie mauris, in mattis metus lobortis at. Sed eget nisl sit amet risus mollis rutrum vitae ac quam. Nam nec sem neque. Donec sit amet erat quis sem varius lacinia. Morbi viverra ac sapien vel fermentum. Donec in lacus ut est semper ultricies nec pulvinar purus. Morbi at tincidunt tortor. Nullam quis pulvinar quam. Sed dui eros, egestas et mi ut, viverra bibendum lorem. Vivamus mollis, massa nec commodo hendrerit, ex est vulputate dui, vitae porttitor tellus nulla in libero. Vestibulum imperdiet dolor ligula. Nunc finibus felis at velit lobortis finibus. Phasellus ut ante sodales, malesuada nulla vel, rutrum purus. Aliquam in eleifend neque, vitae imperdiet leo. Sed vitae felis mi. Phasellus risus eros, scelerisque a facilisis et, rhoncus eget massa. Vivamus ultricies sagittis ex, ut volutpat dui pulvinar nec. Vivamus eget massa at tortor tincidunt vulputate sit amet eu felis. Aliquam erat volutpat. Morbi sed ex eget mi blandit facilisis. Cras aliquet nulla justo, ut tincidunt massa pretium eget. Integer dapibus, quam a semper suscipit, risus orci vulputate enim, ac pretium lectus nisl vel ante. Cras fringilla nunc id nunc accumsan finibus. Curabitur pretium velit elementum, volutpat eros sit amet, aliquet nunc. Aliquam erat volutpat. Curabitur ut risus facilisis lorem efficitur lobortis in vitae velit. Phasellus vel volutpat ipsum, in posuere ante. Praesent tincidunt tempor sem, vitae congue tortor varius non. Nam tincidunt arcu sit amet suscipit ultrices. Nullam a viverra lectus. Curabitur risus magna, convallis ac dolor sit amet, aliquam faucibus urna. Donec mattis finibus diam a aliquet. Donec eget aliquet nisl. Aenean eu est euismod, condimentum libero id, ullamcorper tortor. Donec leo orci, elementum nec turpis at, ornare venenatis nisi. Donec cursus justo nec eros sodales, vel eleifend augue finibus. Donec malesuada ultricies sem sed fringilla. In hac habitasse platea dictumst. Praesent tempus eleifend leo, eleifend molestie nulla tincidunt nec. Donec purus libero, elementum sed lorem nec, interdum feugiat nulla. Fusce sed hendrerit tortor. In hac habitasse platea dictumst. Quisque feugiat pretium luctus. Phasellus in mauris id nibh bibendum hendrerit. Proin sem justo, rhoncus sit amet mi eget, gravida faucibus arcu. Quisque sollicitudin eu lorem sit amet congue. Vestibulum in laoreet orci. Phasellus sit amet dignissim ante, quis scelerisque lorem. Sed non maximus mauris, sed gravida libero. Duis mi nulla, gravida vitae ex faucibus, hendrerit dignissim dui. In non tempor mauris, id euismod enim. Phasellus sed elementum magna. Pellentesque et aliquam nisl. Vestibulum sed erat sed ipsum rutrum congue. Nullam ullamcorper hendrerit leo, id condimentum nibh finibus non. Proin porttitor tellus a tellus dignissim, eu dapibus ante commodo. Sed eget arcu sodales, rhoncus mauris et, ultricies dui. Morbi eget libero nibh. Aenean ullamcorper imperdiet metus, ac feugiat velit. Mauris id mi tortor. Fusce dolor erat, ullamcorper at metus eget, rhoncus malesuada neque. Praesent pellentesque nulla cursus, ornare mauris vel, sagittis ipsum. Vestibulum feugiat porttitor lorem, in placerat nisl accumsan vel. Pellentesque in lobortis nulla, ac sodales neque. Morbi pellentesque magna a hendrerit aliquam. Pellentesque commodo dapibus mattis. Aliquam ut pulvinar dolor. Cras nec sem bibendum, elementum quam ut, euismod tortor. Ut ut efficitur ipsum, ut efficitur ante. Curabitur suscipit, purus at euismod consequat, sem erat semper dolor, vel eleifend ex neque vel neque. Ut bibendum accumsan enim quis molestie. Pellentesque a interdum nunc, quis condimentum dolor. Praesent at diam pellentesque justo fringilla aliquet. Cras quis justo facilisis, vestibulum lectus id, accumsan diam. Vestibulum et magna risus. Donec iaculis mauris et mauris efficitur rhoncus. Pellentesque pellentesque justo et semper rutrum. Praesent tellus metus, volutpat ut placerat vel, porttitor nec nulla. Morbi et quam vitae lorem eleifend iaculis quis eget metus. Nunc gravida lectus tincidunt nibh pellentesque, tincidunt accumsan magna pellentesque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eu purus ac risus luctus consequat quis at nulla. Integer quis orci dolor. Vivamus elementum velit quis volutpat ultricies. Mauris vulputate risus sed quam feugiat, id scelerisque ligula auctor. Vestibulum euismod justo quis eros consectetur faucibus. Sed tristique ac tortor vel viverra. Cras consequat faucibus sapien eu finibus. Nunc vitae lacus orci. Pellentesque condimentum interdum sodales. Aenean feugiat efficitur nulla, eget auctor neque ultrices non. Praesent dapibus ut ligula sit amet dapibus. Donec eu tellus pellentesque, sollicitudin ante quis, lacinia tellus. Pellentesque tincidunt gravida ipsum non porta. Nullam venenatis commodo turpis, ut interdum risus fringilla ac. Cras quis nulla eu enim tempus pulvinar. Quisque ultricies dictum diam, et porta eros sagittis ac. Etiam sed dolor eget purus tincidunt tempor ut a sapien. Phasellus efficitur facilisis ipsum ut fringilla. Vestibulum vulputate sapien et accumsan euismod. Aenean posuere egestas turpis vel consectetur. Integer magna turpis, luctus a mattis et, mattis eu libero. In molestie interdum egestas. Aliquam aliquam quis ex ornare porta. Mauris nisi dui, posuere nec sem et, efficitur sodales justo. Sed dictum arcu tellus, eget vulputate erat faucibus eget. Nunc lectus justo, sagittis in scelerisque vitae, pellentesque malesuada nisi. Duis viverra elementum eros, ac gravida ex luctus quis. Aliquam eu lorem nisl. Nullam sagittis neque vel ornare aliquet. Sed bibendum orci et sodales tristique. Phasellus cursus volutpat tellus sit amet ullamcorper. Nullam placerat lorem eget cursus commodo. Mauris nec urna nibh. Mauris dignissim vitae urna at gravida. Sed nulla nisi, pharetra sed consequat venenatis, vehicula vitae velit. Morbi rutrum lorem finibus ligula hendrerit auctor. Duis ac quam eget sem luctus vulputate non eu est. Sed vel facilisis diam. Donec in velit quis lacus efficitur porttitor ac nec metus. Ut lacinia vestibulum quam, et euismod dolor. Nulla est arcu, semper at nisl in, malesuada porta mauris. Vivamus commodo dolor non iaculis porta. Donec ac erat finibus leo varius sagittis at suscipit libero. Praesent interdum venenatis lacus, at aliquam tellus suscipit vitae. Ut lacus lacus, vestibulum et efficitur eget, malesuada id tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque tempor elementum fringilla. Morbi mollis euismod sapien et lobortis. Cras efficitur eros eros, eu facilisis ipsum aliquam quis. Mauris a ante sed tellus molestie molestie at ac elit. Mauris sit amet libero iaculis, dignissim nunc tincidunt, imperdiet ex. In vel arcu felis. Curabitur viverra felis eget tincidunt vulputate. Nullam tempus vitae erat eu fringilla. Vestibulum est magna, vulputate ac felis ac, maximus ullamcorper lorem. Sed fermentum a mauris eu blandit. Aliquam erat volutpat. Donec finibus sagittis iaculis. Curabitur sagittis libero vitae ultricies porttitor. Vivamus vitae pretium erat. In id massa vel felis bibendum euismod sit amet non diam. Proin viverra, mi a lobortis tristique, orci lacus lacinia dolor, quis mollis est nibh eget mi. Donec gravida nibh purus, sit amet dapibus nisi pulvinar a. Mauris a nunc et lectus pharetra imperdiet. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas vitae volutpat turpis. Fusce sed feugiat massa. Nam faucibus orci nisi, non aliquet lectus auctor id. Nullam non diam lacus. Vivamus mattis arcu ac felis accumsan posuere. Vestibulum sed ullamcorper dui. Ut ex nulla, dictum sit amet nisl luctus, venenatis ultrices ex. Praesent cursus nibh ac dapibus feugiat. Suspendisse libero orci, interdum eget hendrerit non, tempus eu ligula. Integer interdum augue convallis, commodo nisl nec, auctor nulla. Praesent non elit dignissim, consequat lacus a, rutrum nisl. Phasellus convallis elit tortor, eget auctor libero bibendum nec. Aenean eget lectus id eros facilisis porta. Fusce non sagittis lacus, eget pulvinar est. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis vitae nulla ac risus ultrices euismod. Proin eu mi sodales, rutrum leo eget, pretium metus. Nunc sagittis convallis cursus. Integer ut libero sagittis, molestie purus vel, porttitor massa. Maecenas rhoncus nunc ut lacus aliquam pretium. Pellentesque scelerisque enim nec accumsan blandit. Morbi erat risus, vehicula sit amet fermentum vel, dignissim ac purus. Fusce sagittis suscipit ligula, vitae ornare dolor fringilla ac. Maecenas dignissim diam diam, id ornare augue sagittis ut. Curabitur et eros nulla. Sed blandit ex et tellus ullamcorper gravida. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam fermentum lorem porttitor, porta augue quis, maximus nulla. Sed molestie leo nisi, nec luctus orci pretium vitae. Donec faucibus augue nec sodales congue. Integer ut dolor vel arcu vestibulum feugiat. Mauris eget accumsan ipsum. Proin auctor est et dui vulputate, id accumsan quam maximus. Mauris pulvinar lorem vitae risus maximus, id dictum mi varius. Ut fringilla, nisi eu laoreet hendrerit, felis ligula tempor sapien, sit amet commodo mi ipsum nec quam. Aliquam a commodo leo. Sed fringilla pretium lectus, nec auctor orci viverra et. Nulla facilisi. Duis accumsan turpis eget molestie egestas. Morbi ullamcorper libero arcu, et facilisis augue efficitur vitae. Integer vitae volutpat lacus, in dignissim elit. Praesent ac augue nunc. Nullam eget libero maximus magna bibendum facilisis. Cras volutpat nibh rhoncus, mattis odio at, blandit neque. Sed consequat felis non malesuada auctor. Phasellus sit amet aliquet dolor. Nam pellentesque at magna sit amet convallis. Suspendisse eleifend magna eros, quis molestie est fringilla ut. Proin blandit gravida sapien, id maximus eros rutrum nec. Duis cursus tristique egestas. Nunc malesuada arcu interdum nibh feugiat, nec placerat tellus mollis. Nulla placerat, mauris eget porttitor malesuada, metus libero auctor diam, ac sodales elit justo vitae dui. Sed congue massa in vehicula egestas. Duis iaculis est maximus tortor malesuada, sit amet ullamcorper massa tempor. Duis venenatis nisl nec nulla ultrices tempor. Aliquam auctor, quam vel imperdiet posuere, urna est sollicitudin nisl, mattis tempus quam eros ac mi. Proin aliquet odio at purus consequat efficitur ac nec augue. Proin ac metus in massa malesuada ornare. Proin a dui tortor. Nam molestie elit ut urna fringilla, id volutpat metus molestie. Nam cursus mattis tincidunt. Ut risus enim, imperdiet quis semper sed, pellentesque at purus. Suspendisse tempus porta tortor, ut condimentum justo fermentum nec. Quisque vitae dapibus nisi. Morbi dolor nisi, vulputate quis leo a, consectetur consectetur elit. Integer auctor sapien vel augue euismod placerat. Sed quis lacus est. Sed tincidunt nunc vel ultrices sodales. Fusce tempus egestas fringilla. Etiam egestas volutpat nunc in commodo. Nullam id facilisis magna. Vestibulum quis quam magna. Nulla gravida luctus sapien, vel pharetra turpis maximus quis. In hac habitasse platea dictumst. Morbi arcu magna, ornare vitae lacinia a, finibus nec urna. Sed et rutrum justo. Duis tincidunt purus orci, nec lobortis enim molestie vitae. Phasellus sed nisl quis lacus accumsan consectetur. Etiam luctus purus dui, ut vestibulum turpis eleifend ut. Nullam at diam et sem euismod varius pharetra ut urna. Maecenas finibus fringilla turpis, at semper lacus luctus sed. Nulla a odio vitae sem vestibulum euismod. Sed in eros arcu. Phasellus pharetra gravida sem, ut bibendum lacus rhoncus ac. Vivamus eleifend nec urna eget euismod. Maecenas et rhoncus nibh. Donec commodo augue felis, vel laoreet orci lacinia vitae. Nullam ut imperdiet elit. Praesent mi turpis, varius eget justo vel, tristique commodo nibh. Suspendisse tellus erat, interdum ac pellentesque sit amet, venenatis ac felis. Fusce sagittis magna velit, non pharetra urna sollicitudin sed. Donec a viverra massa, at cursus neque. Nam pretium sit amet risus ac volutpat. In lacinia, eros eu malesuada facilisis, eros neque porta nisi, in fermentum lectus nisl consequat leo. Sed eleifend, magna ut convallis fermentum, urna libero vehicula arcu, ut tempus quam orci ut nibh. Cras rutrum ex in hendrerit imperdiet. Integer egestas vitae elit fringilla fringilla. Proin ut lobortis massa. Phasellus commodo, ligula molestie lobortis viverra, metus odio porta ex, eu elementum neque quam id metus. Maecenas sollicitudin justo tristique efficitur accumsan. Pellentesque quis magna non nulla sodales semper sed eu dolor. Morbi urna magna, facilisis in enim ac, hendrerit rhoncus sapien. Sed et augue sit amet libero imperdiet accumsan at eget enim. Nullam ac finibus nisi, et viverra lorem. Phasellus egestas viverra lacus et scelerisque. Quisque et porttitor augue. Nulla facilisi. Vestibulum tincidunt eleifend faucibus. In fringilla aliquet iaculis. Proin eu bibendum mi, sit amet faucibus nulla. Pellentesque pulvinar lacus id augue feugiat facilisis. Suspendisse ac nunc tincidunt elit egestas interdum id vel nisi. Cras eu condimentum elit. Mauris eu arcu dignissim mauris condimentum auctor a sit amet ipsum. Integer euismod sit amet est sed sagittis. Praesent fringilla et mi vitae porta. Integer eget massa at elit venenatis pretium. Sed sit amet maximus enim. Fusce justo sapien, molestie vel augue vel, suscipit consectetur augue. Pellentesque tempor eu libero sed aliquet. Aenean vel consequat diam, at vulputate ex. Proin tristique ligula ut tempor efficitur. Phasellus sollicitudin nunc sit amet pulvinar imperdiet. Cras consequat lobortis urna, eu faucibus justo cursus ut. Fusce lectus nulla, fermentum vel nisi id, rhoncus aliquet leo. Fusce ac leo imperdiet, luctus elit vel, lobortis nibh. Sed in euismod mi. Aliquam rutrum sed nisi eget tincidunt. Donec quis sapien non tellus faucibus sollicitudin. Etiam luctus eget dolor ac fringilla. Donec lectus mi, ultrices vitae felis ut, blandit facilisis sapien. Mauris euismod erat sodales, tristique risus non, ultrices lacus. Curabitur tempor hendrerit elit. Etiam ac tempus sem, quis eleifend nulla. Curabitur commodo efficitur lorem in pretium. Nam dolor enim, feugiat eget leo ut, commodo auctor mi. Nullam vestibulum, justo a volutpat tempus, odio risus cursus nulla, vitae aliquet metus urna id tellus. Proin facilisis a sapien sed ultricies. Morbi efficitur quam in euismod ornare. Suspendisse aliquet leo sed porta dignissim. Curabitur id gravida purus. Praesent eu nunc a nibh accumsan tincidunt. Nam accumsan ultricies ligula et ullamcorper. Integer dapibus lobortis mauris, non pharetra massa sollicitudin eu. Aenean sagittis risus ac augue cursus, pretium commodo nisi bibendum. Donec quis diam eu tellus interdum dignissim. Duis ante nulla, aliquet quis risus sed, aliquet luctus arcu. Duis ultrices ac libero ut lacinia. Donec iaculis ante quis aliquet volutpat. Cras eu orci dui. Mauris sollicitudin turpis a orci faucibus bibendum. Sed varius consectetur lectus nec ornare. Sed ultrices, tortor sit amet pulvinar vehicula, nisi nibh pretium diam, a eleifend lacus nisi sed ex. In convallis suscipit purus, eu tempus leo tincidunt congue. Aliquam tincidunt augue ut dui pellentesque, quis bibendum tortor porta. Aliquam erat volutpat. Sed neque mi, venenatis eu nulla et, maximus ultrices ipsum. Ut vel blandit nisl. Maecenas justo nisl, ultricies id lacus sed, accumsan pharetra ligula. Sed risus dolor, fermentum vestibulum semper a, venenatis a lectus. Mauris quam mi, blandit vitae sapien molestie, vehicula suscipit nulla. Nam ornare cursus vulputate. Nam auctor malesuada velit, vel efficitur lacus pellentesque et. Sed imperdiet quis sem vitae lobortis. Nam sit amet sem ac ante consectetur dapibus eu nec nisl. Aliquam ornare, est ut bibendum tempor, turpis turpis luctus nibh, pharetra pulvinar nisl augue vel ipsum. Proin cursus nisl a nisl posuere volutpat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ut urna tortor. Aliquam non lorem fringilla, viverra mi sit amet, lobortis tellus. Nullam aliquam enim sit amet venenatis sollicitudin. Fusce elementum sed mi nec aliquam. Morbi vel risus vel mi lacinia dignissim. Pellentesque rutrum et nisi a venenatis. Nam consectetur, nulla ut bibendum imperdiet, diam risus rutrum dolor, et tincidunt libero justo at lacus. Vivamus non scelerisque leo. Etiam tristique in purus vel eleifend. Vestibulum enim est, porttitor eu turpis vitae, accumsan imperdiet ante. Nunc eu finibus urna. Etiam placerat, erat nec ornare molestie, lacus turpis congue leo, finibus vestibulum tortor nisi eget lectus. Cras id interdum dolor. Etiam interdum tempor egestas. Sed at libero id sapien posuere ultricies sit amet et ipsum. Fusce ut vehicula mauris, id elementum ligula. Donec commodo accumsan elementum. Fusce ut tortor sodales, tristique sapien vitae, elementum ante. Etiam feugiat posuere erat ac posuere. Duis fermentum nibh a quam gravida, quis volutpat lectus tempor. Integer imperdiet vel felis nec eleifend. Sed ultrices nisi eget placerat tempor. Etiam sed placerat nibh, id pharetra purus. Duis magna ligula, varius sed urna eget, efficitur viverra purus. Curabitur vehicula magna in mauris suscipit pellentesque. In lobortis metus porttitor, semper odio eleifend, imperdiet ex. Ut vestibulum odio ac sollicitudin tristique. Quisque vel feugiat quam. Donec congue, risus eget luctus fringilla, nisi arcu sollicitudin enim, eu efficitur orci nisl eget velit. Aenean lacus ex, porta et ultrices vitae, vehicula sed ex. Fusce consequat diam vel nibh luctus, ac aliquam neque condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus sit amet pellentesque nunc, at porttitor dolor. Nulla placerat, arcu quis facilisis laoreet, quam metus sodales risus, sit amet lacinia massa tellus sed risus. Integer placerat mollis libero, sit amet facilisis orci eleifend in. Proin sit amet nibh pretium, venenatis purus rhoncus, scelerisque lorem. Integer finibus imperdiet arcu non luctus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus ac elementum nisl. Suspendisse mattis laoreet leo, lacinia imperdiet magna. Suspendisse in fermentum eros. Etiam eget condimentum urna, sit amet maximus velit. Maecenas finibus, odio a convallis imperdiet, eros sem blandit lectus, ut eleifend diam ligula non enim. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam dapibus diam in lorem elementum viverra. Nam vel elementum lorem. Phasellus quis est ac urna feugiat pellentesque id eu massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent non lorem eget eros efficitur pulvinar quis nec lacus. Ut ipsum diam, faucibus nec tellus vitae, pulvinar ultricies sapien. Vestibulum dictum consequat purus, ac auctor felis consectetur in. Nunc nibh lacus, scelerisque vitae laoreet eu, fringilla at orci. Sed id tempor sem. Morbi dignissim risus non interdum elementum. Vestibulum lacinia rhoncus magna a varius. Proin dapibus quis lorem sit amet feugiat. Fusce vel dui quis nisi tincidunt ultrices at eu nibh. Curabitur rutrum varius nisl, non dictum magna. Vestibulum libero turpis, fermentum ac egestas non, viverra eget nunc. Sed tincidunt vel est vel efficitur. Proin et volutpat eros. In rhoncus varius metus, eu faucibus erat ornare eget. Morbi viverra mauris eu lacus suscipit elementum. Suspendisse imperdiet mauris sit amet tellus gravida, nec interdum est accumsan. Ut pulvinar et sapien ac consequat. Etiam vulputate, felis ac dapibus pharetra, tellus mauris luctus erat, ullamcorper venenatis felis nunc sed massa. Quisque urna libero, eleifend eget quam a, euismod tempus magna. Nulla nec ligula at mi finibus finibus eget nec odio. Nam maximus, neque eget pellentesque viverra, turpis felis pharetra nisi, sit amet pharetra nulla nibh id orci. Aliquam in viverra justo, vitae rhoncus justo. Aliquam rutrum vestibulum mauris sed sodales. Donec congue justo ut pretium facilisis. Pellentesque commodo risus mattis ex iaculis lobortis. Maecenas et orci efficitur, blandit justo sit amet, malesuada nisi. Phasellus sodales, massa eget tincidunt tempor, ante felis aliquet est, ut ornare elit nulla sit amet lectus. Duis hendrerit, sapien a finibus laoreet, erat turpis porta justo, sed iaculis nisl dui ut lorem. Vivamus odio velit, lobortis non suscipit sit amet, cursus quis nibh. In tempus lacus neque, vitae sagittis leo blandit vitae. Etiam auctor, felis ac efficitur tincidunt, augue quam dictum metus, et dapibus metus dolor nec ligula. Praesent id sodales tortor. Morbi eget turpis ac nibh placerat gravida nec vel metus. Quisque suscipit consequat diam, vitae viverra elit finibus sed. Nullam dignissim mollis sollicitudin. Nullam aliquam lobortis ante, quis tempus nunc euismod vel. Vivamus eget pretium neque, pellentesque hendrerit lorem. Nam in iaculis magna. Integer tempus tincidunt justo nec dictum. Nam porttitor ac lacus nec mollis. Aenean consectetur, quam non tempus lobortis, nibh tortor pharetra nibh, a commodo erat quam eu metus. Donec enim dolor, varius nec arcu et, sagittis aliquet orci. In fringilla risus id arcu tempus, iaculis vestibulum ex dictum. Aenean egestas metus arcu, vulputate rhoncus quam suscipit vitae. Fusce dignissim metus vel porta placerat. Cras efficitur nulla sodales, ornare augue id, congue erat. Proin vel eleifend magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer ac leo magna. Etiam vel fringilla est. Ut dictum porttitor sollicitudin. Phasellus quis ante vel tortor mattis efficitur. Nunc varius interdum lobortis. Vestibulum fermentum, arcu a commodo placerat, odio dolor congue metus, quis dictum mauris mi vitae elit. Aenean vel mi aliquet, semper enim at, tincidunt felis. Vivamus laoreet est purus, in tincidunt nunc accumsan ac. Curabitur molestie leo sem, id ultricies sapien semper non. Aliquam et libero fringilla, tempus nisi a, molestie est. Nam ultrices suscipit egestas. Mauris a lacus eu dui finibus consectetur non ac magna. In bibendum nunc quis bibendum viverra. Curabitur auctor metus quis odio cursus sodales. In accumsan, nisi et consequat ultrices, mi urna vestibulum turpis, a hendrerit leo nisi at velit. Donec vehicula purus eu justo pellentesque, nec dictum sapien efficitur. Sed viverra odio ut sollicitudin scelerisque. Maecenas porttitor urna nec semper lacinia. Suspendisse nec elit porta, hendrerit orci at, condimentum lacus. Nullam sed sapien quis odio bibendum fermentum. Nulla non volutpat augue. Cras quis eros pretium lorem malesuada dictum. Vestibulum lorem mauris, vehicula sed hendrerit sed, commodo ut est. Mauris pretium congue dui vel luctus. Aenean arcu ante, euismod vitae leo ut, vestibulum condimentum tortor. Aliquam posuere nisl orci, eu rutrum arcu iaculis ac. Donec in sapien tempus, lobortis nibh eget, varius magna. Aliquam risus ex, rutrum eu purus a, viverra iaculis dolor. Maecenas volutpat nibh non eros eleifend, at porttitor velit hendrerit. Duis consequat, magna hendrerit efficitur dignissim, dui nibh maximus purus, id vehicula augue lacus eget mi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer porta ipsum sit amet volutpat varius. Quisque condimentum quis eros quis vehicula. Aliquam erat volutpat. Fusce vitae auctor ipsum. Vestibulum placerat ante id faucibus faucibus. Donec vitae congue erat, vel hendrerit ipsum. Vestibulum vel massa euismod risus egestas ultrices. Nam eget ornare dui. Quisque nec porttitor quam, vitae sagittis libero. Sed arcu mi, pulvinar semper ligula eget, tempus cursus turpis. Sed nec ornare tellus, a tincidunt leo. Proin justo enim, finibus vel dictum sit amet, suscipit sed mi. Maecenas malesuada purus at ullamcorper ullamcorper. Maecenas tempor est vitae leo efficitur, quis varius risus aliquam. Phasellus ultrices urna sit amet ex vehicula aliquam. Proin in mauris at purus mattis laoreet a a augue. Etiam fermentum, magna porta viverra eleifend, erat nisi semper quam, eleifend vehicula est orci nec ex. Fusce diam odio, pellentesque a varius ac, pretium quis lacus. Pellentesque auctor quam eu accumsan mattis. Nunc ac metus et leo rutrum varius non et dui. Morbi mollis, turpis quis viverra accumsan, lorem est posuere neque, id egestas nisi quam at odio. Proin maximus accumsan massa sit amet efficitur. Duis aliquet urna est, sed rutrum tortor tincidunt vel. Sed tristique luctus nulla et vulputate. Integer a risus aliquam, lacinia nisi vel, efficitur enim. In ut porttitor nulla, eget egestas mauris. Proin molestie est eget nulla imperdiet, non facilisis sem rhoncus. Proin facilisis placerat elementum. Pellentesque ut viverra arcu. Phasellus nec ultricies erat. Morbi ultricies eros lectus, quis venenatis ipsum ornare eget. Cras vitae nibh eu nisi facilisis convallis vel at odio. Curabitur tempus turpis eu lorem ullamcorper, eget facilisis mauris tincidunt. Donec consectetur, nulla at dapibus ultrices, odio ligula pulvinar lorem, ac placerat libero tortor nec metus. Suspendisse id ante sollicitudin, dictum tortor ac, dapibus enim. Cras libero enim, blandit non neque egestas, tincidunt molestie orci. Cras pulvinar eget magna ut consequat. Quisque augue odio, sodales porta neque eu, imperdiet aliquam orci. Donec bibendum in est quis aliquet. Etiam in risus est. Integer pretium urna turpis, eu varius turpis iaculis quis. Cras volutpat fermentum neque, vehicula suscipit ligula gravida a. In ullamcorper tincidunt quam in congue. Proin molestie augue tortor, eget condimentum massa ornare id. Nullam lacus arcu, venenatis et consectetur nec, convallis ut nisi. Cras ultrices lobortis nisi sit amet sodales. Maecenas tristique, erat a molestie congue, diam nunc tempus augue, vel elementum ipsum nisl in ante. Duis ultrices justo faucibus, aliquet tellus rutrum, scelerisque mauris. Integer fringilla sit amet lectus ut ullamcorper. Aliquam sed dignissim arcu. Mauris vulputate, lectus id fermentum convallis, nunc tellus dapibus purus, nec laoreet tellus lacus in nibh. Sed molestie lacus enim, sit amet placerat erat dignissim non. Ut non mollis ex. Pellentesque eget dui elementum, condimentum diam sed, cursus felis. Integer sagittis lectus nisi, quis fringilla dui pharetra eu. Duis tortor lacus, semper et sem vitae, rutrum tempus risus. Phasellus placerat neque eu augue auctor, quis pellentesque tellus molestie. In euismod consectetur tortor eget vestibulum. Etiam enim massa, cursus eget molestie in, vulputate rhoncus nibh. Etiam urna dui, luctus vitae ligula vel, imperdiet euismod massa. Maecenas quis accumsan ipsum, at blandit tellus. Vestibulum tempus, felis at auctor molestie, erat tortor maximus ex, a ornare leo nisl in elit. Proin varius erat facilisis ante euismod scelerisque. Cras scelerisque quis lorem in eleifend. Proin vel tristique leo. Phasellus feugiat lobortis leo sed euismod. Integer congue nec leo et commodo. Suspendisse sollicitudin nulla non nibh porttitor, sit amet laoreet felis suscipit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam eget eleifend massa, vulputate scelerisque elit. Sed in mauris vitae tellus fringilla aliquet vel eget dui. Maecenas non justo ut sapien sagittis euismod sit amet id ligula. In maximus pharetra quam. Aenean commodo egestas ultricies. Nam dignissim mi eu ultrices cursus. Ut consectetur magna id augue consectetur porttitor. Praesent semper eget urna eget congue. In convallis sapien ipsum, in tempus ex viverra quis. Morbi efficitur ullamcorper turpis, at rhoncus metus consectetur eu. Nullam iaculis, est sed eleifend vestibulum, lorem elit efficitur orci, ac elementum massa est eu risus. Praesent nec dui justo. Cras ac varius eros. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis eu lorem cursus, viverra turpis vel, tempus turpis. In sodales, metus sit amet facilisis dapibus, felis nisi posuere arcu, nec gravida justo felis in sapien. Maecenas tincidunt aliquam commodo. Sed eget lectus ut lacus ullamcorper viverra. Sed luctus urna sed elit accumsan consequat. Proin non faucibus augue. Ut maximus dapibus lacinia. Mauris ex elit, condimentum nec dolor et, sodales hendrerit mauris. Sed semper ipsum ut odio finibus congue. Curabitur tempor cursus justo. Sed varius, orci a cursus auctor, dolor nisi tristique felis, in lacinia ligula diam quis leo. Pellentesque urna dolor, volutpat ut dui ut, suscipit hendrerit nisi. Quisque viverra eget odio id accumsan. Aliquam auctor vulputate lorem, id ornare augue elementum et. Mauris lacinia non arcu ut faucibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla quis nisi tincidunt, consequat massa sed, tempor massa. Ut ut justo vestibulum, imperdiet massa ut, fermentum nulla. Vestibulum nec tellus consequat, dictum leo sit amet, fringilla nulla. Praesent eget erat a orci hendrerit feugiat non ac dolor. Fusce nec sapien id erat euismod viverra. Sed sodales ligula libero, quis fringilla felis sollicitudin ut. Maecenas mollis ligula vitae eros finibus porttitor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer vulputate est vel ultrices blandit. Ut at fringilla leo. Nulla facilisis leo non turpis feugiat commodo. Sed sagittis faucibus iaculis. Vivamus pharetra ipsum a libero ullamcorper, nec imperdiet massa porta. Vivamus efficitur venenatis convallis. Nullam pharetra vehicula efficitur. Proin nec elit dapibus, pulvinar urna in, hendrerit orci. Nulla dignissim dui sed lacinia pharetra. Vestibulum porta interdum hendrerit. Donec aliquet orci at ex laoreet accumsan. Suspendisse commodo placerat tellus, non convallis nisi egestas at. Donec eu placerat metus, eu vulputate sapien. In et tellus ultrices, suscipit ante et, dignissim mauris. Sed laoreet diam sit amet magna tristique, quis rhoncus velit porttitor. Praesent finibus felis libero, scelerisque vulputate elit commodo vulputate. Suspendisse malesuada pulvinar varius. Morbi molestie tincidunt est vel tincidunt. Morbi nec tortor lorem. Integer non vulputate arcu. Nullam auctor quam lorem, et sagittis orci imperdiet et. Nulla hendrerit mauris a mi bibendum dapibus a at nisl. Ut commodo mauris non urna ullamcorper, vitae malesuada tellus sollicitudin. Duis egestas et eros a porttitor. Curabitur congue pharetra tortor ut euismod. Nulla ipsum arcu, aliquet convallis aliquam eu, aliquam in felis. Integer hendrerit egestas turpis a malesuada. Mauris rutrum nisl quis porta lacinia. Vivamus congue ut diam sed semper. Vivamus ullamcorper dolor id nisl eleifend lobortis. Proin at nibh euismod, dictum massa ut, porttitor dolor. Ut mattis mollis ligula id pellentesque. Duis accumsan neque feugiat libero cursus porttitor. Nam placerat rhoncus fringilla. Donec tempus orci nec nunc iaculis, sit amet iaculis augue auctor. Vestibulum ullamcorper elit vitae mauris sodales ullamcorper. Morbi vel massa imperdiet, gravida ex quis, eleifend diam. Mauris eu justo aliquet, consequat nibh id, vestibulum tortor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam elementum felis risus, in viverra dui molestie ut. Suspendisse eleifend bibendum suscipit. Aenean molestie pharetra dolor, quis tincidunt velit. Integer fermentum elementum condimentum. Nullam aliquet nibh at rutrum convallis. Vivamus in mattis tortor, vitae tristique odio. Morbi hendrerit pulvinar mi, sed condimentum ipsum sodales quis. Quisque sit amet blandit nulla. Etiam rhoncus, mauris quis posuere tincidunt, massa lorem malesuada enim, sed consectetur lectus metus eu justo. Etiam eleifend gravida maximus. Mauris vulputate urna a ex porttitor gravida eu sit amet lacus. Aenean varius tempus massa eu porta. Nunc finibus neque diam, eget ornare nisi eleifend id. Suspendisse interdum tempus diam, vel viverra massa faucibus quis. Suspendisse gravida, dui ut rhoncus faucibus, ex ligula dapibus purus, efficitur ultrices elit metus eget dolor. Etiam in maximus nisi. Quisque ut sem ac purus consequat condimentum. In vel nisl tortor. Aliquam erat volutpat. Phasellus eget euismod mi, sed vestibulum nibh. Nullam eget eros purus. Proin sit amet dui a odio iaculis mattis quis in mauris. Donec turpis sem, bibendum non diam id, gravida fringilla purus. Sed metus elit, maximus eget lectus at, euismod rhoncus turpis. Duis sed facilisis est, quis varius nisl. Vestibulum quis orci at elit scelerisque aliquam id sed ex. Morbi ac consequat purus. Aliquam laoreet purus vel magna elementum, eu sodales dui condimentum. Quisque semper lacus orci. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi feugiat posuere sollicitudin. Mauris quam nunc, consequat in bibendum a, dapibus a lorem. Phasellus consequat, diam quis faucibus cursus, enim mi interdum dolor, ac pretium elit enim laoreet neque. Nunc pulvinar quam augue, non interdum diam volutpat vitae. Fusce ac efficitur ex, eget pulvinar mauris. Suspendisse consequat laoreet efficitur. Pellentesque non porta dui, eu fermentum mi. Curabitur placerat vitae tellus sed mollis. Donec sit amet viverra tortor. Nunc lacinia fermentum tortor sit amet pretium. Donec et placerat sapien. Integer pulvinar risus id quam lobortis vehicula. Fusce auctor, neque a mollis posuere, orci dui laoreet turpis, ac fringilla lectus arcu quis ligula. Pellentesque ut consequat magna. Sed vestibulum, ligula rhoncus gravida euismod, velit eros faucibus nisl, nec consequat velit turpis nec ante. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse accumsan ac nunc ac ultricies. Sed pulvinar nec leo in lacinia. Sed ut lorem at massa varius finibus. Maecenas non ante vitae ipsum sollicitudin suscipit. In rutrum leo at interdum vehicula. Vivamus nisi libero, pellentesque non tellus vitae, vestibulum hendrerit enim. Cras congue felis vitae bibendum faucibus. Donec nec suscipit nisl. Nulla facilisi. Fusce ac orci iaculis, rutrum tortor sed, egestas ex. In hac habitasse platea dictumst. Suspendisse porttitor, libero eu congue consequat, ipsum ante auctor felis, ut faucibus odio urna at ipsum. Phasellus ac tellus sit amet diam ultrices volutpat. Nullam pulvinar ipsum mi, vitae consequat mauris tincidunt a. Duis porta tellus sit amet est dapibus ullamcorper. Aliquam laoreet erat quam, eget fringilla tellus condimentum in. Etiam quis pulvinar erat, non consectetur arcu. Nam elementum enim laoreet metus dictum, eu sagittis lectus mollis. Sed et risus nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean tellus justo, convallis non convallis at, commodo eu arcu. Praesent id vulputate enim. Etiam pulvinar finibus euismod. Ut ultrices, arcu sed rutrum placerat, leo lectus feugiat nisl, blandit aliquam tortor ipsum at nibh. Ut vel purus at nunc congue mattis ut ac turpis. Pellentesque sit amet quam vel risus pharetra venenatis sed eget dolor. Mauris sed nisi felis. Suspendisse eu posuere diam, vel fermentum eros. Aenean gravida tempus ligula eget efficitur. Sed et iaculis augue, blandit cursus eros. Praesent eget ornare nisi. Aliquam nec nibh blandit, semper lacus nec, volutpat diam. Nullam ornare viverra orci quis tristique. Nam lacinia felis risus, vitae elementum nunc suscipit a. Vivamus vulputate rutrum odio at imperdiet. Praesent et bibendum dolor. Suspendisse finibus euismod ligula, et viverra quam vulputate eget. Fusce arcu enim, ultrices at porttitor in, vehicula sit amet leo. Praesent vitae diam vitae lectus cursus tempus eu non felis. Fusce vitae mollis est, ac imperdiet velit. Aliquam vitae ullamcorper quam, sit amet iaculis dolor. Phasellus euismod efficitur ligula. Nunc quis ante in felis volutpat hendrerit. Nullam tincidunt, lectus vel consectetur ullamcorper, tellus est gravida neque, non imperdiet ligula turpis in lacus. Maecenas mattis dictum magna faucibus aliquam. Fusce nunc velit, vulputate id euismod eu, semper id est. Suspendisse blandit elit vel volutpat tincidunt. Integer vitae ipsum a erat eleifend maximus. Nam congue suscipit eros at porta. Nulla facilisi. Nullam varius tellus libero, id venenatis tortor aliquet in. Duis sit amet ipsum ut diam lobortis venenatis id at augue. In dignissim consequat erat id efficitur. Etiam dapibus ex elementum, hendrerit tortor et, semper nunc. Nam eu nibh malesuada, venenatis diam vitae, viverra ligula. Aenean augue turpis, fermentum vel elit nec, pellentesque blandit augue. Phasellus et blandit erat. In ac condimentum tellus, in ultrices sem. Maecenas dictum eu augue sed eleifend. Curabitur cursus finibus tortor. Donec consequat lacus in finibus mollis. Phasellus sed lacus a mi viverra sodales. Curabitur aliquet placerat sollicitudin. Sed eget tellus porttitor, mollis purus sit amet, gravida urna. Nulla et ipsum sit amet diam tempus malesuada sit amet sit amet lorem. Integer varius fermentum leo vitae ullamcorper. Nunc sollicitudin dignissim odio eget pulvinar. Duis vel lorem non turpis finibus facilisis. In pharetra mauris purus, et porttitor ligula feugiat et. Suspendisse ullamcorper posuere lacinia. Donec eget urna ipsum. Nulla dapibus commodo tellus, non consequat purus hendrerit quis. Proin eget dictum lorem, quis finibus tellus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer lacinia eleifend dui, id fringilla libero lacinia convallis. Nunc laoreet ante velit, efficitur interdum risus volutpat in. Phasellus malesuada mollis lacus sit amet tempor. Praesent eleifend congue condimentum. Donec sed magna nec enim tincidunt laoreet et id eros. Nam non elementum risus, ut tempor dui. Donec imperdiet magna augue, id vehicula ligula iaculis nec. In ut maximus sapien. Vivamus efficitur, ante sit amet cursus auctor, metus odio congue ligula, et suscipit urna leo sit amet lorem. Mauris eget massa vehicula, viverra enim ut, fermentum sem. Sed eu sapien nibh. Cras semper orci non mi interdum, vitae euismod quam sagittis. Proin vitae pellentesque tellus. Nullam nec risus ultricies, elementum nibh vitae, auctor urna. Cras non enim quis metus gravida elementum vitae at justo. Donec at ullamcorper leo. Sed ac interdum nunc. Duis venenatis, dolor non dignissim sodales, quam tortor aliquet nulla, sed pulvinar velit leo viverra libero. Etiam vel erat nec risus varius gravida sed id odio. In sed tincidunt ipsum. Etiam mollis venenatis ultricies. Nulla venenatis, lacus quis hendrerit vehicula, nulla velit maximus leo, vel convallis turpis massa vel urna. Donec viverra, sem et vulputate egestas, turpis ante mattis nisi, sit amet consectetur libero diam vel ipsum. Suspendisse lobortis euismod neque at porttitor. Suspendisse non purus sed quam porttitor dictum. Nam feugiat pellentesque erat, non facilisis orci tempus sit amet. Duis pulvinar elit eget eros placerat, eu elementum felis euismod. Phasellus nec porttitor massa. Integer a nulla vitae dolor sagittis pellentesque. Mauris pretium eleifend dolor ac interdum. Vestibulum vestibulum risus nisl, at interdum massa efficitur blandit. Fusce ipsum urna, hendrerit ut pretium eget, eleifend sed tortor. Nam vitae quam non nulla sodales molestie quis ultrices tortor. Fusce eget ornare lorem, accumsan venenatis lectus. In non fermentum massa, ac porttitor nibh. Vestibulum efficitur neque vel nunc feugiat consequat. Praesent nec dolor justo. Donec velit felis, convallis quis varius at, maximus id ligula. Sed a accumsan neque. Suspendisse vel blandit ipsum, sit amet mattis mi. Suspendisse nec convallis arcu. Nulla facilisi. Phasellus lobortis mi et ultrices placerat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean non ultricies eros. Integer erat ipsum, tincidunt id tortor nec, egestas tempor nisl. Nulla rutrum augue pellentesque nisl tempor tristique. Nunc est nisl, finibus eu erat id, varius facilisis dolor. Donec ut enim odio. Suspendisse bibendum finibus porta. Nunc facilisis vestibulum ante, eget semper lorem auctor eu. Praesent tempus mi at libero maximus malesuada. Fusce ullamcorper malesuada risus eget porttitor. Nullam sed feugiat nibh. Nullam suscipit nunc neque, nec vestibulum dui commodo nec. Etiam blandit consequat nisl sed consectetur. Donec at ligula pellentesque, dignissim felis nec, commodo lacus. Donec eu mi et risus lacinia finibus. Nulla scelerisque dui ac dignissim hendrerit. Aenean ultrices ac orci a tincidunt. Nunc rhoncus tortor ex, et ornare nisl congue vitae. In a molestie elit, vitae egestas lacus. Morbi quis libero quis neque interdum consectetur. Pellentesque vel tincidunt urna. Sed porta maximus ex in rutrum. Morbi mattis elit a augue ultrices convallis. Nunc a justo purus. Proin eros nisi, molestie ac purus sit amet, gravida auctor est. Cras sem felis, aliquam non turpis ut, laoreet vestibulum ligula. Nam elit nisl, fringilla nec iaculis ac, gravida id sem. Vivamus risus mauris, molestie et ipsum sed, volutpat posuere metus. Praesent tempus bibendum auctor. Etiam ac porta eros. Ut volutpat erat ut commodo consequat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean id sapien sit amet velit fermentum aliquet. Vestibulum vitae ligula ut est vulputate aliquam at a ex. Proin eu iaculis diam. Curabitur id diam sit amet orci posuere pretium. Morbi quis lacus sed dolor porttitor auctor vel eget enim. Ut interdum ex in felis euismod, quis ullamcorper lorem rhoncus. Nunc posuere, lacus nec rhoncus consectetur, elit ante accumsan lorem, non faucibus sapien ex nec massa. Integer augue ante, pharetra ac congue ut, feugiat eu mi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed venenatis, mi ut sodales placerat, risus velit feugiat eros, et pellentesque neque odio nec nisl. Aenean tristique felis quis tellus posuere porttitor. Curabitur viverra ultrices mi et tempus. Duis hendrerit, purus in egestas consequat, mauris nisl suscipit nibh, ut dapibus risus massa a justo. Cras a velit ac justo aliquet maximus nec vitae enim. Donec cursus lacus nulla, id eleifend ipsum efficitur vel. Morbi rutrum ligula purus, ut tempus nunc viverra in. Vestibulum ac tellus a velit luctus malesuada id non sem. Fusce id felis mauris. Nam quis luctus neque. Quisque sagittis ex vel metus vehicula dictum. Proin aliquet ac elit vel volutpat. Duis vitae pharetra erat. Suspendisse efficitur convallis placerat. Vestibulum facilisis quis arcu non lacinia. Donec eget cursus augue. Maecenas eget ligula tempus, cursus lacus ac, auctor elit. Mauris quis scelerisque arcu. Nullam quis justo ac dui malesuada placerat consectetur ac felis. Duis id commodo neque. Donec a justo erat. Aliquam id nisi ultrices, interdum risus eget, imperdiet lectus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse aliquam molestie tellus vel consequat. Nunc sollicitudin rhoncus lectus, id scelerisque lectus iaculis aliquet. Donec sapien arcu, commodo id quam ac, ornare elementum ex. Aenean commodo, mauris ac egestas interdum, enim tortor vestibulum turpis, sed pulvinar sapien tellus rhoncus enim. Sed at diam tristique, volutpat ante id, condimentum nulla. Aliquam ipsum felis, accumsan id consequat nec, pretium vel est. Maecenas fringilla et libero a tempus. In commodo ullamcorper nunc, sed aliquet turpis suscipit quis. In sed lacus scelerisque, molestie arcu at, porttitor sapien. Sed porta ultrices scelerisque. Aenean eu ullamcorper mauris, eget mattis arcu. Pellentesque vulputate efficitur vehicula. Pellentesque hendrerit nunc massa, nec imperdiet velit tincidunt at. Donec porta, ligula non ultrices tincidunt, lorem lacus rutrum nibh, ut tincidunt est nulla eget nisl. Nullam vitae justo semper nisl euismod ultrices. Aliquam sit amet vulputate velit. Nunc interdum risus velit, a sagittis massa pretium mollis. Praesent volutpat pharetra tellus, nec placerat est ultrices mollis. Ut tristique nec ante vitae imperdiet. Pellentesque quis consequat tellus. Pellentesque vitae fringilla lacus, nec eleifend enim. Sed convallis finibus nunc, nec aliquet elit vestibulum eu. Pellentesque dapibus, nunc sed bibendum suscipit, enim nulla suscipit enim, quis dignissim sem lorem cursus metus. Praesent at felis in dui aliquet pretium ut sed nisl. Curabitur ex augue, sagittis venenatis nisl non, fermentum finibus neque. Morbi quis mauris nec libero tristique vestibulum non eu ante. Morbi sodales condimentum nunc et fermentum. In hac habitasse platea dictumst. Donec aliquet ullamcorper odio, eu fermentum elit semper eu. Duis sit amet est neque. Morbi rutrum quam orci, ut sollicitudin felis tincidunt sed. Nunc lacinia non ligula sit amet suscipit. In vitae euismod urna. Curabitur finibus tristique magna, eu consequat turpis pretium sed. Nam condimentum tortor vitae bibendum eleifend. Nam odio orci, interdum eget velit rhoncus, suscipit suscipit elit. Nunc urna tellus, consectetur et iaculis nec, condimentum ac metus. Praesent maximus sagittis nibh, ut volutpat lacus laoreet quis. Pellentesque aliquam felis vitae cursus pharetra. Cras sit amet purus pulvinar, cursus neque et, tristique sapien. Aliquam laoreet, nisi facilisis dignissim vulputate, ante tortor pellentesque nunc, eget dignissim ligula magna egestas ipsum. Mauris sodales purus a justo dictum, nec ultrices mi egestas. Suspendisse vel pharetra justo. Suspendisse purus mi, porta at quam eu, viverra tristique diam. Aliquam quis ligula ultrices, pharetra purus a, suscipit sem. Aliquam dignissim lectus non libero blandit, in sodales dui mattis. Mauris vitae iaculis eros. Aenean mollis viverra risus. Ut tincidunt ante ac tellus efficitur, non tristique sem laoreet. Duis suscipit aliquam eros non fermentum. Suspendisse potenti. Duis semper sagittis cursus. Ut lectus ante, congue sit amet dolor ac, molestie tincidunt velit. Ut quis molestie eros, vel tempor nibh. Suspendisse non ante porttitor, tempus ipsum in, aliquam est. Pellentesque vitae ultricies lorem, in finibus ex. Nunc posuere elit et leo efficitur rhoncus sed quis velit. Nullam viverra ac lectus nec dapibus. In id consequat felis. Phasellus eu ullamcorper ante. Ut nulla neque, feugiat a pretium ut, elementum et sapien. Integer suscipit convallis lacus et hendrerit. Donec at vestibulum elit. Nullam lobortis ullamcorper mauris, et placerat diam consequat vel. Sed sed consequat sapien. Donec sit amet dui sollicitudin, iaculis libero at, finibus lacus. Fusce et nisl neque. In commodo vulputate nibh, vel semper enim tristique ac. Aliquam placerat eu nisl eleifend laoreet. Nunc non tempus diam, eget dictum nibh. Aliquam at convallis urna, elementum lobortis est. In sit amet semper erat, ut porttitor massa. Donec consectetur sapien turpis, in luctus metus tempor pellentesque. Quisque eget urna sit amet nibh porta varius. Morbi scelerisque fermentum orci in commodo. Praesent pulvinar maximus egestas. Aliquam erat volutpat. Donec dui enim, mollis vel ligula et, suscipit interdum diam. In vel diam quis nulla maximus pharetra. Sed nec est urna. Vivamus non volutpat eros. Proin eget commodo nibh, id ullamcorper tellus. Duis pretium leo id dolor vulputate accumsan. Maecenas at tempus nunc. Nunc ut magna nec enim convallis vehicula. Mauris ut semper arcu, sit amet eleifend risus. Ut commodo dictum fringilla. Fusce vel lobortis mauris, ullamcorper tristique lectus. Morbi sagittis arcu quam, vitae vestibulum arcu congue quis. Nam luctus volutpat tellus, non molestie orci vulputate facilisis. In imperdiet ipsum ipsum, et lobortis mi tristique vel. Curabitur quis diam sed orci vestibulum vulputate eu sit amet nisl. Nullam blandit, velit in tempor accumsan, risus turpis molestie elit, ac ornare libero felis maximus tortor. Quisque vulputate, lorem ut vulputate consequat, tortor est feugiat orci, nec elementum purus tortor a mi. Etiam vel molestie libero, sit amet condimentum ipsum. Phasellus fringilla nunc risus, a molestie mi hendrerit ut. Nam congue suscipit risus in ultrices. Maecenas ornare leo sit amet laoreet venenatis. Suspendisse ornare lorem nec rhoncus rhoncus. Aenean laoreet turpis et nunc dictum vulputate. Phasellus blandit turpis eget massa posuere, sit amet feugiat risus eleifend. Praesent velit mi, cursus id diam id, consequat scelerisque risus. Donec malesuada vel orci in ornare. Praesent id accumsan est. Curabitur cursus quam dui. Cras gravida id enim sed consequat. Vivamus volutpat, turpis eleifend ultricies accumsan, leo velit aliquam ex, sed euismod tellus leo tincidunt nulla. Suspendisse malesuada in nisi sed iaculis. Nulla tincidunt fringilla dui, vel sagittis mi molestie ut. Quisque eget nunc diam. Morbi vitae arcu vel augue vestibulum maximus sit amet vel odio. Nam aliquet mauris a lacus pretium porta. Proin sagittis egestas lacinia. Phasellus tempor faucibus mauris, in egestas elit semper sit amet. Vestibulum eu dui faucibus felis ultrices sodales. Sed vehicula velit nec pharetra faucibus. Suspendisse mauris est, ultricies sit amet blandit nec, dapibus id ante. Sed a convallis sem. Integer ex metus, iaculis eu maximus sit amet, pharetra a mi. Ut vitae tincidunt urna, ac ultrices libero. In hac habitasse platea dictumst. Nulla eleifend accumsan est congue hendrerit. Mauris quis urna purus. Proin placerat sodales scelerisque. Donec vitae velit at orci vestibulum iaculis at a erat. Maecenas ullamcorper sapien a orci condimentum eleifend. Fusce lacinia tempor ipsum sit amet volutpat. Curabitur posuere ipsum non diam convallis mattis. Donec mauris elit, varius ac posuere sit amet, egestas interdum risus. Donec tempus vitae risus non tempus. Fusce aliquet auctor ante, in ornare quam. Aliquam a dui eu nisi mattis efficitur. Nullam ac tempor neque. Nullam faucibus vitae nisl sit amet sagittis. Maecenas aliquam dolor ac diam viverra, quis rhoncus eros facilisis. Etiam vel dui sodales, pulvinar ex in, luctus odio. Etiam faucibus commodo commodo. Praesent quis lobortis lorem. Morbi id ipsum ultricies, elementum odio at, dictum tortor. Quisque auctor sapien ut eleifend viverra. Etiam maximus sapien quis nunc ullamcorper, non convallis lacus malesuada. Duis ac eleifend eros. Quisque scelerisque semper mattis. Cras eget lacus ut diam varius eleifend. Nam vitae dignissim nisl. Suspendisse rutrum ipsum a vehicula interdum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque semper nisi quis purus eleifend finibus. Duis porta, enim feugiat varius congue, est metus sollicitudin nulla, quis viverra libero mi quis lectus. Phasellus ac ipsum vehicula, sollicitudin turpis in, placerat diam. Sed a suscipit ipsum. Proin lacinia pharetra nisi, eu lacinia mauris iaculis vitae. Ut ultrices orci vel ultricies rutrum. Proin nec lacinia tellus. Ut eget libero odio. Duis aliquet elementum sem vitae iaculis. Aliquam ut finibus libero. Curabitur et tortor vel lectus malesuada placerat lobortis quis leo. Nulla consectetur vitae eros sit amet finibus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc lobortis, elit non congue gravida, tortor purus blandit massa, vitae sodales metus mauris quis arcu. Cras sagittis tellus eget leo vehicula vestibulum. Sed id leo vel sapien vulputate aliquet nec et massa. Nunc quam felis, tristique a gravida in, mollis vel dui. Etiam tortor risus, feugiat ac iaculis vel, sagittis ac est. Proin in placerat dolor, vitae ullamcorper lectus. Ut rhoncus tellus nec felis accumsan malesuada. Vivamus arcu sapien, dignissim et imperdiet eget, interdum sed arcu. Ut non lorem vel eros posuere dapibus et non diam. Mauris sagittis, leo et pretium condimentum, elit erat pellentesque lacus, et facilisis sapien arcu in tellus. Vivamus at mattis ligula. Mauris volutpat, erat eu ullamcorper mattis, turpis est accumsan nisl, ut fermentum libero diam venenatis velit. Sed tempor lorem ac ex ultrices, in pellentesque magna auctor. Duis maximus lacus a mi hendrerit dapibus. Quisque iaculis semper mattis. Aenean et dolor vel arcu mollis hendrerit nec quis justo. Aenean elit libero, rhoncus ut porttitor eu, aliquet ac quam. Cras mauris ante, ornare faucibus sem in, mattis vulputate mi. Etiam tempor, lacus a vehicula consectetur, justo urna ultrices ipsum, efficitur pharetra lorem urna eu sapien. Curabitur suscipit diam convallis porta rhoncus. Duis tristique lacus vel dolor semper, eget fringilla ipsum volutpat. Donec mollis lectus feugiat malesuada egestas. Donec vulputate ac ex vitae gravida. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In hac habitasse platea dictumst. Nulla at augue feugiat, scelerisque dolor et, pellentesque diam. Sed nisl lorem, vestibulum a viverra non, mollis ut arcu. Donec nisi lectus, aliquam et tincidunt aliquam, pretium eget ex. Cras sed tincidunt ante. Phasellus vitae est nec lorem ullamcorper auctor sit amet eget lectus. Praesent sapien eros, sagittis at tellus vitae, fermentum rutrum est. Phasellus at sem massa. Nunc sit amet consequat dui, a euismod arcu. Phasellus molestie nisi accumsan lectus gravida congue. Morbi porttitor placerat consectetur. Integer lacinia laoreet vulputate. Sed sed sapien odio. Praesent placerat ex eu leo consectetur, ut condimentum dolor lobortis. Cras sit amet diam ornare, tincidunt risus non, bibendum velit. Sed ligula enim, lobortis et pulvinar eget, iaculis id tellus. Sed sapien eros, varius vitae arcu a, vulputate convallis eros. Mauris ullamcorper tempor magna in elementum. Vestibulum bibendum pulvinar elit. Vivamus auctor dolor eu libero sodales, sed vulputate lacus tincidunt. Sed imperdiet aliquet sodales. Nunc fringilla urna gravida tristique fermentum. Nullam neque metus, dictum ac libero id, condimentum placerat nulla. Etiam at tempor diam, ut ultrices lacus. Vivamus consectetur massa in erat pharetra, vel varius purus semper. Pellentesque egestas eros et mi ornare, sit amet lobortis lorem fermentum. Nullam turpis nisl, elementum a sodales non, faucibus non nunc. Aenean vel eros venenatis, accumsan turpis non, consequat dui. Aliquam erat volutpat. Curabitur ultricies fermentum nisl ac facilisis. Sed volutpat ante id diam scelerisque bibendum. Vestibulum sem arcu, suscipit eu faucibus molestie, egestas ut est. Sed vitae dolor id eros ullamcorper tempus luctus eget nibh. Pellentesque a quam in leo condimentum faucibus elementum ut arcu. Phasellus fringilla fringilla mi eu finibus. Nunc tempor malesuada lorem, a pretium augue semper quis. Proin nisl massa, consequat sit amet suscipit et, tincidunt sed orci. Morbi porttitor diam non vestibulum congue. Duis quis laoreet augue. Integer sagittis placerat risus, quis lacinia dui interdum nec. Vestibulum tempor cursus lorem quis maximus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam feugiat scelerisque metus eu facilisis. Phasellus feugiat ipsum sed nibh posuere ultricies. In bibendum, leo id sodales dictum, nunc purus vulputate elit, in faucibus augue nisl quis tortor. Mauris justo augue, hendrerit eu magna a, facilisis porttitor nibh. Ut a volutpat sapien. Proin semper pharetra ultrices. Quisque iaculis mauris nisl, sollicitudin varius tellus venenatis nec. Cras accumsan nec augue a efficitur. Interdum et malesuada fames ac ante ipsum primis in faucibus. Cras interdum arcu eu lacus lacinia, ac pharetra augue aliquet. Etiam ut augue at elit ullamcorper maximus. Donec ut pellentesque felis. Nam sed pellentesque erat, non suscipit purus. Morbi nec urna vitae metus auctor mollis. Fusce ac turpis a quam finibus pretium. Vestibulum rhoncus, neque nec cursus dictum, velit odio vestibulum nisi, in gravida tellus risus vitae libero. Donec dapibus volutpat tortor, eu semper leo. In tincidunt augue sed tellus fringilla dictum. Sed placerat egestas tincidunt. Cras at eleifend lacus. Pellentesque eget mi varius, iaculis tortor sit amet, volutpat tortor. Vivamus sollicitudin ligula nisi, non rutrum metus ultrices ut. Donec sagittis ipsum dolor, nec sollicitudin nisi dictum vel. Nulla libero libero, bibendum id varius nec, pellentesque sit amet magna. Praesent fringilla in enim interdum sagittis. Sed diam nulla, cursus placerat enim ut, pulvinar blandit nisi. Aliquam fringilla ut nibh et cursus. Quisque condimentum elementum tincidunt. Vivamus nec mauris id orci dignissim pellentesque ac nec massa. Pellentesque id urna at ex hendrerit porta. Nam vitae condimentum augue. Nunc ultricies euismod nisl, at laoreet magna vestibulum eget. Vestibulum viverra felis eget lorem tempus, et consectetur metus rhoncus. Cras maximus maximus tellus, vitae consequat nunc. Vestibulum massa ante, semper nec dolor quis, iaculis accumsan lectus. Praesent nec suscipit sem, quis posuere ante. Mauris sit amet sem a velit consectetur tempus. Etiam laoreet condimentum justo, a interdum lectus ultrices varius. Integer sagittis, augue quis mattis laoreet, risus erat ultricies ipsum, id maximus justo nibh in mauris. Donec ullamcorper eu enim id varius. Nam porta justo sed mi molestie, imperdiet condimentum turpis facilisis. Curabitur quis ipsum et dui pretium porttitor. Suspendisse egestas ex ac orci egestas, et ornare felis ultrices. Aliquam massa leo, semper eu viverra quis, finibus et diam. Suspendisse potenti. Nam pretium justo id blandit condimentum. Donec vel justo et odio rutrum consectetur efficitur ut quam. Nam semper est leo, id dictum magna vehicula id. Proin eu eros mollis, faucibus felis at, facilisis nisi. Etiam a massa dictum, sollicitudin arcu eu, tempus neque. Duis molestie urna est, in malesuada sem feugiat vel. Duis ut laoreet ligula. Donec eleifend arcu eu lobortis faucibus. Integer id egestas ex. Suspendisse a leo iaculis, rhoncus nisl ac, cursus odio. Sed elementum dictum elit, quis iaculis sem facilisis eu. Curabitur vel tincidunt ante. Aliquam suscipit justo non porttitor dignissim. Maecenas hendrerit pulvinar ante ac convallis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam ornare ipsum enim, non fermentum ante fringilla ut. Fusce a accumsan lorem, sed sodales justo. Mauris gravida sodales mi, dignissim volutpat diam tincidunt eget. Maecenas molestie viverra consectetur. In varius nisl quis malesuada fermentum. Sed ante velit, tincidunt sed velit ut, ultricies cursus turpis. Quisque auctor non turpis id posuere. Cras ullamcorper tristique nisl id malesuada. Suspendisse commodo tortor a felis pulvinar hendrerit. Maecenas ut diam iaculis, egestas nulla et, accumsan neque. Morbi justo turpis, maximus quis fermentum vitae, efficitur nec purus. Sed vitae nibh ultricies, scelerisque elit at, finibus mi. Fusce vitae elementum elit. Vivamus quis ligula cursus, venenatis enim quis, bibendum nulla. Mauris nec velit sit amet mauris vestibulum consequat eu et elit. Nunc elementum tincidunt nibh id fringilla. Vestibulum quis eros semper, elementum nulla et, tincidunt sapien. Curabitur et metus molestie, convallis nisi sit amet, malesuada lorem. Etiam facilisis tincidunt turpis nec cursus. Nullam fermentum in nisl quis auctor. Sed luctus sit amet mi a mollis. In vehicula felis sit amet tempus elementum. Donec commodo viverra lobortis. Praesent dictum euismod urna ac aliquet. Phasellus facilisis rhoncus augue, quis interdum nunc rhoncus eget. Aliquam condimentum lectus sit amet ligula mattis, ac ornare sem fermentum. Suspendisse lorem massa, congue ac libero eu, auctor congue nisl. Sed rhoncus venenatis libero, varius sagittis eros tempus vel. Morbi eu sollicitudin lorem. Nullam tempor id ligula venenatis semper. Cras justo quam, rutrum eu lacus vel, commodo tincidunt nulla. Nam ut sollicitudin est. Interdum et malesuada fames ac ante ipsum primis in faucibus. Proin sodales turpis ut tellus accumsan ullamcorper. Proin lacinia luctus hendrerit. Mauris sagittis nulla ipsum, ut facilisis mauris ultricies id. Pellentesque iaculis sapien vitae mi euismod laoreet. Etiam molestie, tortor et tincidunt consectetur, felis ipsum condimentum libero, eget lobortis ex turpis vel nulla. Phasellus euismod, massa vulputate eleifend hendrerit, neque tortor blandit nisl, scelerisque hendrerit felis elit vel quam. Aliquam vel ligula eget nunc gravida egestas. Nunc fermentum lectus auctor nulla dictum, sit amet scelerisque eros imperdiet. Praesent laoreet dui id pulvinar dignissim. Cras et eros vestibulum, maximus ligula non, hendrerit eros. Duis consectetur ex sed rutrum convallis. Vivamus eget libero ac ligula imperdiet eleifend nec quis velit. Pellentesque quis turpis lacus. Phasellus vulputate a turpis eu pretium. Mauris in sapien interdum, bibendum nisl sit amet, mollis nisi. Aliquam bibendum, eros id ultricies blandit, nibh metus convallis enim, eu aliquet velit libero non elit. Suspendisse laoreet gravida luctus. Vestibulum rutrum magna at arcu sodales malesuada. Ut pretium tellus metus, non elementum leo varius eu. Ut at purus eu nisi laoreet gravida. Vivamus lorem arcu, gravida et arcu vel, volutpat viverra felis. Vivamus hendrerit convallis mattis. Vestibulum non lacus nec tellus hendrerit congue sit amet id sem. Phasellus a nisi elementum libero pellentesque ullamcorper bibendum vitae ipsum. Aenean at mauris arcu. Proin luctus pulvinar efficitur. Nulla varius mauris arcu, ac sagittis ipsum auctor vel. Nullam arcu neque, rutrum sed luctus a, imperdiet ut purus. Etiam interdum, nunc a scelerisque elementum, dui nibh tincidunt lectus, at fermentum arcu lorem sit amet ligula. Praesent at mauris eleifend, scelerisque magna ut, commodo enim. Nulla dui mi, fringilla eu venenatis et, commodo eget dolor. Curabitur blandit odio vitae risus sagittis, sed finibus felis commodo. Pellentesque tempor augue ut sagittis porttitor. Phasellus eget molestie felis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In vulputate augue vitae nibh sollicitudin, eget vehicula ligula pulvinar. In efficitur ornare viverra. Donec imperdiet dictum quam, vitae blandit leo porta vitae. Pellentesque pulvinar tempus mi ultricies iaculis. Fusce et ante sem. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam elit dui, ultrices quis ultrices vel, dapibus et nisl. Nullam et sollicitudin purus. Aenean in tristique libero. Pellentesque varius accumsan dui eget rhoncus. Sed dictum neque nunc, suscipit vulputate mi dapibus vitae. Donec faucibus, tellus ac aliquet tincidunt, est mi iaculis eros, quis rutrum enim enim sit amet mi. Sed quis euismod erat. Proin lorem sem, pellentesque nec cursus sed, congue a sem. Proin odio felis, rutrum eu nisi elementum, lacinia tempor justo. Nullam sit amet libero nec augue blandit iaculis. Suspendisse vehicula, lacus sit amet dictum efficitur, eros ante auctor metus, et tristique lorem nulla sed sapien. Aliquam ut sem blandit, facilisis nulla ut, congue est. Suspendisse potenti. Curabitur aliquet eros quis dictum placerat. Integer malesuada rhoncus pretium. Aliquam tempor accumsan nisi, eu luctus felis pulvinar a. Quisque pretium nunc tellus, sed finibus diam dictum vitae. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ante enim, consectetur et cursus at, lobortis eget nulla. Nulla facilisi. Proin sit amet erat quis dui iaculis laoreet. Fusce interdum, magna quis porta suscipit, dolor purus porta ipsum, quis congue lorem diam sed leo. Vestibulum semper, odio eu lobortis scelerisque, dui urna interdum erat, at elementum augue lacus pharetra ex. Aenean sapien quam, interdum porta orci efficitur, pharetra iaculis metus. Maecenas magna augue, dapibus vitae semper in, suscipit ac mi. Maecenas sed ipsum ut mauris pellentesque cursus vel eget leo. Duis aliquam lacus ut maximus pulvinar. Cras vitae dolor nec dui venenatis imperdiet. In nec mauris elit. Proin tincidunt euismod iaculis. Aenean tristique scelerisque semper. Donec in ligula sem. Aenean blandit nisi non ligula accumsan, ac euismod sapien dignissim. In molestie, leo malesuada suscipit ultricies, diam turpis auctor mauris, ut sodales nibh enim imperdiet magna. Maecenas vitae ultricies elit. Duis tincidunt lectus a ex tempor, ut ultricies ex vehicula. Aenean laoreet, augue at lacinia condimentum, massa justo maximus nibh, vel faucibus ante turpis ut mauris. Ut ut mattis sem, vel dictum neque. Pellentesque ut commodo felis, ac varius urna. Suspendisse a lectus egestas, congue lectus ac, bibendum odio. Integer id hendrerit mi. Curabitur sit amet volutpat leo, quis porta sapien. Phasellus ut luctus erat, vel egestas ex. Donec a metus faucibus, pulvinar metus in, tristique magna. In eget ex eu orci venenatis sagittis vitae a augue. Quisque libero lorem, tempor vel auctor non, pellentesque vel massa. Suspendisse sit amet ante justo. Sed auctor neque posuere hendrerit lacinia. Mauris rhoncus lobortis neque sit amet placerat. Etiam neque nunc, malesuada id felis ornare, convallis tristique mauris. Integer condimentum nulla id urna ullamcorper maximus. Praesent elit nibh, vulputate eu mollis vitae, tincidunt vitae lacus. Curabitur consequat metus sodales sapien posuere, nec molestie enim pulvinar. Nulla ligula dolor, varius a ligula at, semper vestibulum nisl. Duis interdum aliquet neque at volutpat. Nunc turpis libero, ullamcorper efficitur mauris ac, condimentum dapibus urna. In non vulputate justo. Nunc laoreet, sem ut mollis auctor, dui purus mollis sapien, sed ornare justo lectus sed metus. Aliquam dignissim ultricies sodales. Sed ut hendrerit quam. Vivamus eget dolor vehicula, pellentesque lectus in, condimentum erat. Donec lacinia vel dolor nec viverra. Sed sodales, massa sit amet finibus sagittis, ligula dui tincidunt purus, sed dictum nibh purus sit amet mi. Maecenas ac sodales mauris. Nunc tincidunt mauris nibh, condimentum commodo augue sollicitudin nec. Pellentesque suscipit, elit quis feugiat pellentesque, sapien metus pharetra sem, vel egestas nibh ligula imperdiet odio. Nullam semper a nibh ac dapibus. Sed accumsan magna commodo nunc volutpat lobortis. Sed risus elit, dignissim sed metus ac, sagittis eleifend nulla. Praesent commodo risus et urna lobortis mattis. Nunc pretium malesuada lectus non faucibus. Mauris pharetra nisi sapien, id viverra orci bibendum euismod. Curabitur sodales mi ut rhoncus cursus. Proin consectetur mi quis convallis sagittis. Aenean et semper nunc. Aliquam feugiat dignissim condimentum. Aliquam sed sollicitudin lorem, in molestie dolor. Vestibulum rutrum suscipit elit a volutpat. Nunc purus libero, suscipit vitae lorem in, bibendum feugiat neque. Fusce in pulvinar neque. Aenean a lobortis quam, rhoncus tempus leo. Phasellus posuere nibh a cursus consequat. Donec rutrum tincidunt nisi, vitae porttitor magna. Ut in nibh rhoncus, convallis urna sed, tristique sem. Vivamus molestie libero at mi dictum, non vehicula arcu ultrices. Praesent mollis purus urna. Nullam eget laoreet neque. Vestibulum consequat eu elit vel tincidunt. Vivamus sagittis arcu vitae malesuada cursus. Proin cursus urna quam, sed imperdiet risus bibendum non. Pellentesque vitae vehicula mi. Cras faucibus nulla vel lorem imperdiet malesuada vel consequat diam. Aenean vestibulum ac magna eget efficitur. Suspendisse vitae consequat ipsum. Sed mattis molestie lorem, at sollicitudin libero viverra eu. Maecenas mattis, lorem sed fermentum porta, ex dolor vulputate nisl, eget venenatis velit mauris vitae leo. Donec in vulputate ex. Morbi et nunc non lacus imperdiet luctus posuere sed elit. In pellentesque facilisis quam at fermentum. Aliquam malesuada placerat ligula. Praesent justo enim, placerat in est at, mattis condimentum sem. Praesent eu viverra nibh. Ut fringilla sem porttitor tellus accumsan, eu euismod odio porttitor. Praesent nec tincidunt arcu. Quisque posuere laoreet leo. Vestibulum varius ac ipsum at viverra. Donec gravida mollis metus, ut ultrices libero rutrum ac. Nam auctor augue a quam egestas mattis. Mauris vel diam non leo malesuada feugiat ultricies ut nisi. Proin tempor sollicitudin tortor sit amet suscipit. Proin sed elementum nunc. Nunc a aliquam urna. Mauris facilisis nisi eu congue ullamcorper. Proin risus tellus, vehicula ut rhoncus sit amet, consectetur in turpis. Nulla eget velit ut dui venenatis auctor ac eu ipsum. Suspendisse potenti. Sed magna metus, accumsan at sapien sed, rhoncus scelerisque augue. Mauris condimentum lobortis ante, eget dictum turpis elementum fermentum. Quisque rhoncus dolor eget felis gravida, id vehicula mi pellentesque. Morbi blandit malesuada rutrum. Duis enim purus, fermentum lobortis urna eget, rutrum congue sem. Cras lectus tellus, tincidunt et ipsum sed, sagittis rhoncus nibh. Mauris vulputate, mi et pulvinar dictum, diam arcu dignissim massa, non euismod augue tellus nec tortor. Nulla facilisi. Nunc porttitor ornare risus, id dignissim justo gravida et. Vestibulum eleifend, nisl non rutrum iaculis, elit augue porta magna, at imperdiet lectus sem et nisi. Donec lacus mauris, commodo nec turpis ullamcorper, condimentum eleifend mi. Integer sed nunc vel ex molestie consectetur eget vitae nisi. Cras quis enim erat. Quisque cursus magna ex, at vehicula risus tempor et. Aenean ornare, magna eu finibus bibendum, quam tortor tincidunt justo, eget eleifend eros mi quis purus. Mauris lacinia auctor semper. Nunc rhoncus laoreet molestie. Sed pharetra sapien id pulvinar interdum. Sed viverra diam mauris, at rutrum neque luctus sed. Phasellus mollis commodo turpis, sit amet aliquet risus luctus eu. Praesent eu molestie ante, a gravida leo. Nunc iaculis mollis nulla. Nulla facilisi. Sed faucibus placerat eros quis condimentum. Phasellus egestas justo risus, ac sagittis ligula porttitor et. Praesent molestie enim at turpis pharetra, vel gravida mi tincidunt. Suspendisse sem neque, consectetur sed dictum eget, laoreet quis arcu. In tempor risus mi, id elementum tortor vestibulum id. Aliquam dignissim venenatis leo id luctus. Sed aliquam imperdiet mauris, ac porttitor purus efficitur sed. Ut sit amet tempor urna, dictum interdum est. Aliquam vitae mi eu risus elementum fringilla et nec erat. Donec lobortis massa nunc, commodo mollis mi congue in. In ullamcorper nisl nibh, vel imperdiet felis consectetur eget. Curabitur laoreet, arcu quis semper ultricies, est odio fermentum nibh, id consectetur dui nibh et sem. Aenean mollis volutpat justo, non condimentum nulla porttitor eu. Morbi eu scelerisque lorem. Praesent varius tempus ante, eu ullamcorper lectus pretium pretium. Sed eu euismod mauris. Nullam vitae purus eleifend purus scelerisque feugiat vitae id velit. Cras semper diam urna, quis pellentesque odio sodales sit amet. Cras dolor diam, ultrices venenatis purus id, pulvinar ultricies nunc. Mauris vitae diam blandit, pellentesque turpis nec, sodales justo. Maecenas sagittis eu justo eu pretium. Vestibulum et enim commodo, commodo sem non, malesuada erat. Quisque vitae rutrum tortor. Nam cursus a eros eu gravida. Maecenas et nisl porttitor, malesuada lorem et, commodo quam. Nulla accumsan pulvinar justo, at condimentum enim consequat maximus. Vestibulum tristique fermentum quam quis congue. Vivamus vel lorem auctor mi sagittis dictum vel eget elit. Nunc eget accumsan mauris. Pellentesque porta imperdiet nunc tempus scelerisque. Phasellus suscipit interdum lectus vel malesuada. Aliquam porttitor hendrerit velit et ullamcorper. Maecenas leo ipsum, convallis id mauris id, bibendum interdum odio. Maecenas at risus risus. Donec vel sem nisi. Praesent convallis tortor risus. Pellentesque mollis nisi ac malesuada convallis. Vivamus efficitur sagittis nulla, quis sollicitudin diam. Donec magna erat, faucibus ut bibendum ac, mollis eu lacus. Proin malesuada leo in sem gravida ultrices. Cras pretium tortor eget massa tempus, id hendrerit elit vehicula. Etiam rutrum nulla eget lacus ullamcorper consectetur. Mauris luctus porttitor neque ac eleifend. Quisque fermentum at felis ac tincidunt. Aenean sollicitudin libero eget arcu hendrerit faucibus id in lectus. Fusce laoreet turpis vel hendrerit tincidunt. In facilisis pretium vehicula. Nullam urna est, luctus eget tellus at, vestibulum tempor nibh. Aliquam luctus diam non massa ullamcorper commodo. Nulla suscipit magna vitae vehicula dictum. Suspendisse iaculis enim nec nisi sagittis suscipit. In tincidunt neque sed dui dapibus, a laoreet lectus pretium. Nam malesuada eros vitae rhoncus aliquam. Donec tincidunt metus ut elit fermentum consectetur. Phasellus eu ipsum neque. Vivamus tempor auctor leo. In quis laoreet nisi, non consequat nulla. Proin finibus lorem dictum erat condimentum, et tincidunt elit molestie. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce nec gravida libero, eu rhoncus lorem. In massa diam, tristique a efficitur sed, pulvinar at nisi. Cras id tortor vel velit euismod aliquam. Curabitur quis euismod nulla. Donec porttitor nulla nec aliquet pellentesque. Sed eget mauris eu lacus ornare gravida. Sed at finibus tellus. Donec ut condimentum neque. Nam eu sapien in arcu faucibus placerat vel non sem. Aliquam aliquam rutrum felis, a porta justo convallis sed. Praesent ac tincidunt quam. Vestibulum eros nisi, aliquam eget fringilla non, tristique eget ex. Donec finibus urna ut sapien sodales maximus. Etiam mauris ex, dictum non lobortis non, laoreet ac risus. Maecenas pretium sed dolor luctus volutpat. In iaculis, sapien vel pellentesque tempus, nibh leo lobortis urna, vitae maximus urna ipsum ac ex. Nulla facilisi. Donec enim magna, mattis nec nisl id, dapibus molestie velit. Aliquam consequat libero vestibulum fringilla rhoncus. Aliquam at tempus felis, in eleifend massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus libero eros, suscipit tempus sem eu, egestas auctor lectus. Phasellus eu mollis quam. Nullam id dignissim mauris. Aenean vel fringilla arcu. Phasellus at risus et ante laoreet faucibus. Donec a velit viverra, eleifend ipsum sit amet, suscipit ante. Phasellus varius tortor ac metus mattis bibendum. Aenean aliquet rhoncus euismod. Suspendisse pellentesque sagittis tortor. Vestibulum ut felis tincidunt, finibus justo a, porttitor purus. Curabitur nec sapien efficitur, dapibus eros posuere, venenatis orci. Curabitur mollis nunc vitae dolor bibendum sodales. Integer malesuada neque erat. Etiam at leo viverra, dapibus lectus in, porta ante.

          ' + + '

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque faucibus ante ut finibus malesuada. Curabitur eu vehicula nibh. Quisque sit amet magna quis diam gravida consectetur. Sed at dui tristique, tempor ligula et, dapibus diam. Etiam a lorem sollicitudin, pellentesque ligula vel, ultrices turpis. Quisque commodo nunc purus, sed accumsan magna finibus ac. Fusce ut lacinia metus, tincidunt tristique magna. Phasellus quis elementum leo. Duis non velit ultricies, vehicula nisi sit amet, tempus magna. In sit amet fringilla lorem. Quisque sem sapien, facilisis quis lorem at, sollicitudin tempus nunc. Sed a fringilla urna, sed volutpat justo. Nunc et velit felis. Aliquam tincidunt a orci eget dapibus. Praesent rhoncus augue nec dolor vehicula tempor. Ut pulvinar sed lorem sit amet iaculis. Nunc blandit sagittis odio non mattis. Duis eget magna eu elit fringilla viverra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In euismod nulla ligula, quis dictum odio blandit non. Nunc suscipit consectetur pretium. Donec eleifend nulla pretium ipsum maximus, nec condimentum magna posuere. Suspendisse sollicitudin felis purus, eget iaculis ipsum tempor tincidunt. Vivamus iaculis at est nec laoreet. Vivamus iaculis vehicula molestie. Phasellus magna arcu, pellentesque molestie dignissim ac, congue ac lacus. In id lorem dolor. Etiam ultrices fermentum hendrerit. Etiam posuere lacus nibh, eu maximus magna vulputate eu. Curabitur non molestie sem. Proin dapibus gravida vehicula. Suspendisse porttitor, risus et imperdiet pulvinar, ante felis mollis ante, a sodales dui orci id quam. Proin quis lorem ante. Donec mollis metus nibh, ac feugiat nisi tempus placerat. Aenean quis est lorem. Suspendisse scelerisque metus vel orci maximus tempus. Vivamus nec turpis velit. Ut justo nunc, hendrerit sit amet nisl feugiat, sollicitudin congue metus. Fusce vestibulum laoreet imperdiet. Morbi augue nisi, viverra vitae scelerisque ut, tincidunt sit amet turpis. Proin lacus dui, pharetra blandit tincidunt ut, bibendum vel mauris. Morbi ultrices, felis in blandit tempus, odio leo semper mi, non sagittis lectus erat vel nibh. Donec malesuada massa eu elit rhoncus vulputate. Morbi quis lorem elit. Curabitur ac nisl in lorem malesuada finibus. Morbi molestie id quam consectetur facilisis. Donec congue quam eget leo interdum tristique eu vitae felis. Aliquam in sem ut lorem mollis maximus eu nec velit. Nam viverra eros vitae felis tempor, eget eleifend massa mattis. Proin volutpat luctus risus sit amet pellentesque. Donec efficitur vel enim sit amet rutrum. Sed ac ligula sed velit finibus commodo. Suspendisse potenti. Nam in aliquet ligula, sit amet imperdiet nisi. Cras sed rhoncus lorem. Nunc finibus viverra nulla et lobortis. Aenean sed sapien molestie, pellentesque massa sed, volutpat ipsum. Integer id interdum dolor. Aliquam eget tristique ex, in elementum mauris. Donec vitae lacinia lacus, sit amet ullamcorper ipsum. Curabitur et faucibus sem, eu bibendum felis. Cras lacinia ante sit amet dolor pulvinar feugiat. Integer venenatis magna et purus accumsan, in pellentesque felis vestibulum. Cras vulputate leo metus, ut tristique nunc faucibus a. Fusce euismod libero sed massa feugiat pellentesque. Sed a tincidunt eros. Integer ac nibh blandit, pellentesque lectus quis, pretium metus. Donec a tincidunt urna, non fringilla dolor. Nunc dictum auctor tortor eget facilisis. Nunc facilisis turpis sed enim lacinia, in tristique mi dapibus. Mauris suscipit velit sit amet augue iaculis, at congue felis semper. Mauris nec felis feugiat, scelerisque sapien non, egestas dolor. Curabitur pellentesque, nibh sit amet egestas tincidunt, erat nulla fermentum tortor, et dictum est diam at magna. Aliquam erat volutpat. Sed blandit varius enim, non dapibus diam. Aenean malesuada elit dui, vitae pellentesque turpis accumsan eget. Sed laoreet dui vel arcu blandit luctus. Vestibulum feugiat commodo sem in eleifend. Sed elementum ut nisi a hendrerit. Quisque at lobortis erat, a iaculis risus. Ut felis dolor, eleifend ut nisl at, convallis venenatis dolor. Nullam sit amet tempus sem. Phasellus id ipsum nulla. Aenean consequat consectetur bibendum. Maecenas laoreet lacus vel sagittis ultricies. Sed mollis egestas semper. Cras diam urna, vestibulum ut mattis sed, eleifend vel diam. Curabitur eget risus ut ligula pharetra eleifend eu eu augue. Nam ornare ex ac urna porttitor pulvinar. In faucibus euismod lacus eget sagittis. Sed ac velit mauris. Sed metus est, accumsan at lacus eget, interdum cursus est. Sed in lacinia orci. Donec vitae sapien tristique, placerat ipsum vel, interdum massa. Praesent enim est, rhoncus eget gravida vel, lacinia nec tellus. Vivamus nec dui non sem molestie molestie. Nam ac maximus lorem, a pharetra odio. Aliquam erat volutpat. In pretium consectetur eros, consectetur lacinia enim sollicitudin vel. Donec varius, odio nec fermentum elementum, nisi ex pretium nulla, eget accumsan risus velit ut enim. Sed sodales arcu diam, quis hendrerit sapien rhoncus quis. Donec malesuada ex sodales mauris faucibus bibendum. Nulla non eleifend ex. Mauris vitae blandit diam, sed aliquam lacus. Suspendisse quis erat in nulla imperdiet porttitor eget non nibh. Ut enim nunc, pharetra sit amet libero eget, ornare finibus velit. Nunc odio sapien, pretium imperdiet auctor at, semper eget libero. Suspendisse potenti. Sed tellus tortor, lobortis eget mi eget, consectetur sollicitudin justo. In hac habitasse platea dictumst. Suspendisse eget sem ut eros sagittis sagittis. Nullam a ex ornare, scelerisque dui sit amet, porta libero. Duis bibendum auctor neque ac efficitur. Curabitur vitae diam at lorem placerat cursus. Integer mollis vestibulum nisl sed cursus. Nam rhoncus mi vel aliquet tempus. Integer volutpat iaculis turpis, non egestas libero accumsan quis. Quisque consectetur libero eu pellentesque hendrerit. Nullam condimentum orci eu nunc varius, et egestas diam hendrerit. Aliquam consectetur rutrum neque, non porta elit maximus sit amet. Integer vel volutpat metus. Ut tincidunt vestibulum mollis. Duis est mauris, feugiat nec est eget, luctus faucibus dolor. In dui odio, commodo eget ipsum elementum, viverra pellentesque odio. In tristique scelerisque turpis, sed laoreet mi facilisis nec. Suspendisse luctus quam mauris, sed vulputate metus molestie eu. Maecenas sit amet dolor quam. Donec enim magna, scelerisque in ipsum sit amet, posuere mollis arcu. Sed aliquet tortor sit amet dapibus consectetur. Vivamus non imperdiet sapien. Nam auctor tincidunt lectus, non ultrices velit cursus nec. Ut vel aliquam leo. Mauris vulputate nulla sed massa rutrum imperdiet. Sed pellentesque mi ipsum. Morbi tincidunt id orci hendrerit aliquam. Aliquam tempor nibh in dignissim efficitur. Nullam ut lectus facilisis, ullamcorper nulla quis, faucibus ex. Donec eros nunc, facilisis non ipsum non, consectetur elementum nibh. Pellentesque eleifend venenatis turpis, non blandit ex interdum at. Nunc dictum placerat est, a sodales felis vestibulum non. Aenean in laoreet elit. Sed luctus sed ex eget viverra. Etiam porttitor, arcu condimentum sollicitudin faucibus, sem metus laoreet metus, non pellentesque augue odio quis purus. Mauris commodo libero vel erat ullamcorper viverra. Sed vitae pharetra augue. In laoreet nisi at varius dictum. Aliquam et lacus a diam dapibus tristique. Nunc luctus, nisi vitae pulvinar cursus, quam erat ullamcorper velit, ut feugiat tellus metus a neque. Etiam id quam vel elit pulvinar tincidunt. Vestibulum hendrerit, leo et egestas aliquet, diam tellus pellentesque sapien, id fringilla velit tellus vel dui. Proin tristique facilisis sem, non lacinia lectus interdum ac. Morbi vel dignissim eros. Curabitur at elit leo. Vivamus aliquet ex quam, non fringilla justo sollicitudin et. Quisque elit lacus, gravida sed viverra in, porta quis enim. Phasellus orci elit, iaculis vel finibus eu, rhoncus ac ante. Etiam non leo sit amet lacus sagittis eleifend. Nulla malesuada et massa quis ultricies. In id tellus neque. Etiam non erat sit amet erat consequat commodo. Pellentesque lobortis mauris ultrices massa placerat, id sollicitudin nisi pretium. Praesent a tortor ut nisi malesuada fringilla eget nec justo. Nullam varius, sem quis egestas pretium, purus magna posuere sem, et porta ipsum nibh quis lectus. Nulla pretium hendrerit nulla ut dapibus. Vivamus nec aliquam lorem. Vivamus molestie convallis turpis, id posuere est. Sed venenatis consectetur volutpat. Nunc imperdiet lectus vel risus tempor imperdiet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed magna velit, faucibus quis ultricies sit amet, molestie in magna. Nulla posuere molestie dolor ut pellentesque. Integer ullamcorper accumsan nibh. Morbi feugiat mollis turpis, vel fermentum mi iaculis ac. Nullam sed nisl venenatis, sodales nisi ut, efficitur odio. Morbi et finibus tellus, et accumsan tortor. Etiam eu elit in arcu laoreet molestie. Mauris ac malesuada ex, sed sagittis enim. Vivamus suscipit sit amet diam nec sodales. Curabitur et mi congue, malesuada est in, dapibus tortor. Duis porta, lectus et eleifend vulputate, ex magna condimentum odio, eu rhoncus libero magna vel justo. Fusce aliquet, leo ut faucibus efficitur, dolor nisl eleifend odio, blandit fermentum ante nisi at felis. Cras eu ante non augue malesuada scelerisque. Integer sodales nibh in ex tristique rhoncus. In hac habitasse platea dictumst. Morbi ullamcorper libero sed aliquet condimentum. Nulla sed purus vel nisl ornare placerat nec ut sapien. Donec scelerisque arcu ligula, sed sodales lacus vestibulum accumsan. Aenean in egestas urna. Fusce efficitur vel leo id convallis. In hac habitasse platea dictumst. Quisque at pulvinar ipsum. Pellentesque suscipit quis est eu imperdiet. Fusce lacinia at mi nec malesuada. In rutrum aliquam ullamcorper. Donec magna urna, laoreet eget arcu sed, imperdiet molestie diam. Donec hendrerit tristique mauris, et pellentesque ex euismod sed. Fusce eu ligula sagittis, pharetra felis id, vulputate eros. Vivamus pharetra nec leo nec volutpat. Curabitur eu fermentum velit. Suspendisse egestas aliquam ante eu congue. Proin eget euismod ipsum. Mauris nibh enim, sodales porttitor mi a, pellentesque tincidunt est. Fusce fermentum dignissim porta. Curabitur vel fermentum dolor. Aliquam bibendum luctus metus. Maecenas ut dolor lobortis odio rhoncus mattis vel sed purus. Sed viverra lacus non tempus porttitor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla lobortis rutrum placerat. Maecenas lectus risus, molestie vitae diam in, lacinia iaculis mauris. Pellentesque volutpat ligula nibh, in laoreet quam maximus sit amet. Curabitur non consequat est. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam lorem felis, mattis dictum iaculis a, suscipit eu lectus. Suspendisse potenti. Vivamus nunc quam, mattis a augue sodales, condimentum efficitur est. Donec sit amet nulla mi. Nam sit amet turpis laoreet, varius augue et, dapibus justo. Vestibulum ut nunc consequat, dictum diam vitae, facilisis nisl. Aliquam pellentesque tempor consequat. Etiam laoreet nisi at dapibus tincidunt. Phasellus in ante nibh. Fusce vel dui luctus, pretium sapien id, finibus tortor. Phasellus non vestibulum metus. Sed at convallis mauris, ut sollicitudin diam. Interdum et malesuada fames ac ante ipsum primis in faucibus. Curabitur cursus, lectus in mollis eleifend, lacus ante luctus dolor, id euismod massa augue ac eros. Quisque luctus lobortis ex, ac auctor mi interdum nec. Maecenas non scelerisque sapien. Fusce eleifend ac tellus vitae venenatis. Nunc posuere hendrerit risus nec condimentum. Donec non auctor lorem. Vestibulum et vehicula purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum imperdiet quis sem sed pellentesque. Nunc massa libero, maximus eu interdum in, ultricies id urna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi facilisis id leo et porttitor. Integer vel feugiat nulla. Vivamus malesuada tortor ac nulla finibus vulputate. Nam pretium felis at sem eleifend, dignissim lacinia enim rhoncus. Mauris ante diam, volutpat in fermentum id, volutpat ac risus. Suspendisse et ex nec ante eleifend rutrum eu eget augue. Fusce mollis diam ut nibh auctor sagittis. Donec sed nunc vitae neque bibendum suscipit. Nam placerat vel nisl quis luctus. Duis egestas neque in purus faucibus, eget porta dolor feugiat. Mauris vitae neque nec tellus dictum pulvinar sed a lacus. Fusce sollicitudin tellus ut tincidunt rutrum. Vestibulum suscipit erat a tortor tristique, et posuere nibh interdum. Suspendisse pharetra imperdiet volutpat. Vivamus tincidunt risus a pharetra viverra. Nunc non commodo diam, sit amet tincidunt quam. Duis hendrerit est nec viverra faucibus. Morbi auctor, nisl id pharetra placerat, turpis risus porta ipsum, sed lobortis diam eros vel purus. In vitae purus tincidunt, porttitor quam nec, fringilla eros. Etiam a imperdiet magna. Morbi dictum venenatis diam, sed sodales purus gravida vitae. Phasellus non libero non tellus bibendum elementum. Phasellus gravida lacinia orci eu venenatis. Vivamus nunc orci, pellentesque vitae tincidunt in, tincidunt vel massa. Integer maximus sem non velit ullamcorper semper. Praesent mollis ultrices est, in volutpat turpis euismod blandit. Ut sit amet diam quam. Morbi a egestas quam. Duis at nulla sit amet ante pharetra malesuada. Donec auctor in ex quis tempor. Curabitur eget leo volutpat, condimentum felis eget, ultricies magna. Mauris id dignissim enim. Suspendisse interdum tristique elit, vitae bibendum lectus imperdiet at. Morbi sodales accumsan erat quis tincidunt. Vivamus vulputate ex posuere varius ullamcorper. In vulputate dictum lectus. Sed commodo eu urna vitae fringilla. Sed gravida erat quis sodales auctor. Fusce at luctus ante, non posuere justo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla facilisi. Suspendisse viverra, lectus in vestibulum tincidunt, nisi ipsum convallis nibh, porttitor molestie mi ex a urna. Vivamus non luctus leo. Nullam commodo nisl eget nisl finibus laoreet. Vestibulum vestibulum sollicitudin lorem, id bibendum magna tristique in. Vestibulum sit amet tincidunt purus, ut dictum tortor. Maecenas congue venenatis accumsan. Praesent tincidunt commodo leo a fermentum. Donec vulputate gravida dictum. Nulla facilisi. Morbi quam nisl, mattis quis odio id, finibus malesuada massa. Nullam in tempus nulla. Duis tempor porta consectetur. Ut sed quam suscipit, lobortis leo ut, vestibulum dui. Donec sit amet lectus a urna vulputate lacinia. Phasellus orci turpis, blandit at imperdiet tempor, suscipit at turpis. Duis ut urna eu odio tristique porttitor vel nec dolor. Fusce sed ipsum dapibus, porta metus vel, luctus libero. Phasellus metus risus, consectetur id tempus eu, consectetur non tellus. Pellentesque felis est, pellentesque in fringilla id, ornare vel lectus. Vestibulum pulvinar, lorem in condimentum bibendum, orci lectus fermentum nulla, nec malesuada elit nisi et turpis. Ut consectetur, ex facilisis euismod euismod, est justo scelerisque sem, vitae placerat felis justo a dui. Sed ut felis id odio sodales pharetra sit amet et ligula. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer vitae consequat magna, sed laoreet massa. Vivamus lobortis ligula ac varius pulvinar. Curabitur a suscipit neque. Phasellus ac quam in sem fringilla facilisis. Morbi eu odio neque. Pellentesque vehicula dictum placerat. Vestibulum at quam non justo rhoncus mollis nec at nunc. Aliquam sollicitudin molestie mauris, in mattis metus lobortis at. Sed eget nisl sit amet risus mollis rutrum vitae ac quam. Nam nec sem neque. Donec sit amet erat quis sem varius lacinia. Morbi viverra ac sapien vel fermentum. Donec in lacus ut est semper ultricies nec pulvinar purus. Morbi at tincidunt tortor. Nullam quis pulvinar quam. Sed dui eros, egestas et mi ut, viverra bibendum lorem. Vivamus mollis, massa nec commodo hendrerit, ex est vulputate dui, vitae porttitor tellus nulla in libero. Vestibulum imperdiet dolor ligula. Nunc finibus felis at velit lobortis finibus. Phasellus ut ante sodales, malesuada nulla vel, rutrum purus. Aliquam in eleifend neque, vitae imperdiet leo. Sed vitae felis mi. Phasellus risus eros, scelerisque a facilisis et, rhoncus eget massa. Vivamus ultricies sagittis ex, ut volutpat dui pulvinar nec. Vivamus eget massa at tortor tincidunt vulputate sit amet eu felis. Aliquam erat volutpat. Morbi sed ex eget mi blandit facilisis. Cras aliquet nulla justo, ut tincidunt massa pretium eget. Integer dapibus, quam a semper suscipit, risus orci vulputate enim, ac pretium lectus nisl vel ante. Cras fringilla nunc id nunc accumsan finibus. Curabitur pretium velit elementum, volutpat eros sit amet, aliquet nunc. Aliquam erat volutpat. Curabitur ut risus facilisis lorem efficitur lobortis in vitae velit. Phasellus vel volutpat ipsum, in posuere ante. Praesent tincidunt tempor sem, vitae congue tortor varius non. Nam tincidunt arcu sit amet suscipit ultrices. Nullam a viverra lectus. Curabitur risus magna, convallis ac dolor sit amet, aliquam faucibus urna. Donec mattis finibus diam a aliquet. Donec eget aliquet nisl. Aenean eu est euismod, condimentum libero id, ullamcorper tortor. Donec leo orci, elementum nec turpis at, ornare venenatis nisi. Donec cursus justo nec eros sodales, vel eleifend augue finibus. Donec malesuada ultricies sem sed fringilla. In hac habitasse platea dictumst. Praesent tempus eleifend leo, eleifend molestie nulla tincidunt nec. Donec purus libero, elementum sed lorem nec, interdum feugiat nulla. Fusce sed hendrerit tortor. In hac habitasse platea dictumst. Quisque feugiat pretium luctus. Phasellus in mauris id nibh bibendum hendrerit. Proin sem justo, rhoncus sit amet mi eget, gravida faucibus arcu. Quisque sollicitudin eu lorem sit amet congue. Vestibulum in laoreet orci. Phasellus sit amet dignissim ante, quis scelerisque lorem. Sed non maximus mauris, sed gravida libero. Duis mi nulla, gravida vitae ex faucibus, hendrerit dignissim dui. In non tempor mauris, id euismod enim. Phasellus sed elementum magna. Pellentesque et aliquam nisl. Vestibulum sed erat sed ipsum rutrum congue. Nullam ullamcorper hendrerit leo, id condimentum nibh finibus non. Proin porttitor tellus a tellus dignissim, eu dapibus ante commodo. Sed eget arcu sodales, rhoncus mauris et, ultricies dui. Morbi eget libero nibh. Aenean ullamcorper imperdiet metus, ac feugiat velit. Mauris id mi tortor. Fusce dolor erat, ullamcorper at metus eget, rhoncus malesuada neque. Praesent pellentesque nulla cursus, ornare mauris vel, sagittis ipsum. Vestibulum feugiat porttitor lorem, in placerat nisl accumsan vel. Pellentesque in lobortis nulla, ac sodales neque. Morbi pellentesque magna a hendrerit aliquam. Pellentesque commodo dapibus mattis. Aliquam ut pulvinar dolor. Cras nec sem bibendum, elementum quam ut, euismod tortor. Ut ut efficitur ipsum, ut efficitur ante. Curabitur suscipit, purus at euismod consequat, sem erat semper dolor, vel eleifend ex neque vel neque. Ut bibendum accumsan enim quis molestie. Pellentesque a interdum nunc, quis condimentum dolor. Praesent at diam pellentesque justo fringilla aliquet. Cras quis justo facilisis, vestibulum lectus id, accumsan diam. Vestibulum et magna risus. Donec iaculis mauris et mauris efficitur rhoncus. Pellentesque pellentesque justo et semper rutrum. Praesent tellus metus, volutpat ut placerat vel, porttitor nec nulla. Morbi et quam vitae lorem eleifend iaculis quis eget metus. Nunc gravida lectus tincidunt nibh pellentesque, tincidunt accumsan magna pellentesque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eu purus ac risus luctus consequat quis at nulla. Integer quis orci dolor. Vivamus elementum velit quis volutpat ultricies. Mauris vulputate risus sed quam feugiat, id scelerisque ligula auctor. Vestibulum euismod justo quis eros consectetur faucibus. Sed tristique ac tortor vel viverra. Cras consequat faucibus sapien eu finibus. Nunc vitae lacus orci. Pellentesque condimentum interdum sodales. Aenean feugiat efficitur nulla, eget auctor neque ultrices non. Praesent dapibus ut ligula sit amet dapibus. Donec eu tellus pellentesque, sollicitudin ante quis, lacinia tellus. Pellentesque tincidunt gravida ipsum non porta. Nullam venenatis commodo turpis, ut interdum risus fringilla ac. Cras quis nulla eu enim tempus pulvinar. Quisque ultricies dictum diam, et porta eros sagittis ac. Etiam sed dolor eget purus tincidunt tempor ut a sapien. Phasellus efficitur facilisis ipsum ut fringilla. Vestibulum vulputate sapien et accumsan euismod. Aenean posuere egestas turpis vel consectetur. Integer magna turpis, luctus a mattis et, mattis eu libero. In molestie interdum egestas. Aliquam aliquam quis ex ornare porta. Mauris nisi dui, posuere nec sem et, efficitur sodales justo. Sed dictum arcu tellus, eget vulputate erat faucibus eget. Nunc lectus justo, sagittis in scelerisque vitae, pellentesque malesuada nisi. Duis viverra elementum eros, ac gravida ex luctus quis. Aliquam eu lorem nisl. Nullam sagittis neque vel ornare aliquet. Sed bibendum orci et sodales tristique. Phasellus cursus volutpat tellus sit amet ullamcorper. Nullam placerat lorem eget cursus commodo. Mauris nec urna nibh. Mauris dignissim vitae urna at gravida. Sed nulla nisi, pharetra sed consequat venenatis, vehicula vitae velit. Morbi rutrum lorem finibus ligula hendrerit auctor. Duis ac quam eget sem luctus vulputate non eu est. Sed vel facilisis diam. Donec in velit quis lacus efficitur porttitor ac nec metus. Ut lacinia vestibulum quam, et euismod dolor. Nulla est arcu, semper at nisl in, malesuada porta mauris. Vivamus commodo dolor non iaculis porta. Donec ac erat finibus leo varius sagittis at suscipit libero. Praesent interdum venenatis lacus, at aliquam tellus suscipit vitae. Ut lacus lacus, vestibulum et efficitur eget, malesuada id tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque tempor elementum fringilla. Morbi mollis euismod sapien et lobortis. Cras efficitur eros eros, eu facilisis ipsum aliquam quis. Mauris a ante sed tellus molestie molestie at ac elit. Mauris sit amet libero iaculis, dignissim nunc tincidunt, imperdiet ex. In vel arcu felis. Curabitur viverra felis eget tincidunt vulputate. Nullam tempus vitae erat eu fringilla. Vestibulum est magna, vulputate ac felis ac, maximus ullamcorper lorem. Sed fermentum a mauris eu blandit. Aliquam erat volutpat. Donec finibus sagittis iaculis. Curabitur sagittis libero vitae ultricies porttitor. Vivamus vitae pretium erat. In id massa vel felis bibendum euismod sit amet non diam. Proin viverra, mi a lobortis tristique, orci lacus lacinia dolor, quis mollis est nibh eget mi. Donec gravida nibh purus, sit amet dapibus nisi pulvinar a. Mauris a nunc et lectus pharetra imperdiet. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas vitae volutpat turpis. Fusce sed feugiat massa. Nam faucibus orci nisi, non aliquet lectus auctor id. Nullam non diam lacus. Vivamus mattis arcu ac felis accumsan posuere. Vestibulum sed ullamcorper dui. Ut ex nulla, dictum sit amet nisl luctus, venenatis ultrices ex. Praesent cursus nibh ac dapibus feugiat. Suspendisse libero orci, interdum eget hendrerit non, tempus eu ligula. Integer interdum augue convallis, commodo nisl nec, auctor nulla. Praesent non elit dignissim, consequat lacus a, rutrum nisl. Phasellus convallis elit tortor, eget auctor libero bibendum nec. Aenean eget lectus id eros facilisis porta. Fusce non sagittis lacus, eget pulvinar est. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis vitae nulla ac risus ultrices euismod. Proin eu mi sodales, rutrum leo eget, pretium metus. Nunc sagittis convallis cursus. Integer ut libero sagittis, molestie purus vel, porttitor massa. Maecenas rhoncus nunc ut lacus aliquam pretium. Pellentesque scelerisque enim nec accumsan blandit. Morbi erat risus, vehicula sit amet fermentum vel, dignissim ac purus. Fusce sagittis suscipit ligula, vitae ornare dolor fringilla ac. Maecenas dignissim diam diam, id ornare augue sagittis ut. Curabitur et eros nulla. Sed blandit ex et tellus ullamcorper gravida. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam fermentum lorem porttitor, porta augue quis, maximus nulla. Sed molestie leo nisi, nec luctus orci pretium vitae. Donec faucibus augue nec sodales congue. Integer ut dolor vel arcu vestibulum feugiat. Mauris eget accumsan ipsum. Proin auctor est et dui vulputate, id accumsan quam maximus. Mauris pulvinar lorem vitae risus maximus, id dictum mi varius. Ut fringilla, nisi eu laoreet hendrerit, felis ligula tempor sapien, sit amet commodo mi ipsum nec quam. Aliquam a commodo leo. Sed fringilla pretium lectus, nec auctor orci viverra et. Nulla facilisi. Duis accumsan turpis eget molestie egestas. Morbi ullamcorper libero arcu, et facilisis augue efficitur vitae. Integer vitae volutpat lacus, in dignissim elit. Praesent ac augue nunc. Nullam eget libero maximus magna bibendum facilisis. Cras volutpat nibh rhoncus, mattis odio at, blandit neque. Sed consequat felis non malesuada auctor. Phasellus sit amet aliquet dolor. Nam pellentesque at magna sit amet convallis. Suspendisse eleifend magna eros, quis molestie est fringilla ut. Proin blandit gravida sapien, id maximus eros rutrum nec. Duis cursus tristique egestas. Nunc malesuada arcu interdum nibh feugiat, nec placerat tellus mollis. Nulla placerat, mauris eget porttitor malesuada, metus libero auctor diam, ac sodales elit justo vitae dui. Sed congue massa in vehicula egestas. Duis iaculis est maximus tortor malesuada, sit amet ullamcorper massa tempor. Duis venenatis nisl nec nulla ultrices tempor. Aliquam auctor, quam vel imperdiet posuere, urna est sollicitudin nisl, mattis tempus quam eros ac mi. Proin aliquet odio at purus consequat efficitur ac nec augue. Proin ac metus in massa malesuada ornare. Proin a dui tortor. Nam molestie elit ut urna fringilla, id volutpat metus molestie. Nam cursus mattis tincidunt. Ut risus enim, imperdiet quis semper sed, pellentesque at purus. Suspendisse tempus porta tortor, ut condimentum justo fermentum nec. Quisque vitae dapibus nisi. Morbi dolor nisi, vulputate quis leo a, consectetur consectetur elit. Integer auctor sapien vel augue euismod placerat. Sed quis lacus est. Sed tincidunt nunc vel ultrices sodales. Fusce tempus egestas fringilla. Etiam egestas volutpat nunc in commodo. Nullam id facilisis magna. Vestibulum quis quam magna. Nulla gravida luctus sapien, vel pharetra turpis maximus quis. In hac habitasse platea dictumst. Morbi arcu magna, ornare vitae lacinia a, finibus nec urna. Sed et rutrum justo. Duis tincidunt purus orci, nec lobortis enim molestie vitae. Phasellus sed nisl quis lacus accumsan consectetur. Etiam luctus purus dui, ut vestibulum turpis eleifend ut. Nullam at diam et sem euismod varius pharetra ut urna. Maecenas finibus fringilla turpis, at semper lacus luctus sed. Nulla a odio vitae sem vestibulum euismod. Sed in eros arcu. Phasellus pharetra gravida sem, ut bibendum lacus rhoncus ac. Vivamus eleifend nec urna eget euismod. Maecenas et rhoncus nibh. Donec commodo augue felis, vel laoreet orci lacinia vitae. Nullam ut imperdiet elit. Praesent mi turpis, varius eget justo vel, tristique commodo nibh. Suspendisse tellus erat, interdum ac pellentesque sit amet, venenatis ac felis. Fusce sagittis magna velit, non pharetra urna sollicitudin sed. Donec a viverra massa, at cursus neque. Nam pretium sit amet risus ac volutpat. In lacinia, eros eu malesuada facilisis, eros neque porta nisi, in fermentum lectus nisl consequat leo. Sed eleifend, magna ut convallis fermentum, urna libero vehicula arcu, ut tempus quam orci ut nibh. Cras rutrum ex in hendrerit imperdiet. Integer egestas vitae elit fringilla fringilla. Proin ut lobortis massa. Phasellus commodo, ligula molestie lobortis viverra, metus odio porta ex, eu elementum neque quam id metus. Maecenas sollicitudin justo tristique efficitur accumsan. Pellentesque quis magna non nulla sodales semper sed eu dolor. Morbi urna magna, facilisis in enim ac, hendrerit rhoncus sapien. Sed et augue sit amet libero imperdiet accumsan at eget enim. Nullam ac finibus nisi, et viverra lorem. Phasellus egestas viverra lacus et scelerisque. Quisque et porttitor augue. Nulla facilisi. Vestibulum tincidunt eleifend faucibus. In fringilla aliquet iaculis. Proin eu bibendum mi, sit amet faucibus nulla. Pellentesque pulvinar lacus id augue feugiat facilisis. Suspendisse ac nunc tincidunt elit egestas interdum id vel nisi. Cras eu condimentum elit. Mauris eu arcu dignissim mauris condimentum auctor a sit amet ipsum. Integer euismod sit amet est sed sagittis. Praesent fringilla et mi vitae porta. Integer eget massa at elit venenatis pretium. Sed sit amet maximus enim. Fusce justo sapien, molestie vel augue vel, suscipit consectetur augue. Pellentesque tempor eu libero sed aliquet. Aenean vel consequat diam, at vulputate ex. Proin tristique ligula ut tempor efficitur. Phasellus sollicitudin nunc sit amet pulvinar imperdiet. Cras consequat lobortis urna, eu faucibus justo cursus ut. Fusce lectus nulla, fermentum vel nisi id, rhoncus aliquet leo. Fusce ac leo imperdiet, luctus elit vel, lobortis nibh. Sed in euismod mi. Aliquam rutrum sed nisi eget tincidunt. Donec quis sapien non tellus faucibus sollicitudin. Etiam luctus eget dolor ac fringilla. Donec lectus mi, ultrices vitae felis ut, blandit facilisis sapien. Mauris euismod erat sodales, tristique risus non, ultrices lacus. Curabitur tempor hendrerit elit. Etiam ac tempus sem, quis eleifend nulla. Curabitur commodo efficitur lorem in pretium. Nam dolor enim, feugiat eget leo ut, commodo auctor mi. Nullam vestibulum, justo a volutpat tempus, odio risus cursus nulla, vitae aliquet metus urna id tellus. Proin facilisis a sapien sed ultricies. Morbi efficitur quam in euismod ornare. Suspendisse aliquet leo sed porta dignissim. Curabitur id gravida purus. Praesent eu nunc a nibh accumsan tincidunt. Nam accumsan ultricies ligula et ullamcorper. Integer dapibus lobortis mauris, non pharetra massa sollicitudin eu. Aenean sagittis risus ac augue cursus, pretium commodo nisi bibendum. Donec quis diam eu tellus interdum dignissim. Duis ante nulla, aliquet quis risus sed, aliquet luctus arcu. Duis ultrices ac libero ut lacinia. Donec iaculis ante quis aliquet volutpat. Cras eu orci dui. Mauris sollicitudin turpis a orci faucibus bibendum. Sed varius consectetur lectus nec ornare. Sed ultrices, tortor sit amet pulvinar vehicula, nisi nibh pretium diam, a eleifend lacus nisi sed ex. In convallis suscipit purus, eu tempus leo tincidunt congue. Aliquam tincidunt augue ut dui pellentesque, quis bibendum tortor porta. Aliquam erat volutpat. Sed neque mi, venenatis eu nulla et, maximus ultrices ipsum. Ut vel blandit nisl. Maecenas justo nisl, ultricies id lacus sed, accumsan pharetra ligula. Sed risus dolor, fermentum vestibulum semper a, venenatis a lectus. Mauris quam mi, blandit vitae sapien molestie, vehicula suscipit nulla. Nam ornare cursus vulputate. Nam auctor malesuada velit, vel efficitur lacus pellentesque et. Sed imperdiet quis sem vitae lobortis. Nam sit amet sem ac ante consectetur dapibus eu nec nisl. Aliquam ornare, est ut bibendum tempor, turpis turpis luctus nibh, pharetra pulvinar nisl augue vel ipsum. Proin cursus nisl a nisl posuere volutpat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ut urna tortor. Aliquam non lorem fringilla, viverra mi sit amet, lobortis tellus. Nullam aliquam enim sit amet venenatis sollicitudin. Fusce elementum sed mi nec aliquam. Morbi vel risus vel mi lacinia dignissim. Pellentesque rutrum et nisi a venenatis. Nam consectetur, nulla ut bibendum imperdiet, diam risus rutrum dolor, et tincidunt libero justo at lacus. Vivamus non scelerisque leo. Etiam tristique in purus vel eleifend. Vestibulum enim est, porttitor eu turpis vitae, accumsan imperdiet ante. Nunc eu finibus urna. Etiam placerat, erat nec ornare molestie, lacus turpis congue leo, finibus vestibulum tortor nisi eget lectus. Cras id interdum dolor. Etiam interdum tempor egestas. Sed at libero id sapien posuere ultricies sit amet et ipsum. Fusce ut vehicula mauris, id elementum ligula. Donec commodo accumsan elementum. Fusce ut tortor sodales, tristique sapien vitae, elementum ante. Etiam feugiat posuere erat ac posuere. Duis fermentum nibh a quam gravida, quis volutpat lectus tempor. Integer imperdiet vel felis nec eleifend. Sed ultrices nisi eget placerat tempor. Etiam sed placerat nibh, id pharetra purus. Duis magna ligula, varius sed urna eget, efficitur viverra purus. Curabitur vehicula magna in mauris suscipit pellentesque. In lobortis metus porttitor, semper odio eleifend, imperdiet ex. Ut vestibulum odio ac sollicitudin tristique. Quisque vel feugiat quam. Donec congue, risus eget luctus fringilla, nisi arcu sollicitudin enim, eu efficitur orci nisl eget velit. Aenean lacus ex, porta et ultrices vitae, vehicula sed ex. Fusce consequat diam vel nibh luctus, ac aliquam neque condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus sit amet pellentesque nunc, at porttitor dolor. Nulla placerat, arcu quis facilisis laoreet, quam metus sodales risus, sit amet lacinia massa tellus sed risus. Integer placerat mollis libero, sit amet facilisis orci eleifend in. Proin sit amet nibh pretium, venenatis purus rhoncus, scelerisque lorem. Integer finibus imperdiet arcu non luctus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus ac elementum nisl. Suspendisse mattis laoreet leo, lacinia imperdiet magna. Suspendisse in fermentum eros. Etiam eget condimentum urna, sit amet maximus velit. Maecenas finibus, odio a convallis imperdiet, eros sem blandit lectus, ut eleifend diam ligula non enim. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam dapibus diam in lorem elementum viverra. Nam vel elementum lorem. Phasellus quis est ac urna feugiat pellentesque id eu massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent non lorem eget eros efficitur pulvinar quis nec lacus. Ut ipsum diam, faucibus nec tellus vitae, pulvinar ultricies sapien. Vestibulum dictum consequat purus, ac auctor felis consectetur in. Nunc nibh lacus, scelerisque vitae laoreet eu, fringilla at orci. Sed id tempor sem. Morbi dignissim risus non interdum elementum. Vestibulum lacinia rhoncus magna a varius. Proin dapibus quis lorem sit amet feugiat. Fusce vel dui quis nisi tincidunt ultrices at eu nibh. Curabitur rutrum varius nisl, non dictum magna. Vestibulum libero turpis, fermentum ac egestas non, viverra eget nunc. Sed tincidunt vel est vel efficitur. Proin et volutpat eros. In rhoncus varius metus, eu faucibus erat ornare eget. Morbi viverra mauris eu lacus suscipit elementum. Suspendisse imperdiet mauris sit amet tellus gravida, nec interdum est accumsan. Ut pulvinar et sapien ac consequat. Etiam vulputate, felis ac dapibus pharetra, tellus mauris luctus erat, ullamcorper venenatis felis nunc sed massa. Quisque urna libero, eleifend eget quam a, euismod tempus magna. Nulla nec ligula at mi finibus finibus eget nec odio. Nam maximus, neque eget pellentesque viverra, turpis felis pharetra nisi, sit amet pharetra nulla nibh id orci. Aliquam in viverra justo, vitae rhoncus justo. Aliquam rutrum vestibulum mauris sed sodales. Donec congue justo ut pretium facilisis. Pellentesque commodo risus mattis ex iaculis lobortis. Maecenas et orci efficitur, blandit justo sit amet, malesuada nisi. Phasellus sodales, massa eget tincidunt tempor, ante felis aliquet est, ut ornare elit nulla sit amet lectus. Duis hendrerit, sapien a finibus laoreet, erat turpis porta justo, sed iaculis nisl dui ut lorem. Vivamus odio velit, lobortis non suscipit sit amet, cursus quis nibh. In tempus lacus neque, vitae sagittis leo blandit vitae. Etiam auctor, felis ac efficitur tincidunt, augue quam dictum metus, et dapibus metus dolor nec ligula. Praesent id sodales tortor. Morbi eget turpis ac nibh placerat gravida nec vel metus. Quisque suscipit consequat diam, vitae viverra elit finibus sed. Nullam dignissim mollis sollicitudin. Nullam aliquam lobortis ante, quis tempus nunc euismod vel. Vivamus eget pretium neque, pellentesque hendrerit lorem. Nam in iaculis magna. Integer tempus tincidunt justo nec dictum. Nam porttitor ac lacus nec mollis. Aenean consectetur, quam non tempus lobortis, nibh tortor pharetra nibh, a commodo erat quam eu metus. Donec enim dolor, varius nec arcu et, sagittis aliquet orci. In fringilla risus id arcu tempus, iaculis vestibulum ex dictum. Aenean egestas metus arcu, vulputate rhoncus quam suscipit vitae. Fusce dignissim metus vel porta placerat. Cras efficitur nulla sodales, ornare augue id, congue erat. Proin vel eleifend magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer ac leo magna. Etiam vel fringilla est. Ut dictum porttitor sollicitudin. Phasellus quis ante vel tortor mattis efficitur. Nunc varius interdum lobortis. Vestibulum fermentum, arcu a commodo placerat, odio dolor congue metus, quis dictum mauris mi vitae elit. Aenean vel mi aliquet, semper enim at, tincidunt felis. Vivamus laoreet est purus, in tincidunt nunc accumsan ac. Curabitur molestie leo sem, id ultricies sapien semper non. Aliquam et libero fringilla, tempus nisi a, molestie est. Nam ultrices suscipit egestas. Mauris a lacus eu dui finibus consectetur non ac magna. In bibendum nunc quis bibendum viverra. Curabitur auctor metus quis odio cursus sodales. In accumsan, nisi et consequat ultrices, mi urna vestibulum turpis, a hendrerit leo nisi at velit. Donec vehicula purus eu justo pellentesque, nec dictum sapien efficitur. Sed viverra odio ut sollicitudin scelerisque. Maecenas porttitor urna nec semper lacinia. Suspendisse nec elit porta, hendrerit orci at, condimentum lacus. Nullam sed sapien quis odio bibendum fermentum. Nulla non volutpat augue. Cras quis eros pretium lorem malesuada dictum. Vestibulum lorem mauris, vehicula sed hendrerit sed, commodo ut est. Mauris pretium congue dui vel luctus. Aenean arcu ante, euismod vitae leo ut, vestibulum condimentum tortor. Aliquam posuere nisl orci, eu rutrum arcu iaculis ac. Donec in sapien tempus, lobortis nibh eget, varius magna. Aliquam risus ex, rutrum eu purus a, viverra iaculis dolor. Maecenas volutpat nibh non eros eleifend, at porttitor velit hendrerit. Duis consequat, magna hendrerit efficitur dignissim, dui nibh maximus purus, id vehicula augue lacus eget mi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer porta ipsum sit amet volutpat varius. Quisque condimentum quis eros quis vehicula. Aliquam erat volutpat. Fusce vitae auctor ipsum. Vestibulum placerat ante id faucibus faucibus. Donec vitae congue erat, vel hendrerit ipsum. Vestibulum vel massa euismod risus egestas ultrices. Nam eget ornare dui. Quisque nec porttitor quam, vitae sagittis libero. Sed arcu mi, pulvinar semper ligula eget, tempus cursus turpis. Sed nec ornare tellus, a tincidunt leo. Proin justo enim, finibus vel dictum sit amet, suscipit sed mi. Maecenas malesuada purus at ullamcorper ullamcorper. Maecenas tempor est vitae leo efficitur, quis varius risus aliquam. Phasellus ultrices urna sit amet ex vehicula aliquam. Proin in mauris at purus mattis laoreet a a augue. Etiam fermentum, magna porta viverra eleifend, erat nisi semper quam, eleifend vehicula est orci nec ex. Fusce diam odio, pellentesque a varius ac, pretium quis lacus. Pellentesque auctor quam eu accumsan mattis. Nunc ac metus et leo rutrum varius non et dui. Morbi mollis, turpis quis viverra accumsan, lorem est posuere neque, id egestas nisi quam at odio. Proin maximus accumsan massa sit amet efficitur. Duis aliquet urna est, sed rutrum tortor tincidunt vel. Sed tristique luctus nulla et vulputate. Integer a risus aliquam, lacinia nisi vel, efficitur enim. In ut porttitor nulla, eget egestas mauris. Proin molestie est eget nulla imperdiet, non facilisis sem rhoncus. Proin facilisis placerat elementum. Pellentesque ut viverra arcu. Phasellus nec ultricies erat. Morbi ultricies eros lectus, quis venenatis ipsum ornare eget. Cras vitae nibh eu nisi facilisis convallis vel at odio. Curabitur tempus turpis eu lorem ullamcorper, eget facilisis mauris tincidunt. Donec consectetur, nulla at dapibus ultrices, odio ligula pulvinar lorem, ac placerat libero tortor nec metus. Suspendisse id ante sollicitudin, dictum tortor ac, dapibus enim. Cras libero enim, blandit non neque egestas, tincidunt molestie orci. Cras pulvinar eget magna ut consequat. Quisque augue odio, sodales porta neque eu, imperdiet aliquam orci. Donec bibendum in est quis aliquet. Etiam in risus est. Integer pretium urna turpis, eu varius turpis iaculis quis. Cras volutpat fermentum neque, vehicula suscipit ligula gravida a. In ullamcorper tincidunt quam in congue. Proin molestie augue tortor, eget condimentum massa ornare id. Nullam lacus arcu, venenatis et consectetur nec, convallis ut nisi. Cras ultrices lobortis nisi sit amet sodales. Maecenas tristique, erat a molestie congue, diam nunc tempus augue, vel elementum ipsum nisl in ante. Duis ultrices justo faucibus, aliquet tellus rutrum, scelerisque mauris. Integer fringilla sit amet lectus ut ullamcorper. Aliquam sed dignissim arcu. Mauris vulputate, lectus id fermentum convallis, nunc tellus dapibus purus, nec laoreet tellus lacus in nibh. Sed molestie lacus enim, sit amet placerat erat dignissim non. Ut non mollis ex. Pellentesque eget dui elementum, condimentum diam sed, cursus felis. Integer sagittis lectus nisi, quis fringilla dui pharetra eu. Duis tortor lacus, semper et sem vitae, rutrum tempus risus. Phasellus placerat neque eu augue auctor, quis pellentesque tellus molestie. In euismod consectetur tortor eget vestibulum. Etiam enim massa, cursus eget molestie in, vulputate rhoncus nibh. Etiam urna dui, luctus vitae ligula vel, imperdiet euismod massa. Maecenas quis accumsan ipsum, at blandit tellus. Vestibulum tempus, felis at auctor molestie, erat tortor maximus ex, a ornare leo nisl in elit. Proin varius erat facilisis ante euismod scelerisque. Cras scelerisque quis lorem in eleifend. Proin vel tristique leo. Phasellus feugiat lobortis leo sed euismod. Integer congue nec leo et commodo. Suspendisse sollicitudin nulla non nibh porttitor, sit amet laoreet felis suscipit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam eget eleifend massa, vulputate scelerisque elit. Sed in mauris vitae tellus fringilla aliquet vel eget dui. Maecenas non justo ut sapien sagittis euismod sit amet id ligula. In maximus pharetra quam. Aenean commodo egestas ultricies. Nam dignissim mi eu ultrices cursus. Ut consectetur magna id augue consectetur porttitor. Praesent semper eget urna eget congue. In convallis sapien ipsum, in tempus ex viverra quis. Morbi efficitur ullamcorper turpis, at rhoncus metus consectetur eu. Nullam iaculis, est sed eleifend vestibulum, lorem elit efficitur orci, ac elementum massa est eu risus. Praesent nec dui justo. Cras ac varius eros. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis eu lorem cursus, viverra turpis vel, tempus turpis. In sodales, metus sit amet facilisis dapibus, felis nisi posuere arcu, nec gravida justo felis in sapien. Maecenas tincidunt aliquam commodo. Sed eget lectus ut lacus ullamcorper viverra. Sed luctus urna sed elit accumsan consequat. Proin non faucibus augue. Ut maximus dapibus lacinia. Mauris ex elit, condimentum nec dolor et, sodales hendrerit mauris. Sed semper ipsum ut odio finibus congue. Curabitur tempor cursus justo. Sed varius, orci a cursus auctor, dolor nisi tristique felis, in lacinia ligula diam quis leo. Pellentesque urna dolor, volutpat ut dui ut, suscipit hendrerit nisi. Quisque viverra eget odio id accumsan. Aliquam auctor vulputate lorem, id ornare augue elementum et. Mauris lacinia non arcu ut faucibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla quis nisi tincidunt, consequat massa sed, tempor massa. Ut ut justo vestibulum, imperdiet massa ut, fermentum nulla. Vestibulum nec tellus consequat, dictum leo sit amet, fringilla nulla. Praesent eget erat a orci hendrerit feugiat non ac dolor. Fusce nec sapien id erat euismod viverra. Sed sodales ligula libero, quis fringilla felis sollicitudin ut. Maecenas mollis ligula vitae eros finibus porttitor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer vulputate est vel ultrices blandit. Ut at fringilla leo. Nulla facilisis leo non turpis feugiat commodo. Sed sagittis faucibus iaculis. Vivamus pharetra ipsum a libero ullamcorper, nec imperdiet massa porta. Vivamus efficitur venenatis convallis. Nullam pharetra vehicula efficitur. Proin nec elit dapibus, pulvinar urna in, hendrerit orci. Nulla dignissim dui sed lacinia pharetra. Vestibulum porta interdum hendrerit. Donec aliquet orci at ex laoreet accumsan. Suspendisse commodo placerat tellus, non convallis nisi egestas at. Donec eu placerat metus, eu vulputate sapien. In et tellus ultrices, suscipit ante et, dignissim mauris. Sed laoreet diam sit amet magna tristique, quis rhoncus velit porttitor. Praesent finibus felis libero, scelerisque vulputate elit commodo vulputate. Suspendisse malesuada pulvinar varius. Morbi molestie tincidunt est vel tincidunt. Morbi nec tortor lorem. Integer non vulputate arcu. Nullam auctor quam lorem, et sagittis orci imperdiet et. Nulla hendrerit mauris a mi bibendum dapibus a at nisl. Ut commodo mauris non urna ullamcorper, vitae malesuada tellus sollicitudin. Duis egestas et eros a porttitor. Curabitur congue pharetra tortor ut euismod. Nulla ipsum arcu, aliquet convallis aliquam eu, aliquam in felis. Integer hendrerit egestas turpis a malesuada. Mauris rutrum nisl quis porta lacinia. Vivamus congue ut diam sed semper. Vivamus ullamcorper dolor id nisl eleifend lobortis. Proin at nibh euismod, dictum massa ut, porttitor dolor. Ut mattis mollis ligula id pellentesque. Duis accumsan neque feugiat libero cursus porttitor. Nam placerat rhoncus fringilla. Donec tempus orci nec nunc iaculis, sit amet iaculis augue auctor. Vestibulum ullamcorper elit vitae mauris sodales ullamcorper. Morbi vel massa imperdiet, gravida ex quis, eleifend diam. Mauris eu justo aliquet, consequat nibh id, vestibulum tortor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam elementum felis risus, in viverra dui molestie ut. Suspendisse eleifend bibendum suscipit. Aenean molestie pharetra dolor, quis tincidunt velit. Integer fermentum elementum condimentum. Nullam aliquet nibh at rutrum convallis. Vivamus in mattis tortor, vitae tristique odio. Morbi hendrerit pulvinar mi, sed condimentum ipsum sodales quis. Quisque sit amet blandit nulla. Etiam rhoncus, mauris quis posuere tincidunt, massa lorem malesuada enim, sed consectetur lectus metus eu justo. Etiam eleifend gravida maximus. Mauris vulputate urna a ex porttitor gravida eu sit amet lacus. Aenean varius tempus massa eu porta. Nunc finibus neque diam, eget ornare nisi eleifend id. Suspendisse interdum tempus diam, vel viverra massa faucibus quis. Suspendisse gravida, dui ut rhoncus faucibus, ex ligula dapibus purus, efficitur ultrices elit metus eget dolor. Etiam in maximus nisi. Quisque ut sem ac purus consequat condimentum. In vel nisl tortor. Aliquam erat volutpat. Phasellus eget euismod mi, sed vestibulum nibh. Nullam eget eros purus. Proin sit amet dui a odio iaculis mattis quis in mauris. Donec turpis sem, bibendum non diam id, gravida fringilla purus. Sed metus elit, maximus eget lectus at, euismod rhoncus turpis. Duis sed facilisis est, quis varius nisl. Vestibulum quis orci at elit scelerisque aliquam id sed ex. Morbi ac consequat purus. Aliquam laoreet purus vel magna elementum, eu sodales dui condimentum. Quisque semper lacus orci. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi feugiat posuere sollicitudin. Mauris quam nunc, consequat in bibendum a, dapibus a lorem. Phasellus consequat, diam quis faucibus cursus, enim mi interdum dolor, ac pretium elit enim laoreet neque. Nunc pulvinar quam augue, non interdum diam volutpat vitae. Fusce ac efficitur ex, eget pulvinar mauris. Suspendisse consequat laoreet efficitur. Pellentesque non porta dui, eu fermentum mi. Curabitur placerat vitae tellus sed mollis. Donec sit amet viverra tortor. Nunc lacinia fermentum tortor sit amet pretium. Donec et placerat sapien. Integer pulvinar risus id quam lobortis vehicula. Fusce auctor, neque a mollis posuere, orci dui laoreet turpis, ac fringilla lectus arcu quis ligula. Pellentesque ut consequat magna. Sed vestibulum, ligula rhoncus gravida euismod, velit eros faucibus nisl, nec consequat velit turpis nec ante. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse accumsan ac nunc ac ultricies. Sed pulvinar nec leo in lacinia. Sed ut lorem at massa varius finibus. Maecenas non ante vitae ipsum sollicitudin suscipit. In rutrum leo at interdum vehicula. Vivamus nisi libero, pellentesque non tellus vitae, vestibulum hendrerit enim. Cras congue felis vitae bibendum faucibus. Donec nec suscipit nisl. Nulla facilisi. Fusce ac orci iaculis, rutrum tortor sed, egestas ex. In hac habitasse platea dictumst. Suspendisse porttitor, libero eu congue consequat, ipsum ante auctor felis, ut faucibus odio urna at ipsum. Phasellus ac tellus sit amet diam ultrices volutpat. Nullam pulvinar ipsum mi, vitae consequat mauris tincidunt a. Duis porta tellus sit amet est dapibus ullamcorper. Aliquam laoreet erat quam, eget fringilla tellus condimentum in. Etiam quis pulvinar erat, non consectetur arcu. Nam elementum enim laoreet metus dictum, eu sagittis lectus mollis. Sed et risus nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean tellus justo, convallis non convallis at, commodo eu arcu. Praesent id vulputate enim. Etiam pulvinar finibus euismod. Ut ultrices, arcu sed rutrum placerat, leo lectus feugiat nisl, blandit aliquam tortor ipsum at nibh. Ut vel purus at nunc congue mattis ut ac turpis. Pellentesque sit amet quam vel risus pharetra venenatis sed eget dolor. Mauris sed nisi felis. Suspendisse eu posuere diam, vel fermentum eros. Aenean gravida tempus ligula eget efficitur. Sed et iaculis augue, blandit cursus eros. Praesent eget ornare nisi. Aliquam nec nibh blandit, semper lacus nec, volutpat diam. Nullam ornare viverra orci quis tristique. Nam lacinia felis risus, vitae elementum nunc suscipit a. Vivamus vulputate rutrum odio at imperdiet. Praesent et bibendum dolor. Suspendisse finibus euismod ligula, et viverra quam vulputate eget. Fusce arcu enim, ultrices at porttitor in, vehicula sit amet leo. Praesent vitae diam vitae lectus cursus tempus eu non felis. Fusce vitae mollis est, ac imperdiet velit. Aliquam vitae ullamcorper quam, sit amet iaculis dolor. Phasellus euismod efficitur ligula. Nunc quis ante in felis volutpat hendrerit. Nullam tincidunt, lectus vel consectetur ullamcorper, tellus est gravida neque, non imperdiet ligula turpis in lacus. Maecenas mattis dictum magna faucibus aliquam. Fusce nunc velit, vulputate id euismod eu, semper id est. Suspendisse blandit elit vel volutpat tincidunt. Integer vitae ipsum a erat eleifend maximus. Nam congue suscipit eros at porta. Nulla facilisi. Nullam varius tellus libero, id venenatis tortor aliquet in. Duis sit amet ipsum ut diam lobortis venenatis id at augue. In dignissim consequat erat id efficitur. Etiam dapibus ex elementum, hendrerit tortor et, semper nunc. Nam eu nibh malesuada, venenatis diam vitae, viverra ligula. Aenean augue turpis, fermentum vel elit nec, pellentesque blandit augue. Phasellus et blandit erat. In ac condimentum tellus, in ultrices sem. Maecenas dictum eu augue sed eleifend. Curabitur cursus finibus tortor. Donec consequat lacus in finibus mollis. Phasellus sed lacus a mi viverra sodales. Curabitur aliquet placerat sollicitudin. Sed eget tellus porttitor, mollis purus sit amet, gravida urna. Nulla et ipsum sit amet diam tempus malesuada sit amet sit amet lorem. Integer varius fermentum leo vitae ullamcorper. Nunc sollicitudin dignissim odio eget pulvinar. Duis vel lorem non turpis finibus facilisis. In pharetra mauris purus, et porttitor ligula feugiat et. Suspendisse ullamcorper posuere lacinia. Donec eget urna ipsum. Nulla dapibus commodo tellus, non consequat purus hendrerit quis. Proin eget dictum lorem, quis finibus tellus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer lacinia eleifend dui, id fringilla libero lacinia convallis. Nunc laoreet ante velit, efficitur interdum risus volutpat in. Phasellus malesuada mollis lacus sit amet tempor. Praesent eleifend congue condimentum. Donec sed magna nec enim tincidunt laoreet et id eros. Nam non elementum risus, ut tempor dui. Donec imperdiet magna augue, id vehicula ligula iaculis nec. In ut maximus sapien. Vivamus efficitur, ante sit amet cursus auctor, metus odio congue ligula, et suscipit urna leo sit amet lorem. Mauris eget massa vehicula, viverra enim ut, fermentum sem. Sed eu sapien nibh. Cras semper orci non mi interdum, vitae euismod quam sagittis. Proin vitae pellentesque tellus. Nullam nec risus ultricies, elementum nibh vitae, auctor urna. Cras non enim quis metus gravida elementum vitae at justo. Donec at ullamcorper leo. Sed ac interdum nunc. Duis venenatis, dolor non dignissim sodales, quam tortor aliquet nulla, sed pulvinar velit leo viverra libero. Etiam vel erat nec risus varius gravida sed id odio. In sed tincidunt ipsum. Etiam mollis venenatis ultricies. Nulla venenatis, lacus quis hendrerit vehicula, nulla velit maximus leo, vel convallis turpis massa vel urna. Donec viverra, sem et vulputate egestas, turpis ante mattis nisi, sit amet consectetur libero diam vel ipsum. Suspendisse lobortis euismod neque at porttitor. Suspendisse non purus sed quam porttitor dictum. Nam feugiat pellentesque erat, non facilisis orci tempus sit amet. Duis pulvinar elit eget eros placerat, eu elementum felis euismod. Phasellus nec porttitor massa. Integer a nulla vitae dolor sagittis pellentesque. Mauris pretium eleifend dolor ac interdum. Vestibulum vestibulum risus nisl, at interdum massa efficitur blandit. Fusce ipsum urna, hendrerit ut pretium eget, eleifend sed tortor. Nam vitae quam non nulla sodales molestie quis ultrices tortor. Fusce eget ornare lorem, accumsan venenatis lectus. In non fermentum massa, ac porttitor nibh. Vestibulum efficitur neque vel nunc feugiat consequat. Praesent nec dolor justo. Donec velit felis, convallis quis varius at, maximus id ligula. Sed a accumsan neque. Suspendisse vel blandit ipsum, sit amet mattis mi. Suspendisse nec convallis arcu. Nulla facilisi. Phasellus lobortis mi et ultrices placerat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean non ultricies eros. Integer erat ipsum, tincidunt id tortor nec, egestas tempor nisl. Nulla rutrum augue pellentesque nisl tempor tristique. Nunc est nisl, finibus eu erat id, varius facilisis dolor. Donec ut enim odio. Suspendisse bibendum finibus porta. Nunc facilisis vestibulum ante, eget semper lorem auctor eu. Praesent tempus mi at libero maximus malesuada. Fusce ullamcorper malesuada risus eget porttitor. Nullam sed feugiat nibh. Nullam suscipit nunc neque, nec vestibulum dui commodo nec. Etiam blandit consequat nisl sed consectetur. Donec at ligula pellentesque, dignissim felis nec, commodo lacus. Donec eu mi et risus lacinia finibus. Nulla scelerisque dui ac dignissim hendrerit. Aenean ultrices ac orci a tincidunt. Nunc rhoncus tortor ex, et ornare nisl congue vitae. In a molestie elit, vitae egestas lacus. Morbi quis libero quis neque interdum consectetur. Pellentesque vel tincidunt urna. Sed porta maximus ex in rutrum. Morbi mattis elit a augue ultrices convallis. Nunc a justo purus. Proin eros nisi, molestie ac purus sit amet, gravida auctor est. Cras sem felis, aliquam non turpis ut, laoreet vestibulum ligula. Nam elit nisl, fringilla nec iaculis ac, gravida id sem. Vivamus risus mauris, molestie et ipsum sed, volutpat posuere metus. Praesent tempus bibendum auctor. Etiam ac porta eros. Ut volutpat erat ut commodo consequat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean id sapien sit amet velit fermentum aliquet. Vestibulum vitae ligula ut est vulputate aliquam at a ex. Proin eu iaculis diam. Curabitur id diam sit amet orci posuere pretium. Morbi quis lacus sed dolor porttitor auctor vel eget enim. Ut interdum ex in felis euismod, quis ullamcorper lorem rhoncus. Nunc posuere, lacus nec rhoncus consectetur, elit ante accumsan lorem, non faucibus sapien ex nec massa. Integer augue ante, pharetra ac congue ut, feugiat eu mi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed venenatis, mi ut sodales placerat, risus velit feugiat eros, et pellentesque neque odio nec nisl. Aenean tristique felis quis tellus posuere porttitor. Curabitur viverra ultrices mi et tempus. Duis hendrerit, purus in egestas consequat, mauris nisl suscipit nibh, ut dapibus risus massa a justo. Cras a velit ac justo aliquet maximus nec vitae enim. Donec cursus lacus nulla, id eleifend ipsum efficitur vel. Morbi rutrum ligula purus, ut tempus nunc viverra in. Vestibulum ac tellus a velit luctus malesuada id non sem. Fusce id felis mauris. Nam quis luctus neque. Quisque sagittis ex vel metus vehicula dictum. Proin aliquet ac elit vel volutpat. Duis vitae pharetra erat. Suspendisse efficitur convallis placerat. Vestibulum facilisis quis arcu non lacinia. Donec eget cursus augue. Maecenas eget ligula tempus, cursus lacus ac, auctor elit. Mauris quis scelerisque arcu. Nullam quis justo ac dui malesuada placerat consectetur ac felis. Duis id commodo neque. Donec a justo erat. Aliquam id nisi ultrices, interdum risus eget, imperdiet lectus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse aliquam molestie tellus vel consequat. Nunc sollicitudin rhoncus lectus, id scelerisque lectus iaculis aliquet. Donec sapien arcu, commodo id quam ac, ornare elementum ex. Aenean commodo, mauris ac egestas interdum, enim tortor vestibulum turpis, sed pulvinar sapien tellus rhoncus enim. Sed at diam tristique, volutpat ante id, condimentum nulla. Aliquam ipsum felis, accumsan id consequat nec, pretium vel est. Maecenas fringilla et libero a tempus. In commodo ullamcorper nunc, sed aliquet turpis suscipit quis. In sed lacus scelerisque, molestie arcu at, porttitor sapien. Sed porta ultrices scelerisque. Aenean eu ullamcorper mauris, eget mattis arcu. Pellentesque vulputate efficitur vehicula. Pellentesque hendrerit nunc massa, nec imperdiet velit tincidunt at. Donec porta, ligula non ultrices tincidunt, lorem lacus rutrum nibh, ut tincidunt est nulla eget nisl. Nullam vitae justo semper nisl euismod ultrices. Aliquam sit amet vulputate velit. Nunc interdum risus velit, a sagittis massa pretium mollis. Praesent volutpat pharetra tellus, nec placerat est ultrices mollis. Ut tristique nec ante vitae imperdiet. Pellentesque quis consequat tellus. Pellentesque vitae fringilla lacus, nec eleifend enim. Sed convallis finibus nunc, nec aliquet elit vestibulum eu. Pellentesque dapibus, nunc sed bibendum suscipit, enim nulla suscipit enim, quis dignissim sem lorem cursus metus. Praesent at felis in dui aliquet pretium ut sed nisl. Curabitur ex augue, sagittis venenatis nisl non, fermentum finibus neque. Morbi quis mauris nec libero tristique vestibulum non eu ante. Morbi sodales condimentum nunc et fermentum. In hac habitasse platea dictumst. Donec aliquet ullamcorper odio, eu fermentum elit semper eu. Duis sit amet est neque. Morbi rutrum quam orci, ut sollicitudin felis tincidunt sed. Nunc lacinia non ligula sit amet suscipit. In vitae euismod urna. Curabitur finibus tristique magna, eu consequat turpis pretium sed. Nam condimentum tortor vitae bibendum eleifend. Nam odio orci, interdum eget velit rhoncus, suscipit suscipit elit. Nunc urna tellus, consectetur et iaculis nec, condimentum ac metus. Praesent maximus sagittis nibh, ut volutpat lacus laoreet quis. Pellentesque aliquam felis vitae cursus pharetra. Cras sit amet purus pulvinar, cursus neque et, tristique sapien. Aliquam laoreet, nisi facilisis dignissim vulputate, ante tortor pellentesque nunc, eget dignissim ligula magna egestas ipsum. Mauris sodales purus a justo dictum, nec ultrices mi egestas. Suspendisse vel pharetra justo. Suspendisse purus mi, porta at quam eu, viverra tristique diam. Aliquam quis ligula ultrices, pharetra purus a, suscipit sem. Aliquam dignissim lectus non libero blandit, in sodales dui mattis. Mauris vitae iaculis eros. Aenean mollis viverra risus. Ut tincidunt ante ac tellus efficitur, non tristique sem laoreet. Duis suscipit aliquam eros non fermentum. Suspendisse potenti. Duis semper sagittis cursus. Ut lectus ante, congue sit amet dolor ac, molestie tincidunt velit. Ut quis molestie eros, vel tempor nibh. Suspendisse non ante porttitor, tempus ipsum in, aliquam est. Pellentesque vitae ultricies lorem, in finibus ex. Nunc posuere elit et leo efficitur rhoncus sed quis velit. Nullam viverra ac lectus nec dapibus. In id consequat felis. Phasellus eu ullamcorper ante. Ut nulla neque, feugiat a pretium ut, elementum et sapien. Integer suscipit convallis lacus et hendrerit. Donec at vestibulum elit. Nullam lobortis ullamcorper mauris, et placerat diam consequat vel. Sed sed consequat sapien. Donec sit amet dui sollicitudin, iaculis libero at, finibus lacus. Fusce et nisl neque. In commodo vulputate nibh, vel semper enim tristique ac. Aliquam placerat eu nisl eleifend laoreet. Nunc non tempus diam, eget dictum nibh. Aliquam at convallis urna, elementum lobortis est. In sit amet semper erat, ut porttitor massa. Donec consectetur sapien turpis, in luctus metus tempor pellentesque. Quisque eget urna sit amet nibh porta varius. Morbi scelerisque fermentum orci in commodo. Praesent pulvinar maximus egestas. Aliquam erat volutpat. Donec dui enim, mollis vel ligula et, suscipit interdum diam. In vel diam quis nulla maximus pharetra. Sed nec est urna. Vivamus non volutpat eros. Proin eget commodo nibh, id ullamcorper tellus. Duis pretium leo id dolor vulputate accumsan. Maecenas at tempus nunc. Nunc ut magna nec enim convallis vehicula. Mauris ut semper arcu, sit amet eleifend risus. Ut commodo dictum fringilla. Fusce vel lobortis mauris, ullamcorper tristique lectus. Morbi sagittis arcu quam, vitae vestibulum arcu congue quis. Nam luctus volutpat tellus, non molestie orci vulputate facilisis. In imperdiet ipsum ipsum, et lobortis mi tristique vel. Curabitur quis diam sed orci vestibulum vulputate eu sit amet nisl. Nullam blandit, velit in tempor accumsan, risus turpis molestie elit, ac ornare libero felis maximus tortor. Quisque vulputate, lorem ut vulputate consequat, tortor est feugiat orci, nec elementum purus tortor a mi. Etiam vel molestie libero, sit amet condimentum ipsum. Phasellus fringilla nunc risus, a molestie mi hendrerit ut. Nam congue suscipit risus in ultrices. Maecenas ornare leo sit amet laoreet venenatis. Suspendisse ornare lorem nec rhoncus rhoncus. Aenean laoreet turpis et nunc dictum vulputate. Phasellus blandit turpis eget massa posuere, sit amet feugiat risus eleifend. Praesent velit mi, cursus id diam id, consequat scelerisque risus. Donec malesuada vel orci in ornare. Praesent id accumsan est. Curabitur cursus quam dui. Cras gravida id enim sed consequat. Vivamus volutpat, turpis eleifend ultricies accumsan, leo velit aliquam ex, sed euismod tellus leo tincidunt nulla. Suspendisse malesuada in nisi sed iaculis. Nulla tincidunt fringilla dui, vel sagittis mi molestie ut. Quisque eget nunc diam. Morbi vitae arcu vel augue vestibulum maximus sit amet vel odio. Nam aliquet mauris a lacus pretium porta. Proin sagittis egestas lacinia. Phasellus tempor faucibus mauris, in egestas elit semper sit amet. Vestibulum eu dui faucibus felis ultrices sodales. Sed vehicula velit nec pharetra faucibus. Suspendisse mauris est, ultricies sit amet blandit nec, dapibus id ante. Sed a convallis sem. Integer ex metus, iaculis eu maximus sit amet, pharetra a mi. Ut vitae tincidunt urna, ac ultrices libero. In hac habitasse platea dictumst. Nulla eleifend accumsan est congue hendrerit. Mauris quis urna purus. Proin placerat sodales scelerisque. Donec vitae velit at orci vestibulum iaculis at a erat. Maecenas ullamcorper sapien a orci condimentum eleifend. Fusce lacinia tempor ipsum sit amet volutpat. Curabitur posuere ipsum non diam convallis mattis. Donec mauris elit, varius ac posuere sit amet, egestas interdum risus. Donec tempus vitae risus non tempus. Fusce aliquet auctor ante, in ornare quam. Aliquam a dui eu nisi mattis efficitur. Nullam ac tempor neque. Nullam faucibus vitae nisl sit amet sagittis. Maecenas aliquam dolor ac diam viverra, quis rhoncus eros facilisis. Etiam vel dui sodales, pulvinar ex in, luctus odio. Etiam faucibus commodo commodo. Praesent quis lobortis lorem. Morbi id ipsum ultricies, elementum odio at, dictum tortor. Quisque auctor sapien ut eleifend viverra. Etiam maximus sapien quis nunc ullamcorper, non convallis lacus malesuada. Duis ac eleifend eros. Quisque scelerisque semper mattis. Cras eget lacus ut diam varius eleifend. Nam vitae dignissim nisl. Suspendisse rutrum ipsum a vehicula interdum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque semper nisi quis purus eleifend finibus. Duis porta, enim feugiat varius congue, est metus sollicitudin nulla, quis viverra libero mi quis lectus. Phasellus ac ipsum vehicula, sollicitudin turpis in, placerat diam. Sed a suscipit ipsum. Proin lacinia pharetra nisi, eu lacinia mauris iaculis vitae. Ut ultrices orci vel ultricies rutrum. Proin nec lacinia tellus. Ut eget libero odio. Duis aliquet elementum sem vitae iaculis. Aliquam ut finibus libero. Curabitur et tortor vel lectus malesuada placerat lobortis quis leo. Nulla consectetur vitae eros sit amet finibus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc lobortis, elit non congue gravida, tortor purus blandit massa, vitae sodales metus mauris quis arcu. Cras sagittis tellus eget leo vehicula vestibulum. Sed id leo vel sapien vulputate aliquet nec et massa. Nunc quam felis, tristique a gravida in, mollis vel dui. Etiam tortor risus, feugiat ac iaculis vel, sagittis ac est. Proin in placerat dolor, vitae ullamcorper lectus. Ut rhoncus tellus nec felis accumsan malesuada. Vivamus arcu sapien, dignissim et imperdiet eget, interdum sed arcu. Ut non lorem vel eros posuere dapibus et non diam. Mauris sagittis, leo et pretium condimentum, elit erat pellentesque lacus, et facilisis sapien arcu in tellus. Vivamus at mattis ligula. Mauris volutpat, erat eu ullamcorper mattis, turpis est accumsan nisl, ut fermentum libero diam venenatis velit. Sed tempor lorem ac ex ultrices, in pellentesque magna auctor. Duis maximus lacus a mi hendrerit dapibus. Quisque iaculis semper mattis. Aenean et dolor vel arcu mollis hendrerit nec quis justo. Aenean elit libero, rhoncus ut porttitor eu, aliquet ac quam. Cras mauris ante, ornare faucibus sem in, mattis vulputate mi. Etiam tempor, lacus a vehicula consectetur, justo urna ultrices ipsum, efficitur pharetra lorem urna eu sapien. Curabitur suscipit diam convallis porta rhoncus. Duis tristique lacus vel dolor semper, eget fringilla ipsum volutpat. Donec mollis lectus feugiat malesuada egestas. Donec vulputate ac ex vitae gravida. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In hac habitasse platea dictumst. Nulla at augue feugiat, scelerisque dolor et, pellentesque diam. Sed nisl lorem, vestibulum a viverra non, mollis ut arcu. Donec nisi lectus, aliquam et tincidunt aliquam, pretium eget ex. Cras sed tincidunt ante. Phasellus vitae est nec lorem ullamcorper auctor sit amet eget lectus. Praesent sapien eros, sagittis at tellus vitae, fermentum rutrum est. Phasellus at sem massa. Nunc sit amet consequat dui, a euismod arcu. Phasellus molestie nisi accumsan lectus gravida congue. Morbi porttitor placerat consectetur. Integer lacinia laoreet vulputate. Sed sed sapien odio. Praesent placerat ex eu leo consectetur, ut condimentum dolor lobortis. Cras sit amet diam ornare, tincidunt risus non, bibendum velit. Sed ligula enim, lobortis et pulvinar eget, iaculis id tellus. Sed sapien eros, varius vitae arcu a, vulputate convallis eros. Mauris ullamcorper tempor magna in elementum. Vestibulum bibendum pulvinar elit. Vivamus auctor dolor eu libero sodales, sed vulputate lacus tincidunt. Sed imperdiet aliquet sodales. Nunc fringilla urna gravida tristique fermentum. Nullam neque metus, dictum ac libero id, condimentum placerat nulla. Etiam at tempor diam, ut ultrices lacus. Vivamus consectetur massa in erat pharetra, vel varius purus semper. Pellentesque egestas eros et mi ornare, sit amet lobortis lorem fermentum. Nullam turpis nisl, elementum a sodales non, faucibus non nunc. Aenean vel eros venenatis, accumsan turpis non, consequat dui. Aliquam erat volutpat. Curabitur ultricies fermentum nisl ac facilisis. Sed volutpat ante id diam scelerisque bibendum. Vestibulum sem arcu, suscipit eu faucibus molestie, egestas ut est. Sed vitae dolor id eros ullamcorper tempus luctus eget nibh. Pellentesque a quam in leo condimentum faucibus elementum ut arcu. Phasellus fringilla fringilla mi eu finibus. Nunc tempor malesuada lorem, a pretium augue semper quis. Proin nisl massa, consequat sit amet suscipit et, tincidunt sed orci. Morbi porttitor diam non vestibulum congue. Duis quis laoreet augue. Integer sagittis placerat risus, quis lacinia dui interdum nec. Vestibulum tempor cursus lorem quis maximus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam feugiat scelerisque metus eu facilisis. Phasellus feugiat ipsum sed nibh posuere ultricies. In bibendum, leo id sodales dictum, nunc purus vulputate elit, in faucibus augue nisl quis tortor. Mauris justo augue, hendrerit eu magna a, facilisis porttitor nibh. Ut a volutpat sapien. Proin semper pharetra ultrices. Quisque iaculis mauris nisl, sollicitudin varius tellus venenatis nec. Cras accumsan nec augue a efficitur. Interdum et malesuada fames ac ante ipsum primis in faucibus. Cras interdum arcu eu lacus lacinia, ac pharetra augue aliquet. Etiam ut augue at elit ullamcorper maximus. Donec ut pellentesque felis. Nam sed pellentesque erat, non suscipit purus. Morbi nec urna vitae metus auctor mollis. Fusce ac turpis a quam finibus pretium. Vestibulum rhoncus, neque nec cursus dictum, velit odio vestibulum nisi, in gravida tellus risus vitae libero. Donec dapibus volutpat tortor, eu semper leo. In tincidunt augue sed tellus fringilla dictum. Sed placerat egestas tincidunt. Cras at eleifend lacus. Pellentesque eget mi varius, iaculis tortor sit amet, volutpat tortor. Vivamus sollicitudin ligula nisi, non rutrum metus ultrices ut. Donec sagittis ipsum dolor, nec sollicitudin nisi dictum vel. Nulla libero libero, bibendum id varius nec, pellentesque sit amet magna. Praesent fringilla in enim interdum sagittis. Sed diam nulla, cursus placerat enim ut, pulvinar blandit nisi. Aliquam fringilla ut nibh et cursus. Quisque condimentum elementum tincidunt. Vivamus nec mauris id orci dignissim pellentesque ac nec massa. Pellentesque id urna at ex hendrerit porta. Nam vitae condimentum augue. Nunc ultricies euismod nisl, at laoreet magna vestibulum eget. Vestibulum viverra felis eget lorem tempus, et consectetur metus rhoncus. Cras maximus maximus tellus, vitae consequat nunc. Vestibulum massa ante, semper nec dolor quis, iaculis accumsan lectus. Praesent nec suscipit sem, quis posuere ante. Mauris sit amet sem a velit consectetur tempus. Etiam laoreet condimentum justo, a interdum lectus ultrices varius. Integer sagittis, augue quis mattis laoreet, risus erat ultricies ipsum, id maximus justo nibh in mauris. Donec ullamcorper eu enim id varius. Nam porta justo sed mi molestie, imperdiet condimentum turpis facilisis. Curabitur quis ipsum et dui pretium porttitor. Suspendisse egestas ex ac orci egestas, et ornare felis ultrices. Aliquam massa leo, semper eu viverra quis, finibus et diam. Suspendisse potenti. Nam pretium justo id blandit condimentum. Donec vel justo et odio rutrum consectetur efficitur ut quam. Nam semper est leo, id dictum magna vehicula id. Proin eu eros mollis, faucibus felis at, facilisis nisi. Etiam a massa dictum, sollicitudin arcu eu, tempus neque. Duis molestie urna est, in malesuada sem feugiat vel. Duis ut laoreet ligula. Donec eleifend arcu eu lobortis faucibus. Integer id egestas ex. Suspendisse a leo iaculis, rhoncus nisl ac, cursus odio. Sed elementum dictum elit, quis iaculis sem facilisis eu. Curabitur vel tincidunt ante. Aliquam suscipit justo non porttitor dignissim. Maecenas hendrerit pulvinar ante ac convallis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam ornare ipsum enim, non fermentum ante fringilla ut. Fusce a accumsan lorem, sed sodales justo. Mauris gravida sodales mi, dignissim volutpat diam tincidunt eget. Maecenas molestie viverra consectetur. In varius nisl quis malesuada fermentum. Sed ante velit, tincidunt sed velit ut, ultricies cursus turpis. Quisque auctor non turpis id posuere. Cras ullamcorper tristique nisl id malesuada. Suspendisse commodo tortor a felis pulvinar hendrerit. Maecenas ut diam iaculis, egestas nulla et, accumsan neque. Morbi justo turpis, maximus quis fermentum vitae, efficitur nec purus. Sed vitae nibh ultricies, scelerisque elit at, finibus mi. Fusce vitae elementum elit. Vivamus quis ligula cursus, venenatis enim quis, bibendum nulla. Mauris nec velit sit amet mauris vestibulum consequat eu et elit. Nunc elementum tincidunt nibh id fringilla. Vestibulum quis eros semper, elementum nulla et, tincidunt sapien. Curabitur et metus molestie, convallis nisi sit amet, malesuada lorem. Etiam facilisis tincidunt turpis nec cursus. Nullam fermentum in nisl quis auctor. Sed luctus sit amet mi a mollis. In vehicula felis sit amet tempus elementum. Donec commodo viverra lobortis. Praesent dictum euismod urna ac aliquet. Phasellus facilisis rhoncus augue, quis interdum nunc rhoncus eget. Aliquam condimentum lectus sit amet ligula mattis, ac ornare sem fermentum. Suspendisse lorem massa, congue ac libero eu, auctor congue nisl. Sed rhoncus venenatis libero, varius sagittis eros tempus vel. Morbi eu sollicitudin lorem. Nullam tempor id ligula venenatis semper. Cras justo quam, rutrum eu lacus vel, commodo tincidunt nulla. Nam ut sollicitudin est. Interdum et malesuada fames ac ante ipsum primis in faucibus. Proin sodales turpis ut tellus accumsan ullamcorper. Proin lacinia luctus hendrerit. Mauris sagittis nulla ipsum, ut facilisis mauris ultricies id. Pellentesque iaculis sapien vitae mi euismod laoreet. Etiam molestie, tortor et tincidunt consectetur, felis ipsum condimentum libero, eget lobortis ex turpis vel nulla. Phasellus euismod, massa vulputate eleifend hendrerit, neque tortor blandit nisl, scelerisque hendrerit felis elit vel quam. Aliquam vel ligula eget nunc gravida egestas. Nunc fermentum lectus auctor nulla dictum, sit amet scelerisque eros imperdiet. Praesent laoreet dui id pulvinar dignissim. Cras et eros vestibulum, maximus ligula non, hendrerit eros. Duis consectetur ex sed rutrum convallis. Vivamus eget libero ac ligula imperdiet eleifend nec quis velit. Pellentesque quis turpis lacus. Phasellus vulputate a turpis eu pretium. Mauris in sapien interdum, bibendum nisl sit amet, mollis nisi. Aliquam bibendum, eros id ultricies blandit, nibh metus convallis enim, eu aliquet velit libero non elit. Suspendisse laoreet gravida luctus. Vestibulum rutrum magna at arcu sodales malesuada. Ut pretium tellus metus, non elementum leo varius eu. Ut at purus eu nisi laoreet gravida. Vivamus lorem arcu, gravida et arcu vel, volutpat viverra felis. Vivamus hendrerit convallis mattis. Vestibulum non lacus nec tellus hendrerit congue sit amet id sem. Phasellus a nisi elementum libero pellentesque ullamcorper bibendum vitae ipsum. Aenean at mauris arcu. Proin luctus pulvinar efficitur. Nulla varius mauris arcu, ac sagittis ipsum auctor vel. Nullam arcu neque, rutrum sed luctus a, imperdiet ut purus. Etiam interdum, nunc a scelerisque elementum, dui nibh tincidunt lectus, at fermentum arcu lorem sit amet ligula. Praesent at mauris eleifend, scelerisque magna ut, commodo enim. Nulla dui mi, fringilla eu venenatis et, commodo eget dolor. Curabitur blandit odio vitae risus sagittis, sed finibus felis commodo. Pellentesque tempor augue ut sagittis porttitor. Phasellus eget molestie felis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In vulputate augue vitae nibh sollicitudin, eget vehicula ligula pulvinar. In efficitur ornare viverra. Donec imperdiet dictum quam, vitae blandit leo porta vitae. Pellentesque pulvinar tempus mi ultricies iaculis. Fusce et ante sem. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam elit dui, ultrices quis ultrices vel, dapibus et nisl. Nullam et sollicitudin purus. Aenean in tristique libero. Pellentesque varius accumsan dui eget rhoncus. Sed dictum neque nunc, suscipit vulputate mi dapibus vitae. Donec faucibus, tellus ac aliquet tincidunt, est mi iaculis eros, quis rutrum enim enim sit amet mi. Sed quis euismod erat. Proin lorem sem, pellentesque nec cursus sed, congue a sem. Proin odio felis, rutrum eu nisi elementum, lacinia tempor justo. Nullam sit amet libero nec augue blandit iaculis. Suspendisse vehicula, lacus sit amet dictum efficitur, eros ante auctor metus, et tristique lorem nulla sed sapien. Aliquam ut sem blandit, facilisis nulla ut, congue est. Suspendisse potenti. Curabitur aliquet eros quis dictum placerat. Integer malesuada rhoncus pretium. Aliquam tempor accumsan nisi, eu luctus felis pulvinar a. Quisque pretium nunc tellus, sed finibus diam dictum vitae. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ante enim, consectetur et cursus at, lobortis eget nulla. Nulla facilisi. Proin sit amet erat quis dui iaculis laoreet. Fusce interdum, magna quis porta suscipit, dolor purus porta ipsum, quis congue lorem diam sed leo. Vestibulum semper, odio eu lobortis scelerisque, dui urna interdum erat, at elementum augue lacus pharetra ex. Aenean sapien quam, interdum porta orci efficitur, pharetra iaculis metus. Maecenas magna augue, dapibus vitae semper in, suscipit ac mi. Maecenas sed ipsum ut mauris pellentesque cursus vel eget leo. Duis aliquam lacus ut maximus pulvinar. Cras vitae dolor nec dui venenatis imperdiet. In nec mauris elit. Proin tincidunt euismod iaculis. Aenean tristique scelerisque semper. Donec in ligula sem. Aenean blandit nisi non ligula accumsan, ac euismod sapien dignissim. In molestie, leo malesuada suscipit ultricies, diam turpis auctor mauris, ut sodales nibh enim imperdiet magna. Maecenas vitae ultricies elit. Duis tincidunt lectus a ex tempor, ut ultricies ex vehicula. Aenean laoreet, augue at lacinia condimentum, massa justo maximus nibh, vel faucibus ante turpis ut mauris. Ut ut mattis sem, vel dictum neque. Pellentesque ut commodo felis, ac varius urna. Suspendisse a lectus egestas, congue lectus ac, bibendum odio. Integer id hendrerit mi. Curabitur sit amet volutpat leo, quis porta sapien. Phasellus ut luctus erat, vel egestas ex. Donec a metus faucibus, pulvinar metus in, tristique magna. In eget ex eu orci venenatis sagittis vitae a augue. Quisque libero lorem, tempor vel auctor non, pellentesque vel massa. Suspendisse sit amet ante justo. Sed auctor neque posuere hendrerit lacinia. Mauris rhoncus lobortis neque sit amet placerat. Etiam neque nunc, malesuada id felis ornare, convallis tristique mauris. Integer condimentum nulla id urna ullamcorper maximus. Praesent elit nibh, vulputate eu mollis vitae, tincidunt vitae lacus. Curabitur consequat metus sodales sapien posuere, nec molestie enim pulvinar. Nulla ligula dolor, varius a ligula at, semper vestibulum nisl. Duis interdum aliquet neque at volutpat. Nunc turpis libero, ullamcorper efficitur mauris ac, condimentum dapibus urna. In non vulputate justo. Nunc laoreet, sem ut mollis auctor, dui purus mollis sapien, sed ornare justo lectus sed metus. Aliquam dignissim ultricies sodales. Sed ut hendrerit quam. Vivamus eget dolor vehicula, pellentesque lectus in, condimentum erat. Donec lacinia vel dolor nec viverra. Sed sodales, massa sit amet finibus sagittis, ligula dui tincidunt purus, sed dictum nibh purus sit amet mi. Maecenas ac sodales mauris. Nunc tincidunt mauris nibh, condimentum commodo augue sollicitudin nec. Pellentesque suscipit, elit quis feugiat pellentesque, sapien metus pharetra sem, vel egestas nibh ligula imperdiet odio. Nullam semper a nibh ac dapibus. Sed accumsan magna commodo nunc volutpat lobortis. Sed risus elit, dignissim sed metus ac, sagittis eleifend nulla. Praesent commodo risus et urna lobortis mattis. Nunc pretium malesuada lectus non faucibus. Mauris pharetra nisi sapien, id viverra orci bibendum euismod. Curabitur sodales mi ut rhoncus cursus. Proin consectetur mi quis convallis sagittis. Aenean et semper nunc. Aliquam feugiat dignissim condimentum. Aliquam sed sollicitudin lorem, in molestie dolor. Vestibulum rutrum suscipit elit a volutpat. Nunc purus libero, suscipit vitae lorem in, bibendum feugiat neque. Fusce in pulvinar neque. Aenean a lobortis quam, rhoncus tempus leo. Phasellus posuere nibh a cursus consequat. Donec rutrum tincidunt nisi, vitae porttitor magna. Ut in nibh rhoncus, convallis urna sed, tristique sem. Vivamus molestie libero at mi dictum, non vehicula arcu ultrices. Praesent mollis purus urna. Nullam eget laoreet neque. Vestibulum consequat eu elit vel tincidunt. Vivamus sagittis arcu vitae malesuada cursus. Proin cursus urna quam, sed imperdiet risus bibendum non. Pellentesque vitae vehicula mi. Cras faucibus nulla vel lorem imperdiet malesuada vel consequat diam. Aenean vestibulum ac magna eget efficitur. Suspendisse vitae consequat ipsum. Sed mattis molestie lorem, at sollicitudin libero viverra eu. Maecenas mattis, lorem sed fermentum porta, ex dolor vulputate nisl, eget venenatis velit mauris vitae leo. Donec in vulputate ex. Morbi et nunc non lacus imperdiet luctus posuere sed elit. In pellentesque facilisis quam at fermentum. Aliquam malesuada placerat ligula. Praesent justo enim, placerat in est at, mattis condimentum sem. Praesent eu viverra nibh. Ut fringilla sem porttitor tellus accumsan, eu euismod odio porttitor. Praesent nec tincidunt arcu. Quisque posuere laoreet leo. Vestibulum varius ac ipsum at viverra. Donec gravida mollis metus, ut ultrices libero rutrum ac. Nam auctor augue a quam egestas mattis. Mauris vel diam non leo malesuada feugiat ultricies ut nisi. Proin tempor sollicitudin tortor sit amet suscipit. Proin sed elementum nunc. Nunc a aliquam urna. Mauris facilisis nisi eu congue ullamcorper. Proin risus tellus, vehicula ut rhoncus sit amet, consectetur in turpis. Nulla eget velit ut dui venenatis auctor ac eu ipsum. Suspendisse potenti. Sed magna metus, accumsan at sapien sed, rhoncus scelerisque augue. Mauris condimentum lobortis ante, eget dictum turpis elementum fermentum. Quisque rhoncus dolor eget felis gravida, id vehicula mi pellentesque. Morbi blandit malesuada rutrum. Duis enim purus, fermentum lobortis urna eget, rutrum congue sem. Cras lectus tellus, tincidunt et ipsum sed, sagittis rhoncus nibh. Mauris vulputate, mi et pulvinar dictum, diam arcu dignissim massa, non euismod augue tellus nec tortor. Nulla facilisi. Nunc porttitor ornare risus, id dignissim justo gravida et. Vestibulum eleifend, nisl non rutrum iaculis, elit augue porta magna, at imperdiet lectus sem et nisi. Donec lacus mauris, commodo nec turpis ullamcorper, condimentum eleifend mi. Integer sed nunc vel ex molestie consectetur eget vitae nisi. Cras quis enim erat. Quisque cursus magna ex, at vehicula risus tempor et. Aenean ornare, magna eu finibus bibendum, quam tortor tincidunt justo, eget eleifend eros mi quis purus. Mauris lacinia auctor semper. Nunc rhoncus laoreet molestie. Sed pharetra sapien id pulvinar interdum. Sed viverra diam mauris, at rutrum neque luctus sed. Phasellus mollis commodo turpis, sit amet aliquet risus luctus eu. Praesent eu molestie ante, a gravida leo. Nunc iaculis mollis nulla. Nulla facilisi. Sed faucibus placerat eros quis condimentum. Phasellus egestas justo risus, ac sagittis ligula porttitor et. Praesent molestie enim at turpis pharetra, vel gravida mi tincidunt. Suspendisse sem neque, consectetur sed dictum eget, laoreet quis arcu. In tempor risus mi, id elementum tortor vestibulum id. Aliquam dignissim venenatis leo id luctus. Sed aliquam imperdiet mauris, ac porttitor purus efficitur sed. Ut sit amet tempor urna, dictum interdum est. Aliquam vitae mi eu risus elementum fringilla et nec erat. Donec lobortis massa nunc, commodo mollis mi congue in. In ullamcorper nisl nibh, vel imperdiet felis consectetur eget. Curabitur laoreet, arcu quis semper ultricies, est odio fermentum nibh, id consectetur dui nibh et sem. Aenean mollis volutpat justo, non condimentum nulla porttitor eu. Morbi eu scelerisque lorem. Praesent varius tempus ante, eu ullamcorper lectus pretium pretium. Sed eu euismod mauris. Nullam vitae purus eleifend purus scelerisque feugiat vitae id velit. Cras semper diam urna, quis pellentesque odio sodales sit amet. Cras dolor diam, ultrices venenatis purus id, pulvinar ultricies nunc. Mauris vitae diam blandit, pellentesque turpis nec, sodales justo. Maecenas sagittis eu justo eu pretium. Vestibulum et enim commodo, commodo sem non, malesuada erat. Quisque vitae rutrum tortor. Nam cursus a eros eu gravida. Maecenas et nisl porttitor, malesuada lorem et, commodo quam. Nulla accumsan pulvinar justo, at condimentum enim consequat maximus. Vestibulum tristique fermentum quam quis congue. Vivamus vel lorem auctor mi sagittis dictum vel eget elit. Nunc eget accumsan mauris. Pellentesque porta imperdiet nunc tempus scelerisque. Phasellus suscipit interdum lectus vel malesuada. Aliquam porttitor hendrerit velit et ullamcorper. Maecenas leo ipsum, convallis id mauris id, bibendum interdum odio. Maecenas at risus risus. Donec vel sem nisi. Praesent convallis tortor risus. Pellentesque mollis nisi ac malesuada convallis. Vivamus efficitur sagittis nulla, quis sollicitudin diam. Donec magna erat, faucibus ut bibendum ac, mollis eu lacus. Proin malesuada leo in sem gravida ultrices. Cras pretium tortor eget massa tempus, id hendrerit elit vehicula. Etiam rutrum nulla eget lacus ullamcorper consectetur. Mauris luctus porttitor neque ac eleifend. Quisque fermentum at felis ac tincidunt. Aenean sollicitudin libero eget arcu hendrerit faucibus id in lectus. Fusce laoreet turpis vel hendrerit tincidunt. In facilisis pretium vehicula. Nullam urna est, luctus eget tellus at, vestibulum tempor nibh. Aliquam luctus diam non massa ullamcorper commodo. Nulla suscipit magna vitae vehicula dictum. Suspendisse iaculis enim nec nisi sagittis suscipit. In tincidunt neque sed dui dapibus, a laoreet lectus pretium. Nam malesuada eros vitae rhoncus aliquam. Donec tincidunt metus ut elit fermentum consectetur. Phasellus eu ipsum neque. Vivamus tempor auctor leo. In quis laoreet nisi, non consequat nulla. Proin finibus lorem dictum erat condimentum, et tincidunt elit molestie. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce nec gravida libero, eu rhoncus lorem. In massa diam, tristique a efficitur sed, pulvinar at nisi. Cras id tortor vel velit euismod aliquam. Curabitur quis euismod nulla. Donec porttitor nulla nec aliquet pellentesque. Sed eget mauris eu lacus ornare gravida. Sed at finibus tellus. Donec ut condimentum neque. Nam eu sapien in arcu faucibus placerat vel non sem. Aliquam aliquam rutrum felis, a porta justo convallis sed. Praesent ac tincidunt quam. Vestibulum eros nisi, aliquam eget fringilla non, tristique eget ex. Donec finibus urna ut sapien sodales maximus. Etiam mauris ex, dictum non lobortis non, laoreet ac risus. Maecenas pretium sed dolor luctus volutpat. In iaculis, sapien vel pellentesque tempus, nibh leo lobortis urna, vitae maximus urna ipsum ac ex. Nulla facilisi. Donec enim magna, mattis nec nisl id, dapibus molestie velit. Aliquam consequat libero vestibulum fringilla rhoncus. Aliquam at tempus felis, in eleifend massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus libero eros, suscipit tempus sem eu, egestas auctor lectus. Phasellus eu mollis quam. Nullam id dignissim mauris. Aenean vel fringilla arcu. Phasellus at risus et ante laoreet faucibus. Donec a velit viverra, eleifend ipsum sit amet, suscipit ante. Phasellus varius tortor ac metus mattis bibendum. Aenean aliquet rhoncus euismod. Suspendisse pellentesque sagittis tortor. Vestibulum ut felis tincidunt, finibus justo a, porttitor purus. Curabitur nec sapien efficitur, dapibus eros posuere, venenatis orci. Curabitur mollis nunc vitae dolor bibendum sodales. Integer malesuada neque erat. Etiam at leo viverra, dapibus lectus in, porta ante.

          '); + element.triggerHandler('keyup'); + $rootScope.$digest(); + }); + waitsFor(function(){ + return $rootScope.html.length > 200; + }); + runs(function(){ + var _currentSum = _average * _counts; + _currentSum += new Date().getTime() - start; + _counts++; + _average = _currentSum / _counts; + }); + }; + for(var i = 0; i < 20; i++){ + _testFunc(i); + } + waitsFor(function(){ + return _counts === 20; + }); + runs(function(){ + expect(_average).toBeLessThan(600.0); + }); + })); + }); }); \ No newline at end of file