]> git.parisson.com Git - pdfannotator.git/commitdiff
Better handling of zoom scale
authorYoan Le Clanche <yoanl@pilotsystems.net>
Wed, 25 Jun 2025 13:43:01 +0000 (15:43 +0200)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Wed, 25 Jun 2025 13:43:01 +0000 (15:43 +0200)
pdfannotator/src/UI/edit.js
pdfannotator/src/index.js
pdfannotator/static/pdfannotator/pdf-annotate.min.js
pdfannotator/static/pdfannotator/pdf-annotate.min.js.map

index 0f88e74619e469f6bb0368ec72658cd8a36c189f..963d22131e5922a968d85ed9d9d1475cd86a37f9 100644 (file)
@@ -18,12 +18,15 @@ import {
 } from './utils';
 import {selectComment} from "./comments";
 import {readonly} from "../initFile";
+import {RENDER_OPTIONS} from ".";
+
 
 let _enabled = false;
 let isDragging = false, overlay;
 let dragOffsetX, dragOffsetY, dragStartX, dragStartY;
 const OVERLAY_BORDER_SIZE = 3;
 
+
 /**
  * Create an overlay for editing an annotation.
  *
@@ -37,6 +40,10 @@ export function createEditOverlay(target) {
   let parentNode = findSVGContainer(target).parentNode;
   let id = target.getAttribute('data-pdf-annotate-id');
   let rect = getAnnotationRect(target);
+  let scale = 1;
+  const type = target.getAttribute('data-pdf-annotate-type');
+  if(type === 'point')
+    scale = parseFloat($('select.scale').val());
   let styleLeft = rect.left - OVERLAY_BORDER_SIZE;
   let styleTop = rect.top - OVERLAY_BORDER_SIZE;
   
@@ -44,10 +51,10 @@ export function createEditOverlay(target) {
   overlay.setAttribute('data-target-id', id);
   overlay.style.boxSizing = 'content-box';
   overlay.style.position = 'absolute';
-  overlay.style.top = `${styleTop}px`;
-  overlay.style.left = `${styleLeft}px`;
-  overlay.style.width = `${rect.width}px`;
-  overlay.style.height = `${rect.height}px`;
+  overlay.style.top = `${styleTop * scale}px`;
+  overlay.style.left = `${styleLeft * scale}px`;
+  overlay.style.width = `${rect.width * scale}px`;
+  overlay.style.height = `${rect.height * scale}px`;
   overlay.style.border = `${OVERLAY_BORDER_SIZE}px solid ${BORDER_COLOR}`;
   overlay.style.borderRadius = `${OVERLAY_BORDER_SIZE}px`;
 
@@ -177,6 +184,11 @@ function handleDocumentMousedown(e) {
 
   if (type === 'highlight' || type === 'strikeout') { return; }
 
+  let scale = 1;
+  if(type === 'point')
+    scale = parseFloat($('select.scale').val());
+
+
   if(!readonly)
     isDragging = true;
     dragOffsetX = e.clientX;
@@ -202,6 +214,7 @@ function handleDocumentMousedown(e) {
 function handleDocumentMousemove(e) {
   if(readonly)
     return;
+  
   let annotationId = overlay.getAttribute('data-target-id');
   let parentNode = overlay.parentNode;
   let rect = parentNode.getBoundingClientRect();
@@ -211,7 +224,6 @@ function handleDocumentMousemove(e) {
   let maxY = rect.height;
   let minX = 0;
   let maxX = rect.width;
-
   if (y > minY && y + overlay.offsetHeight < maxY) {
     overlay.style.top = `${y}px`;
   }
@@ -235,6 +247,10 @@ function handleDocumentMouseup(e) {
   
   overlay.querySelector('a').style.display = '';
 
+  let scale = 1;
+  if(type === 'point')
+    scale = parseFloat($('select.scale').val());
+
   function getDelta(propX, propY) {
     return calcDelta(parseInt(target[0].getAttribute(propX), 10), parseInt(target[0].getAttribute(propY), 10));
   }
@@ -259,7 +275,7 @@ function handleDocumentMouseup(e) {
           }
 
           if (type === 'point' && !$.browser.mozilla) {
-            viewY = scaleUp(svg, { viewY }).viewY;
+            viewY = scaleUp(svg, { viewY }).viewY / scale;
           }
           if($.browser.mozilla)
             viewY -= 8;
@@ -276,7 +292,7 @@ function handleDocumentMouseup(e) {
           let viewX = modelX;
 
           if (type === 'point' && !$.browser.mozilla) {
-            viewX = scaleUp(svg, { viewX }).viewX;
+            viewX = scaleUp(svg, { viewX }).viewX / scale;
           }
           if($.browser.mozilla)
             viewX -= 8;
index 0560b12e0b45fd3c0a2b45f73dd2f6d39bb40c65..c761534c3e4c0b07b3fe4c773522ae047aff5b72 100644 (file)
@@ -12,7 +12,7 @@ let RENDER_OPTIONS = {
   documentId:documentUrl,
   pdfDocument: null,
     enhanceTextSelection:true,
-  scale: parseFloat(localStorage.getItem(`${documentId}/scale`), 10) || 1.33
+  scale: parseFloat(localStorage.getItem(`${documentId}/scale`), 10) || 1.0
   // rotate: parseInt(localStorage.getItem(`${documentId}/rotate`), 10) || 0
 };
 
index 7396c8c4e1d4781ae884c39825f583f8b4193604..48ef346c3a59272fa2c016393d05c90a7bc219e5 100644 (file)
@@ -1,14 +1,14 @@
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PDFAnnotate=t():e.PDFAnnotate=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={exports:{},id:r,loaded:!1};return e[r].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(){pdfjsLib.getDocument(m.documentId).then(function(e){m.pdfDocument=e;var t=document.getElementById("viewer");t.innerHTML="",g=e._pdfInfo.numPages;for(var n=0;n<g;n++){var r=p.createPage(n+1);t.appendChild(r)}o["default"].getAnnotations(d.documentId).then(function(t){for(var n=function(n){e.getPage(n).then(function(){p.renderPage(n,t,m).then(function(e){var t=u(e,2),n=t[0],r=(t[1],n.getViewport(m.scale));h=r.height,$.browser.mozilla&&$(".textLayer>.endOfContent").remove()})})},r=1;r<=g;r++)n(r)})})}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){var n=[],r=!0,a=!1,u=void 0;try{for(var i,o=e[Symbol.iterator]();!(r=(i=o.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(d){a=!0,u=d}finally{try{!r&&o["return"]&&o["return"]()}finally{if(a)throw u}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=n(1),o=r(i),d=n(37),s=n(39),c=(r(s),n(65)),l=r(c),f=n(38),p=o["default"].UI,h=void 0,m={documentId:d.documentUrl,pdfDocument:null,enhanceTextSelection:!0,scale:parseFloat(localStorage.getItem(d.documentId+"/scale"),10)||1.33};o["default"].setStoreAdapter(new o["default"].CRFPAStoreAdapter);var g=0;a();var v=function(e,t){var n=localStorage.getItem(m.documentId+"/tooltype")||"cursor",r=document.querySelector(".toolbar button.active");if(r)switch(r.classList.remove("active"),n){case"cursor":p.disableEdit();break;case"draw":p.disablePen();break;case"text":p.disableText();break;case"point":p.disablePoint();break;case"area":case"highlight":case"strikeout":p.disableRect()}switch(t&&t.classList.add("active"),n!==e&&localStorage.setItem(m.documentId+"/tooltype",e),n=e,e){case"cursor":p.enableEdit();break;case"draw":p.enablePen();break;case"text":p.enableText();break;case"point":p.enablePoint();break;case"area":case"highlight":case"strikeout":p.enableRect(e)}};o["default"].setActiveToolbarItem=v,d.readonly||(!function(){function e(){t(12,"#EF4437")}function t(e,t){p.setText(e,t)}e()}(),function(){function e(){for(var e=document.querySelector(".toolbar .pen-size"),n=0;n<20;n++)e.appendChild(new Option(n+1,n+1));t(localStorage.getItem(m.documentId+"/pen/size")||1,localStorage.getItem(m.documentId+"/pen/color")||"#000000"),(0,l["default"])(document.querySelector(".pen-color"),a,function(e){t(r,e)})}function t(e,t){var n=!1;if(r!==e&&(n=!0,r=e,localStorage.setItem(m.documentId+"/pen/size",r),document.querySelector(".toolbar .pen-size").value=r),a!==t){n=!0,a=t,localStorage.setItem(m.documentId+"/pen/color",a);var u=document.querySelector(".toolbar .pen-color.color-selected");u&&(u.classList.remove("color-selected"),u.removeAttribute("aria-selected")),u=document.querySelector('.toolbar .pen-color[data-color="'+t+'"]'),u&&(u.classList.add("color-selected"),u.setAttribute("aria-selected",!0))}n&&p.setPen(r,a)}function n(e){t(e.target.value,a)}var r=void 0,a=void 0;document.querySelector(".toolbar .pen-size").addEventListener("change",n),e()}(),function(){function e(e){"BUTTON"===e.target.nodeName&&v(e.target.getAttribute("data-tooltype"),e.target)}var t=localStorage.getItem(m.documentId+"/tooltype")||"cursor";t&&v(t,document.querySelector(".toolbar button[data-tooltype="+t+"]")),document.querySelector(".toolbar").addEventListener("click",e)}()),d.readonly&&p.enableEdit(),function(){function e(e,t){e=parseFloat(e,10),t=parseInt(t,10),m.scale===e&&m.rotate===t||(m.scale=e,m.rotate=t,localStorage.setItem(m.documentId+"/scale",m.scale),localStorage.setItem(m.documentId+"/rotate",m.rotate%360),a())}function t(t){e(t.target.value,m.rotate)}document.querySelector(".toolbar select.scale").value=m.scale,document.querySelector(".toolbar select.scale").addEventListener("change",t)}(),(0,f.renderComments)(d.documentId),t["default"]=o["default"],e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var a=n(2),u=r(a),i=n(8),o=r(i),d=n(50),s=r(d),c=n(59),l=r(c);t["default"]={StoreAdapter:u["default"],CRFPAStoreAdapter:o["default"],__storeAdapter:new u["default"],getStoreAdapter:function(){return this.__storeAdapter},setStoreAdapter:function(e){this.__storeAdapter=e},UI:l["default"],render:s["default"],getAnnotations:function(e){var t;return(t=this.getStoreAdapter()).getAnnotations.apply(t,arguments)}},e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(3),o=r(i),d=n(4),s=function(){function e(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a(this,e),Object.keys(n).forEach(function(e){"function"==typeof n[e]&&"function"==typeof t[e]&&(t[e]=n[e])})}return u(e,[{key:"__getAnnotations",value:function(e){(0,o["default"])("getAnnotations")}},{key:"getAnnotation",value:function(e,t){(0,o["default"])("getAnnotation")}},{key:"__addAnnotation",value:function(e,t,n){(0,o["default"])("addAnnotation")}},{key:"__editAnnotation",value:function(e,t,n){(0,o["default"])("editAnnotation")}},{key:"__deleteAnnotation",value:function(e,t){(0,o["default"])("deleteAnnotation")}},{key:"getComments",value:function(e,t){(0,o["default"])("getComments")}},{key:"__addComment",value:function(e,t,n){(0,o["default"])("addComment")}},{key:"__updateComment",value:function(e,t,n){(0,o["default"])("addComment")}},{key:"__deleteComment",value:function(e,t){(0,o["default"])("deleteComment")}},{key:"getAnnotations",get:function(){return this.__getAnnotations},set:function(e){this.__getAnnotations=function(t){return e.apply(void 0,arguments).then(function(e){return e})}}},{key:"addAnnotation",get:function(){return this.__addAnnotation},set:function(e){this.__addAnnotation=function(t,n,r){return e.apply(void 0,arguments).then(function(e){return(0,d.fireEvent)("annotation:add",t,n,e),e})}}},{key:"editAnnotation",get:function(){return this.__editAnnotation},set:function(e){this.__editAnnotation=function(t,n,r){return e.apply(void 0,arguments).then(function(e){return(0,d.fireEvent)("annotation:edit",t,n,e),e})}}},{key:"deleteAnnotation",get:function(){return this.__deleteAnnotation},set:function(e){this.__deleteAnnotation=function(t,n){return e.apply(void 0,arguments).then(function(e){return e&&(0,d.fireEvent)("annotation:delete",t,n),e})}}},{key:"addComment",get:function(){return this.__addComment},set:function(e){this.__addComment=function(t,n,r){return e.apply(void 0,arguments).then(function(e){return(0,d.fireEvent)("comment:add",t,n,e),e})}}},{key:"updateComment",get:function(){return this.__updateComment},set:function(e){this.__updateComment=function(t,n,r){return e.apply(void 0,arguments).then(function(e){return(0,d.fireEvent)("comment:updated",t,n,e),e})}}},{key:"deleteComment",get:function(){return this.__deleteComment},set:function(e){this.__deleteComment=function(t,n){return e.apply(void 0,arguments).then(function(e){return e&&(0,d.fireEvent)("comment:delete",t,n),e})}}}]),e}();t["default"]=s,e.exports=t["default"]},function(e,t){"use strict";function n(e){throw new Error(e+" is not implemented")}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(){c.emit.apply(c,arguments)}function u(){c.on.apply(c,arguments)}function i(){c.removeListener.apply(c,arguments)}Object.defineProperty(t,"__esModule",{value:!0}),t.fireEvent=a,t.addEventListener=u,t.removeEventListener=i;var o=n(5),d=r(o),s=n(6),c=new d["default"],l=void 0;document.addEventListener("click",function(e){if((0,s.findSVGAtPoint)(e.clientX,e.clientY)){var t=(0,s.findAnnotationAtPoint)(e.clientX,e.clientY);l&&l!==t&&c.emit("annotation:blur",l),t&&c.emit("annotation:click",t),l=t}})},function(e,t){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function a(e){return"number"==typeof e}function u(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(e){if(!a(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},n.prototype.emit=function(e){var t,n,a,o,d,s;if(this._events||(this._events={}),"error"===e&&(!this._events.error||u(this._events.error)&&!this._events.error.length)){if(t=arguments[1],t instanceof Error)throw t;var c=new Error('Uncaught, unspecified "error" event. ('+t+")");throw c.context=t,c}if(n=this._events[e],i(n))return!1;if(r(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:o=Array.prototype.slice.call(arguments,1),n.apply(this,o)}else if(u(n))for(o=Array.prototype.slice.call(arguments,1),s=n.slice(),a=s.length,d=0;d<a;d++)s[d].apply(this,o);return!0},n.prototype.addListener=function(e,t){var a;if(!r(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,r(t.listener)?t.listener:t),this._events[e]?u(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,u(this._events[e])&&!this._events[e].warned&&(a=i(this._maxListeners)?n.defaultMaxListeners:this._maxListeners,a&&a>0&&this._events[e].length>a&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(e,t){function n(){this.removeListener(e,n),a||(a=!0,t.apply(this,arguments))}if(!r(t))throw TypeError("listener must be a function");var a=!1;return n.listener=t,this.on(e,n),this},n.prototype.removeListener=function(e,t){var n,a,i,o;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(n=this._events[e],i=n.length,a=-1,n===t||r(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(u(n)){for(o=i;o-- >0;)if(n[o]===t||n[o].listener&&n[o].listener===t){a=o;break}if(a<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},n.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[e],r(n))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},n.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},n.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},n.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){for(var t=e;(t=t.parentNode)&&t!==document;)if("SVG"===t.nodeName.toUpperCase()&&"true"===t.getAttribute("data-pdf-annotate-container"))return t;return null}function u(e,t){for(var n=document.querySelectorAll('svg[data-pdf-annotate-container="true"]'),r=0,a=n.length;r<a;r++){var u=n[r],i=u.getBoundingClientRect();if(o(e,t,i))return u}return null}function i(e,t){var n=u(e,t);if(n){for(var r=n.querySelectorAll("[data-pdf-annotate-type]"),a=0,i=r.length;a<i;a++){var s=r[a];if(o(e,t,d(s)))return s}return null}}function o(e,t,n){return t>=n.top&&t<=n.bottom&&e>=n.left&&e<=n.right}function d(e){var t=s(e),n=p(e),r=n.offsetLeft,a=n.offsetTop;return{top:t.top+a,left:t.left+r,right:t.right+r,bottom:t.bottom+a}}function s(e){var t=0,n=0,r=0,a=0,i=e.getBoundingClientRect(),o=16;switch(e.nodeName.toLowerCase()){case"path":var d=void 0,s=void 0,l=void 0,f=void 0;e.getAttribute("d").replace(/Z/,"").split("M").splice(1).forEach(function(e){var t=e.split(" ").map(function(e){return parseInt(e,10)});("undefined"==typeof d||t[0]<d)&&(d=t[0]),("undefined"==typeof s||t[2]>s)&&(s=t[2]),("undefined"==typeof l||t[1]<l)&&(l=t[1]),("undefined"==typeof f||t[3]>f)&&(f=t[3])}),t=f-l,n=s-d,r=d,a=l;break;case"line":t=parseInt(e.getAttribute("y2"),10)-parseInt(e.getAttribute("y1"),10),n=parseInt(e.getAttribute("x2"),10)-parseInt(e.getAttribute("x1"),10),r=parseInt(e.getAttribute("x1"),10),a=parseInt(e.getAttribute("y1"),10),0===t&&(t+=o,a-=o/2);break;case"text":t=i.height,n=i.width,r=parseInt(e.getAttribute("x"),10),a=parseInt(e.getAttribute("y"),10)-t;break;case"g":var h=p(e),m=h.offsetLeft,g=h.offsetTop;t=i.height,n=i.width,r=i.left-m,a=i.top-g,"strikeout"===e.getAttribute("data-pdf-annotate-type")&&(t+=o,a-=o/2);break;case"rect":case"svg":t=parseInt(e.getAttribute("height"),10),n=parseInt(e.getAttribute("width"),10),r=parseInt(e.getAttribute("x"),10),a=parseInt(e.getAttribute("y"),10)}var v={top:a,left:r,width:n,height:t,right:r+n,bottom:a+t};return["svg","g"].includes(e.nodeName.toLowerCase())||(v=c(u(i.left,i.top),v)),"svg"==e.nodeName.toLowerCase()&&$.browser.mozilla&&(v=c(u(i.left,i.top),v)),v}function c(e,t){var n={},r=g(e),a=r.viewport;return Object.keys(t).forEach(function(e){n[e]=t[e]*a.scale}),n}function l(e,t){var n={},r=g(e),a=r.viewport;return Object.keys(t).forEach(function(e){n[e]=t[e]/a.scale}),n}function f(e){for(var t=0,n=0,r=e;(r=r.parentNode)&&r!==document;)t+=r.scrollTop,n+=r.scrollLeft;return{scrollTop:t,scrollLeft:n}}function p(e){for(var t=e;(t=t.parentNode)&&t!==document&&"SVG"!==t.nodeName.toUpperCase(););var n=t.getBoundingClientRect();return{offsetLeft:n.left,offsetTop:n.top}}function h(){x.parentNode||document.head.appendChild(x)}function m(){x.parentNode&&x.parentNode.removeChild(x)}function g(e){return{documentId:e.getAttribute("data-pdf-annotate-document"),pageNumber:parseInt(e.getAttribute("data-pdf-annotate-page"),10),viewport:JSON.parse(e.getAttribute("data-pdf-annotate-viewport"))}}Object.defineProperty(t,"__esModule",{value:!0}),t.BORDER_COLOR=void 0,t.findSVGContainer=a,t.findSVGAtPoint=u,t.findAnnotationAtPoint=i,t.pointIntersectsRect=o,t.getOffsetAnnotationRect=d,t.getAnnotationRect=s,t.scaleUp=c,t.scaleDown=l,t.getScroll=f,t.getOffset=p,t.disableUserSelect=h,t.enableUserSelect=m,t.getMetadata=g;var v=n(7),b=r(v),x=(t.BORDER_COLOR="#00BFFF",(0,b["default"])({body:{"-webkit-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none"}}));x.setAttribute("data-pdf-annotate-user-select","true")},function(e,t){function n(e,t){return e+" {\n"+r(t)+"\n}"}function r(e){return Object.keys(e).map(function(t){return a(t,e[t])}).join("\n")}function a(e,t){return isNaN(t)||0==t||(t+="px"),u(e)+": "+t+";"}function u(e){return e.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()})}e.exports=function(e){var t=document.createElement("style"),r=Object.keys(e).map(function(t){return n(t,e[t])}).join("\n");return t.setAttribute("type","text/css"),t.appendChild(document.createTextNode(r)),t}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var o=n(9),d=r(o),s=n(36),c=r(s),l=n(2),f=r(l),p=n(37),h=n(38);d["default"].defaults.xsrfCookieName="csrftoken",d["default"].defaults.xsrfHeaderName="X-CSRFToken";var m=function(e){function t(){a(this,t);var e=d["default"].create({baseURL:"/pdfannotator",timeout:6e4,withCredentials:!0,headers:{Accept:"application/json","Content-Type":"application/json","Access-Control-Allow-Origin":"*"}});return u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,{getAnnotations:function(t){return e.get("/get-annotations/",{params:{fileUuid:p.documentId}}).then(function(e){return e.data})["catch"](function(e){console.log(e),alert("Une erreur est survenue et les annotations n'ont pas pu être téléchargées depuis le serveur.")})},getAnnotation:function(t,n){return e.get("/get-annotation/",{params:{fileUuid:p.documentId,annotationId:n}}).then(function(e){return e.data})},addAnnotation:function(t,n,r){return r["class"]="Annotation",r.page=n,r.uuid=(0,c["default"])(),e.post("/add-annotation/",{fileUuid:p.documentId,page:n,annotation:r}).then(function(e){return r})["catch"](function(e){console.log(e),alert("Une erreur est survenue et votre annotation n'a pas pu être enregistrée.")})},editAnnotation:function(t,n,r){return e.post("/update-annotation/",{fileUuid:p.documentId,annotationId:n,annotation:r}).then(function(e){return"point"===r.type&&(0,h.renderComments)(),e}).then(function(e){return r})["catch"](function(e){console.log(e),alert("Une erreur est survenue et l'annotation n'a pas pu être enregistrée.")})},deleteAnnotation:function(t,n){return e.post("/delete-annotation/",{annotationId:n,fileUuid:p.documentId}).then(function(e){return(0,h.renderComments)(),e}).then(function(e){return!0})["catch"](function(e){console.log(e),alert("Une erreur est survenue et l'annotation n'a pas pu être supprimée.")})},getComments:function(t){return e.get("/get-comments/",{params:{fileUuid:p.documentId}}).then(function(e){return e.data})},addComment:function(t,n,r){return e.post("/add-comment/",{fileUuid:p.documentId,annotationId:n,content:r}).then(function(e){return(0,h.renderComments)(),e}).then(function(e){return r})["catch"](function(e){console.log(e),alert("Une erreur est survenue et votre commentaire n'a pas pu être enregistré.")})},updateComment:function(t,n,r){return e.post("/update-comment/",{fileUuid:p.documentId,annotationId:n,comment:r}).then(function(e){return(0,h.renderComments)(),e}).then(function(e){return r})["catch"](function(e){console.log(e),alert("Une erreur est survenue et votre commentaire n'a pas pu être enregistrée.")})}}))}return i(t,e),t}(f["default"]);t["default"]=m,e.exports=t["default"]},function(e,t,n){e.exports=n(10)},function(e,t,n){"use strict";function r(e){var t=new i(e),n=u(i.prototype.request,t);return a.extend(n,i.prototype,t),a.extend(n,t),n}var a=n(11),u=n(12),i=n(14),o=n(15),d=r(o);d.Axios=i,d.create=function(e){return r(a.merge(o,e))},d.Cancel=n(33),d.CancelToken=n(34),d.isCancel=n(30),d.all=function(e){return Promise.all(e)},d.spread=n(35),e.exports=d,e.exports["default"]=d},function(e,t,n){"use strict";function r(e){return"[object Array]"===A.call(e)}function a(e){return"[object ArrayBuffer]"===A.call(e)}function u(e){return"undefined"!=typeof FormData&&e instanceof FormData}function i(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function o(e){return"string"==typeof e}function d(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function c(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===A.call(e)}function f(e){return"[object File]"===A.call(e)}function p(e){return"[object Blob]"===A.call(e)}function h(e){return"[object Function]"===A.call(e)}function m(e){return c(e)&&h(e.pipe)}function g(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function v(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function b(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function x(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,a=e.length;n<a;n++)t.call(null,e[n],n,e);else for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&t.call(null,e[u],u,e)}function y(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=y(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;n<r;n++)x(arguments[n],e);return t}function w(e,t,n){return x(t,function(t,r){n&&"function"==typeof t?e[r]=k(t,n):e[r]=t}),e}var k=n(12),_=n(13),A=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:a,isBuffer:_,isFormData:u,isArrayBufferView:i,isString:o,isNumber:d,isObject:c,isUndefined:s,isDate:l,isFile:f,isBlob:p,isFunction:h,isStream:m,isURLSearchParams:g,isStandardBrowserEnv:b,forEach:x,merge:y,extend:w,trim:v}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},function(e,t){function n(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function r(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&n(e.slice(0,0))}/*!
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PDFAnnotate=t():e.PDFAnnotate=t()}(this,function(){return function(e){function t(a){if(n[a])return n[a].exports;var r=n[a]={exports:{},id:a,loaded:!1};return e[a].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){pdfjsLib.getDocument(m.documentId).then(function(e){m.pdfDocument=e;var t=document.getElementById("viewer");t.innerHTML="",g=e._pdfInfo.numPages;for(var n=0;n<g;n++){var a=p.createPage(n+1);t.appendChild(a)}o["default"].getAnnotations(d.documentId).then(function(t){for(var n=function(n){e.getPage(n).then(function(){p.renderPage(n,t,m).then(function(e){var t=u(e,2),n=t[0],a=(t[1],n.getViewport(m.scale));h=a.height,$.browser.mozilla&&$(".textLayer>.endOfContent").remove()})})},a=1;a<=g;a++)n(a)})})}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){var n=[],a=!0,r=!1,u=void 0;try{for(var i,o=e[Symbol.iterator]();!(a=(i=o.next()).done)&&(n.push(i.value),!t||n.length!==t);a=!0);}catch(d){r=!0,u=d}finally{try{!a&&o["return"]&&o["return"]()}finally{if(r)throw u}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=n(1),o=a(i),d=n(37),s=n(39),c=(a(s),n(65)),l=a(c),f=n(38),p=o["default"].UI,h=void 0,m={documentId:d.documentUrl,pdfDocument:null,enhanceTextSelection:!0,scale:parseFloat(localStorage.getItem(d.documentId+"/scale"),10)||1};o["default"].setStoreAdapter(new o["default"].CRFPAStoreAdapter);var g=0;r();var v=function(e,t){var n=localStorage.getItem(m.documentId+"/tooltype")||"cursor",a=document.querySelector(".toolbar button.active");if(a)switch(a.classList.remove("active"),n){case"cursor":p.disableEdit();break;case"draw":p.disablePen();break;case"text":p.disableText();break;case"point":p.disablePoint();break;case"area":case"highlight":case"strikeout":p.disableRect()}switch(t&&t.classList.add("active"),n!==e&&localStorage.setItem(m.documentId+"/tooltype",e),n=e,e){case"cursor":p.enableEdit();break;case"draw":p.enablePen();break;case"text":p.enableText();break;case"point":p.enablePoint();break;case"area":case"highlight":case"strikeout":p.enableRect(e)}};o["default"].setActiveToolbarItem=v,d.readonly||(!function(){function e(){t(12,"#EF4437")}function t(e,t){p.setText(e,t)}e()}(),function(){function e(){for(var e=document.querySelector(".toolbar .pen-size"),n=0;n<20;n++)e.appendChild(new Option(n+1,n+1));t(localStorage.getItem(m.documentId+"/pen/size")||1,localStorage.getItem(m.documentId+"/pen/color")||"#000000"),(0,l["default"])(document.querySelector(".pen-color"),r,function(e){t(a,e)})}function t(e,t){var n=!1;if(a!==e&&(n=!0,a=e,localStorage.setItem(m.documentId+"/pen/size",a),document.querySelector(".toolbar .pen-size").value=a),r!==t){n=!0,r=t,localStorage.setItem(m.documentId+"/pen/color",r);var u=document.querySelector(".toolbar .pen-color.color-selected");u&&(u.classList.remove("color-selected"),u.removeAttribute("aria-selected")),u=document.querySelector('.toolbar .pen-color[data-color="'+t+'"]'),u&&(u.classList.add("color-selected"),u.setAttribute("aria-selected",!0))}n&&p.setPen(a,r)}function n(e){t(e.target.value,r)}var a=void 0,r=void 0;document.querySelector(".toolbar .pen-size").addEventListener("change",n),e()}(),function(){function e(e){"BUTTON"===e.target.nodeName&&v(e.target.getAttribute("data-tooltype"),e.target)}var t=localStorage.getItem(m.documentId+"/tooltype")||"cursor";t&&v(t,document.querySelector(".toolbar button[data-tooltype="+t+"]")),document.querySelector(".toolbar").addEventListener("click",e)}()),d.readonly&&p.enableEdit(),function(){function e(e,t){e=parseFloat(e,10),t=parseInt(t,10),m.scale===e&&m.rotate===t||(m.scale=e,m.rotate=t,localStorage.setItem(m.documentId+"/scale",m.scale),localStorage.setItem(m.documentId+"/rotate",m.rotate%360),r())}function t(t){e(t.target.value,m.rotate)}document.querySelector(".toolbar select.scale").value=m.scale,document.querySelector(".toolbar select.scale").addEventListener("change",t)}(),(0,f.renderComments)(d.documentId),t["default"]=o["default"],e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),u=a(r),i=n(8),o=a(i),d=n(64),s=a(d),c=n(50),l=a(c);t["default"]={StoreAdapter:u["default"],CRFPAStoreAdapter:o["default"],__storeAdapter:new u["default"],getStoreAdapter:function(){return this.__storeAdapter},setStoreAdapter:function(e){this.__storeAdapter=e},UI:l["default"],render:s["default"],getAnnotations:function(e){var t;return(t=this.getStoreAdapter()).getAnnotations.apply(t,arguments)}},e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}(),i=n(3),o=a(i),d=n(4),s=function(){function e(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r(this,e),Object.keys(n).forEach(function(e){"function"==typeof n[e]&&"function"==typeof t[e]&&(t[e]=n[e])})}return u(e,[{key:"__getAnnotations",value:function(e){(0,o["default"])("getAnnotations")}},{key:"getAnnotation",value:function(e,t){(0,o["default"])("getAnnotation")}},{key:"__addAnnotation",value:function(e,t,n){(0,o["default"])("addAnnotation")}},{key:"__editAnnotation",value:function(e,t,n){(0,o["default"])("editAnnotation")}},{key:"__deleteAnnotation",value:function(e,t){(0,o["default"])("deleteAnnotation")}},{key:"getComments",value:function(e,t){(0,o["default"])("getComments")}},{key:"__addComment",value:function(e,t,n){(0,o["default"])("addComment")}},{key:"__updateComment",value:function(e,t,n){(0,o["default"])("addComment")}},{key:"__deleteComment",value:function(e,t){(0,o["default"])("deleteComment")}},{key:"getAnnotations",get:function(){return this.__getAnnotations},set:function(e){this.__getAnnotations=function(t){return e.apply(void 0,arguments).then(function(e){return e})}}},{key:"addAnnotation",get:function(){return this.__addAnnotation},set:function(e){this.__addAnnotation=function(t,n,a){return e.apply(void 0,arguments).then(function(e){return(0,d.fireEvent)("annotation:add",t,n,e),e})}}},{key:"editAnnotation",get:function(){return this.__editAnnotation},set:function(e){this.__editAnnotation=function(t,n,a){return e.apply(void 0,arguments).then(function(e){return(0,d.fireEvent)("annotation:edit",t,n,e),e})}}},{key:"deleteAnnotation",get:function(){return this.__deleteAnnotation},set:function(e){this.__deleteAnnotation=function(t,n){return e.apply(void 0,arguments).then(function(e){return e&&(0,d.fireEvent)("annotation:delete",t,n),e})}}},{key:"addComment",get:function(){return this.__addComment},set:function(e){this.__addComment=function(t,n,a){return e.apply(void 0,arguments).then(function(e){return(0,d.fireEvent)("comment:add",t,n,e),e})}}},{key:"updateComment",get:function(){return this.__updateComment},set:function(e){this.__updateComment=function(t,n,a){return e.apply(void 0,arguments).then(function(e){return(0,d.fireEvent)("comment:updated",t,n,e),e})}}},{key:"deleteComment",get:function(){return this.__deleteComment},set:function(e){this.__deleteComment=function(t,n){return e.apply(void 0,arguments).then(function(e){return e&&(0,d.fireEvent)("comment:delete",t,n),e})}}}]),e}();t["default"]=s,e.exports=t["default"]},function(e,t){"use strict";function n(e){throw new Error(e+" is not implemented")}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n,e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c.emit.apply(c,arguments)}function u(){c.on.apply(c,arguments)}function i(){c.removeListener.apply(c,arguments)}Object.defineProperty(t,"__esModule",{value:!0}),t.fireEvent=r,t.addEventListener=u,t.removeEventListener=i;var o=n(5),d=a(o),s=n(6),c=new d["default"],l=void 0;document.addEventListener("click",function(e){if((0,s.findSVGAtPoint)(e.clientX,e.clientY)){var t=(0,s.findAnnotationAtPoint)(e.clientX,e.clientY);l&&l!==t&&c.emit("annotation:blur",l),t&&c.emit("annotation:click",t),l=t}})},function(e,t){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function a(e){return"function"==typeof e}function r(e){return"number"==typeof e}function u(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(e){if(!r(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},n.prototype.emit=function(e){var t,n,r,o,d,s;if(this._events||(this._events={}),"error"===e&&(!this._events.error||u(this._events.error)&&!this._events.error.length)){if(t=arguments[1],t instanceof Error)throw t;var c=new Error('Uncaught, unspecified "error" event. ('+t+")");throw c.context=t,c}if(n=this._events[e],i(n))return!1;if(a(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:o=Array.prototype.slice.call(arguments,1),n.apply(this,o)}else if(u(n))for(o=Array.prototype.slice.call(arguments,1),s=n.slice(),r=s.length,d=0;d<r;d++)s[d].apply(this,o);return!0},n.prototype.addListener=function(e,t){var r;if(!a(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,a(t.listener)?t.listener:t),this._events[e]?u(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,u(this._events[e])&&!this._events[e].warned&&(r=i(this._maxListeners)?n.defaultMaxListeners:this._maxListeners,r&&r>0&&this._events[e].length>r&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(e,t){function n(){this.removeListener(e,n),r||(r=!0,t.apply(this,arguments))}if(!a(t))throw TypeError("listener must be a function");var r=!1;return n.listener=t,this.on(e,n),this},n.prototype.removeListener=function(e,t){var n,r,i,o;if(!a(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(n=this._events[e],i=n.length,r=-1,n===t||a(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(u(n)){for(o=i;o-- >0;)if(n[o]===t||n[o].listener&&n[o].listener===t){r=o;break}if(r<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},n.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[e],a(n))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},n.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?a(this._events[e])?[this._events[e]]:this._events[e].slice():[]},n.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(a(t))return 1;if(t)return t.length}return 0},n.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){for(var t=e;(t=t.parentNode)&&t!==document;)if("SVG"===t.nodeName.toUpperCase()&&"true"===t.getAttribute("data-pdf-annotate-container"))return t;return null}function u(e,t){for(var n=document.querySelectorAll('svg[data-pdf-annotate-container="true"]'),a=0,r=n.length;a<r;a++){var u=n[a],i=u.getBoundingClientRect();if(o(e,t,i))return u}return null}function i(e,t){var n=u(e,t);if(n){for(var a=n.querySelectorAll("[data-pdf-annotate-type]"),r=0,i=a.length;r<i;r++){var s=a[r];if(o(e,t,d(s)))return s}return null}}function o(e,t,n){return t>=n.top&&t<=n.bottom&&e>=n.left&&e<=n.right}function d(e){var t=s(e),n=p(e),a=n.offsetLeft,r=n.offsetTop;return{top:t.top+r,left:t.left+a,right:t.right+a,bottom:t.bottom+r}}function s(e){var t=0,n=0,a=0,r=0,i=e.getBoundingClientRect(),o=16;switch(e.nodeName.toLowerCase()){case"path":var d=void 0,s=void 0,l=void 0,f=void 0;e.getAttribute("d").replace(/Z/,"").split("M").splice(1).forEach(function(e){var t=e.split(" ").map(function(e){return parseInt(e,10)});("undefined"==typeof d||t[0]<d)&&(d=t[0]),("undefined"==typeof s||t[2]>s)&&(s=t[2]),("undefined"==typeof l||t[1]<l)&&(l=t[1]),("undefined"==typeof f||t[3]>f)&&(f=t[3])}),t=f-l,n=s-d,a=d,r=l;break;case"line":t=parseInt(e.getAttribute("y2"),10)-parseInt(e.getAttribute("y1"),10),n=parseInt(e.getAttribute("x2"),10)-parseInt(e.getAttribute("x1"),10),a=parseInt(e.getAttribute("x1"),10),r=parseInt(e.getAttribute("y1"),10),0===t&&(t+=o,r-=o/2);break;case"text":t=i.height,n=i.width,a=parseInt(e.getAttribute("x"),10),r=parseInt(e.getAttribute("y"),10)-t;break;case"g":var h=p(e),m=h.offsetLeft,g=h.offsetTop;t=i.height,n=i.width,a=i.left-m,r=i.top-g,"strikeout"===e.getAttribute("data-pdf-annotate-type")&&(t+=o,r-=o/2);break;case"rect":case"svg":t=parseInt(e.getAttribute("height"),10),n=parseInt(e.getAttribute("width"),10),a=parseInt(e.getAttribute("x"),10),r=parseInt(e.getAttribute("y"),10)}var v={top:r,left:a,width:n,height:t,right:a+n,bottom:r+t};return["svg","g"].includes(e.nodeName.toLowerCase())||(v=c(u(i.left,i.top),v)),"svg"==e.nodeName.toLowerCase()&&$.browser.mozilla&&(v=c(u(i.left,i.top),v)),v}function c(e,t){var n={},a=g(e),r=a.viewport;return Object.keys(t).forEach(function(e){n[e]=t[e]*r.scale}),n}function l(e,t){var n={},a=g(e),r=a.viewport;return Object.keys(t).forEach(function(e){n[e]=t[e]/r.scale}),n}function f(e){for(var t=0,n=0,a=e;(a=a.parentNode)&&a!==document;)t+=a.scrollTop,n+=a.scrollLeft;return{scrollTop:t,scrollLeft:n}}function p(e){for(var t=e;(t=t.parentNode)&&t!==document&&"SVG"!==t.nodeName.toUpperCase(););var n=t.getBoundingClientRect();return{offsetLeft:n.left,offsetTop:n.top}}function h(){x.parentNode||document.head.appendChild(x)}function m(){x.parentNode&&x.parentNode.removeChild(x)}function g(e){return{documentId:e.getAttribute("data-pdf-annotate-document"),pageNumber:parseInt(e.getAttribute("data-pdf-annotate-page"),10),viewport:JSON.parse(e.getAttribute("data-pdf-annotate-viewport"))}}Object.defineProperty(t,"__esModule",{value:!0}),t.BORDER_COLOR=void 0,t.findSVGContainer=r,t.findSVGAtPoint=u,t.findAnnotationAtPoint=i,t.pointIntersectsRect=o,t.getOffsetAnnotationRect=d,t.getAnnotationRect=s,t.scaleUp=c,t.scaleDown=l,t.getScroll=f,t.getOffset=p,t.disableUserSelect=h,t.enableUserSelect=m,t.getMetadata=g;var v=n(7),b=a(v),x=(t.BORDER_COLOR="#00BFFF",(0,b["default"])({body:{"-webkit-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none"}}));x.setAttribute("data-pdf-annotate-user-select","true")},function(e,t){function n(e,t){return e+" {\n"+a(t)+"\n}"}function a(e){return Object.keys(e).map(function(t){return r(t,e[t])}).join("\n")}function r(e,t){return isNaN(t)||0==t||(t+="px"),u(e)+": "+t+";"}function u(e){return e.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()})}e.exports=function(e){var t=document.createElement("style"),a=Object.keys(e).map(function(t){return n(t,e[t])}).join("\n");return t.setAttribute("type","text/css"),t.appendChild(document.createTextNode(a)),t}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var o=n(9),d=a(o),s=n(36),c=a(s),l=n(2),f=a(l),p=n(37),h=n(38);d["default"].defaults.xsrfCookieName="csrftoken",d["default"].defaults.xsrfHeaderName="X-CSRFToken";var m=function(e){function t(){r(this,t);var e=d["default"].create({baseURL:"/pdfannotator",timeout:6e4,withCredentials:!0,headers:{Accept:"application/json","Content-Type":"application/json","Access-Control-Allow-Origin":"*"}});return u(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,{getAnnotations:function(t){return e.get("/get-annotations/",{params:{fileUuid:p.documentId}}).then(function(e){return e.data})["catch"](function(e){console.log(e),alert("Une erreur est survenue et les annotations n'ont pas pu être téléchargées depuis le serveur.")})},getAnnotation:function(t,n){return e.get("/get-annotation/",{params:{fileUuid:p.documentId,annotationId:n}}).then(function(e){return e.data})},addAnnotation:function(t,n,a){return a["class"]="Annotation",a.page=n,a.uuid=(0,c["default"])(),e.post("/add-annotation/",{fileUuid:p.documentId,page:n,annotation:a}).then(function(e){return a})["catch"](function(e){console.log(e),alert("Une erreur est survenue et votre annotation n'a pas pu être enregistrée.")})},editAnnotation:function(t,n,a){return e.post("/update-annotation/",{fileUuid:p.documentId,annotationId:n,annotation:a}).then(function(e){return"point"===a.type&&(0,h.renderComments)(),e}).then(function(e){return a})["catch"](function(e){console.log(e),alert("Une erreur est survenue et l'annotation n'a pas pu être enregistrée.")})},deleteAnnotation:function(t,n){return e.post("/delete-annotation/",{annotationId:n,fileUuid:p.documentId}).then(function(e){return(0,h.renderComments)(),e}).then(function(e){return!0})["catch"](function(e){console.log(e),alert("Une erreur est survenue et l'annotation n'a pas pu être supprimée.")})},getComments:function(t){return e.get("/get-comments/",{params:{fileUuid:p.documentId}}).then(function(e){return e.data})},addComment:function(t,n,a){return e.post("/add-comment/",{fileUuid:p.documentId,annotationId:n,content:a}).then(function(e){return(0,h.renderComments)(),e}).then(function(e){return a})["catch"](function(e){console.log(e),alert("Une erreur est survenue et votre commentaire n'a pas pu être enregistré.")})},updateComment:function(t,n,a){return e.post("/update-comment/",{fileUuid:p.documentId,annotationId:n,comment:a}).then(function(e){return(0,h.renderComments)(),e}).then(function(e){return a})["catch"](function(e){console.log(e),alert("Une erreur est survenue et votre commentaire n'a pas pu être enregistrée.")})}}))}return i(t,e),t}(f["default"]);t["default"]=m,e.exports=t["default"]},function(e,t,n){e.exports=n(10)},function(e,t,n){"use strict";function a(e){var t=new i(e),n=u(i.prototype.request,t);return r.extend(n,i.prototype,t),r.extend(n,t),n}var r=n(11),u=n(12),i=n(14),o=n(15),d=a(o);d.Axios=i,d.create=function(e){return a(r.merge(o,e))},d.Cancel=n(33),d.CancelToken=n(34),d.isCancel=n(30),d.all=function(e){return Promise.all(e)},d.spread=n(35),e.exports=d,e.exports["default"]=d},function(e,t,n){"use strict";function a(e){return"[object Array]"===A.call(e)}function r(e){return"[object ArrayBuffer]"===A.call(e)}function u(e){return"undefined"!=typeof FormData&&e instanceof FormData}function i(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function o(e){return"string"==typeof e}function d(e){return"number"==typeof e}function s(e){return"undefined"==typeof e}function c(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===A.call(e)}function f(e){return"[object File]"===A.call(e)}function p(e){return"[object Blob]"===A.call(e)}function h(e){return"[object Function]"===A.call(e)}function m(e){return c(e)&&h(e.pipe)}function g(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function v(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function b(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function x(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),a(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&t.call(null,e[u],u,e)}function y(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=y(t[n],e):t[n]=e}for(var t={},n=0,a=arguments.length;n<a;n++)x(arguments[n],e);return t}function w(e,t,n){return x(t,function(t,a){n&&"function"==typeof t?e[a]=k(t,n):e[a]=t}),e}var k=n(12),_=n(13),A=Object.prototype.toString;e.exports={isArray:a,isArrayBuffer:r,isBuffer:_,isFormData:u,isArrayBufferView:i,isString:o,isNumber:d,isObject:c,isUndefined:s,isDate:l,isFile:f,isBlob:p,isFunction:h,isStream:m,isURLSearchParams:g,isStandardBrowserEnv:b,forEach:x,merge:y,extend:w,trim:v}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),a=0;a<n.length;a++)n[a]=arguments[a];return e.apply(t,n)}}},function(e,t){function n(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function a(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&n(e.slice(0,0))}/*!
         * Determine if an object is a Buffer
         *
         * @author   Feross Aboukhadijeh <https://feross.org>
         * @license  MIT
         */
-e.exports=function(e){return null!=e&&(n(e)||r(e)||!!e._isBuffer)}},function(e,t,n){"use strict";function r(e){this.defaults=e,this.interceptors={request:new i,response:new i}}var a=n(15),u=n(11),i=n(27),o=n(28);r.prototype.request=function(e){"string"==typeof e&&(e=u.merge({url:arguments[0]},arguments[1])),e=u.merge(a,{method:"get"},this.defaults,e),e.method=e.method.toLowerCase();var t=[o,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n},u.forEach(["delete","get","head","options"],function(e){r.prototype[e]=function(t,n){return this.request(u.merge(n||{},{method:e,url:t}))}}),u.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(u.merge(r||{},{method:e,url:t,data:n}))}}),e.exports=r},function(e,t,n){(function(t){"use strict";function r(e,t){!u.isUndefined(e)&&u.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function a(){var e;return"undefined"!=typeof XMLHttpRequest?e=n(18):"undefined"!=typeof t&&(e=n(18)),e}var u=n(11),i=n(17),o={"Content-Type":"application/x-www-form-urlencoded"},d={adapter:a(),transformRequest:[function(e,t){return i(t,"Content-Type"),u.isFormData(e)||u.isArrayBuffer(e)||u.isBuffer(e)||u.isStream(e)||u.isFile(e)||u.isBlob(e)?e:u.isArrayBufferView(e)?e.buffer:u.isURLSearchParams(e)?(r(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):u.isObject(e)?(r(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(t){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};d.headers={common:{Accept:"application/json, text/plain, */*"}},u.forEach(["delete","get","head"],function(e){d.headers[e]={}}),u.forEach(["post","put","patch"],function(e){d.headers[e]=u.merge(o)}),e.exports=d}).call(t,n(16))},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function a(e){if(c===setTimeout)return setTimeout(e,0);if((c===n||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function u(e){if(l===clearTimeout)return clearTimeout(e);if((l===r||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function i(){m&&p&&(m=!1,p.length?h=p.concat(h):g=-1,h.length&&o())}function o(){if(!m){var e=a(i);m=!0;for(var t=h.length;t;){for(p=h,h=[];++g<t;)p&&p[g].run();g=-1,t=h.length}p=null,m=!1,u(e)}}function d(e,t){this.fun=e,this.array=t}function s(){}var c,l,f=e.exports={};!function(){try{c="function"==typeof setTimeout?setTimeout:n}catch(e){c=n}try{l="function"==typeof clearTimeout?clearTimeout:r}catch(e){l=r}}();var p,h=[],m=!1,g=-1;f.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];h.push(new d(e,t)),1!==h.length||m||a(o)},d.prototype.run=function(){this.fun.apply(null,this.array)},f.title="browser",f.browser=!0,f.env={},f.argv=[],f.version="",f.versions={},f.on=s,f.addListener=s,f.once=s,f.off=s,f.removeListener=s,f.removeAllListeners=s,f.emit=s,f.prependListener=s,f.prependOnceListener=s,f.listeners=function(e){return[]},f.binding=function(e){throw new Error("process.binding is not supported")},f.cwd=function(){return"/"},f.chdir=function(e){throw new Error("process.chdir is not supported")},f.umask=function(){return 0}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){(function(t){"use strict";var r=n(11),a=n(19),u=n(22),i=n(23),o=n(24),d=n(20),s="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(25);e.exports=function(e){return new Promise(function(c,l){var f=e.data,p=e.headers;r.isFormData(f)&&delete p["Content-Type"];var h=new XMLHttpRequest,m="onreadystatechange",g=!1;if("test"===t.env.NODE_ENV||"undefined"==typeof window||!window.XDomainRequest||"withCredentials"in h||o(e.url)||(h=new window.XDomainRequest,m="onload",g=!0,h.onprogress=function(){},h.ontimeout=function(){}),e.auth){var v=e.auth.username||"",b=e.auth.password||"";p.Authorization="Basic "+s(v+":"+b)}if(h.open(e.method.toUpperCase(),u(e.url,e.params,e.paramsSerializer),!0),h.timeout=e.timeout,h[m]=function(){if(h&&(4===h.readyState||g)&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))){var t="getAllResponseHeaders"in h?i(h.getAllResponseHeaders()):null,n=e.responseType&&"text"!==e.responseType?h.response:h.responseText,r={data:n,status:1223===h.status?204:h.status,statusText:1223===h.status?"No Content":h.statusText,headers:t,config:e,request:h};a(c,l,r),h=null}},h.onerror=function(){l(d("Network Error",e,null,h)),h=null},h.ontimeout=function(){l(d("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",h)),h=null},r.isStandardBrowserEnv()){var x=n(26),y=(e.withCredentials||o(e.url))&&e.xsrfCookieName?x.read(e.xsrfCookieName):void 0;y&&(p[e.xsrfHeaderName]=y)}if("setRequestHeader"in h&&r.forEach(p,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete p[t]:h.setRequestHeader(t,e)}),e.withCredentials&&(h.withCredentials=!0),e.responseType)try{h.responseType=e.responseType}catch(w){if("json"!==e.responseType)throw w}"function"==typeof e.onDownloadProgress&&h.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){h&&(h.abort(),l(e),h=null)}),void 0===f&&(f=null),h.send(f)})}}).call(t,n(16))},function(e,t,n){"use strict";var r=n(20);e.exports=function(e,t,n){var a=n.config.validateStatus;n.status&&a&&!a(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var r=n(21);e.exports=function(e,t,n,a,u){var i=new Error(e);return r(i,t,n,a,u)}},function(e,t){"use strict";e.exports=function(e,t,n,r,a){return e.config=t,n&&(e.code=n),e.request=r,e.response=a,e}},function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var a=n(11);e.exports=function(e,t,n){if(!t)return e;var u;if(n)u=n(t);else if(a.isURLSearchParams(t))u=t.toString();else{var i=[];a.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(a.isArray(e)?t+="[]":e=[e],a.forEach(e,function(e){a.isDate(e)?e=e.toISOString():a.isObject(e)&&(e=JSON.stringify(e)),i.push(r(t)+"="+r(e))}))}),u=i.join("&")}return u&&(e+=(e.indexOf("?")===-1?"?":"&")+u),e}},function(e,t,n){"use strict";var r=n(11),a=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,u,i={};return e?(r.forEach(e.split("\n"),function(e){if(u=e.indexOf(":"),t=r.trim(e.substr(0,u)).toLowerCase(),n=r.trim(e.substr(u+1)),t){if(i[t]&&a.indexOf(t)>=0)return;"set-cookie"===t?i[t]=(i[t]?i[t]:[]).concat([n]):i[t]=i[t]?i[t]+", "+n:n}}),i):i}},function(e,t,n){"use strict";var r=n(11);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(a.setAttribute("href",t),t=a.href),a.setAttribute("href",t),{href:a.href,protocol:a.protocol?a.protocol.replace(/:$/,""):"",host:a.host,search:a.search?a.search.replace(/^\?/,""):"",hash:a.hash?a.hash.replace(/^#/,""):"",hostname:a.hostname,port:a.port,pathname:"/"===a.pathname.charAt(0)?a.pathname:"/"+a.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),a=document.createElement("a");return t=e(window.location.href),function(n){var a=r.isString(n)?e(n):n;return a.protocol===t.protocol&&a.host===t.host}}():function(){return function(){return!0}}()},function(e,t){"use strict";function n(){this.message="String contains an invalid character"}function r(e){for(var t,r,u=String(e),i="",o=0,d=a;u.charAt(0|o)||(d="=",o%1);i+=d.charAt(63&t>>8-o%1*8)){if(r=u.charCodeAt(o+=.75),r>255)throw new n;t=t<<8|r}return i}var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t,n){"use strict";var r=n(11);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,a,u,i){var o=[];o.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),r.isString(a)&&o.push("path="+a),r.isString(u)&&o.push("domain="+u),i===!0&&o.push("secure"),document.cookie=o.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";function r(){this.handlers=[]}var a=n(11);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){a.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t,n){"use strict";function r(e){e.cancelToken&&e.cancelToken.throwIfRequested()}var a=n(11),u=n(29),i=n(30),o=n(15),d=n(31),s=n(32);e.exports=function(e){r(e),e.baseURL&&!d(e.url)&&(e.url=s(e.baseURL,e.url)),e.headers=e.headers||{},e.data=u(e.data,e.headers,e.transformRequest),e.headers=a.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),a.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=e.adapter||o.adapter;return t(e).then(function(t){return r(e),t.data=u(t.data,t.headers,e.transformResponse),t},function(t){return i(t)||(r(e),t&&t.response&&(t.response.data=u(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new a(e),t(n.reason))})}var a=n(33);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e,t){"use strict";function n(e){var t=16*Math.random()|0,n="x"==e?t:3&t|8;return n.toString(16)}function r(){return u.replace(a,n)}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var a=/[xy]/g,u="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";e.exports=t["default"]},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.documentUrl=document.getElementById("pdf-data").dataset.filepath,t.documentId=document.getElementById("pdf-data").dataset.uuid,t.readonly="True"===document.getElementById("pdf-data").dataset.readonly},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){p["default"].getStoreAdapter().getComments(e).then(function(e){b.html(""),x.hide(),e.forEach(u)})}function u(e){var t=$("<div></div>"),n=$('<div class="view"></div>');if(t.addClass("comment-list-item"),t.attr("uuid",e.annotation),n.html(m["default"].autoLink(m["default"].htmlEscape(e.content).replace(/\n/g,"<br/>"))),n.bind("click",i),!v.readonly){var r=$("<button>Modifier</button>");r.bind("click",s),n.append($("<br/>")),n.append(r)}if(t.append(n),!v.readonly){var a=$("<textarea></textarea>");a.text(e.content);var u=$('<div class="edit" style="display:none">'),c=$("<button>Enregistrer</button>");c.bind("click",o);var l=$("<button>Annuler</button>");l.bind("click",d),u.append(a),u.append(c),u.append(l),t.append(u)}b.append(t)}function i(e){var t=$(e.target).closest(".comment-list-item");l(t.attr("uuid"))}function o(e){e.preventDefault();var t=$(e.target),n=t.closest(".comment-list-item"),r=n.attr("uuid"),a=n.find("textarea").val(),u=$("#pdf-data").data("uuid");p["default"].getStoreAdapter().updateComment(u,r,a).then(function(t){d(e)})}function d(e){e.preventDefault();var t=$(e.target),n=t.closest(".comment-list-item"),r=n.find(".view"),a=n.find(".edit");a.hide(),r.show()}function s(e){e.preventDefault();var t=$(e.target),n=t.closest(".comment-list-item"),r=n.find(".view"),a=n.find(".edit");a.show(),a.find("textarea").width(r.width()-10).height(r.height()+20),r.hide()}function c(e){var t=e.offset().top;if(!e.is(":visible")){e.css({visibility:"hidden"}).show();var t=e.offset().top;e.css({visibility:"",display:""})}var n=$(window).scrollTop(),r=n+window.innerHeight;return!(t<n||t>r)||(e.hasClass("comment-list-item")?$(".comment-list-container").animate({scrollTop:t-window.innerHeight/3},300):$("#content-wrapper").animate({scrollTop:t-window.innerHeight/3},300),!1)}function l(e){var t=$(".comment-list-item[uuid="+e+"]");$(".comment-list-item").removeClass("selected"),t.addClass("selected");var n=$("[data-pdf-annotate-id="+e+"]")[0];(0,g.createEditOverlay)(n),c($(n)),c(t)}Object.defineProperty(t,"__esModule",{value:!0}),t.renderComments=a,t.selectComment=l;var f=n(1),p=r(f),h=n(39),m=r(h),g=(n(4),n(40)),v=(n(6),n(37)),b=$("#comment-wrapper .comment-list-container"),x=$("#comment-wrapper .comment-list-form")},function(e,t,n){var r,a,u;!function(){function n(e,t){return t=t||"","string"!=typeof e&&(e.global&&t.indexOf("g")<0&&(t+="g"),e.ignoreCase&&t.indexOf("i")<0&&(t+="i"),e.multiline&&t.indexOf("m")<0&&(t+="m"),e=e.source),new RegExp(e.replace(/#\{(\w+)\}/g,function(e,t){var n=s.txt.regexen[t]||"";return"string"!=typeof n&&(n=n.source),n}),t)}function i(e,t){return e.replace(/#\{(\w+)\}/g,function(e,n){return t[n]||""})}function o(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function d(e,t,n){return n?!e||e.match(t)&&RegExp["$&"]===e:"string"==typeof e&&e.match(t)&&RegExp["$&"]===e}if("undefined"==typeof s||null===s)var s={};s.txt={},s.txt.regexen={};var c={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#39;"};s.txt.htmlEscape=function(e){return e&&e.replace(/[&"'><]/g,function(e){return c[e]})},s.txt.regexSupplant=n,s.txt.stringSupplant=i,s.txt.regexen.spaces_group=/\x09-\x0D\x20\x85\xA0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000/,s.txt.regexen.spaces=n(/[#{spaces_group}]/),s.txt.regexen.invalid_chars_group=/\uFFFE\uFEFF\uFFFF\u202A-\u202E/,s.txt.regexen.invalid_chars=n(/[#{invalid_chars_group}]/),s.txt.regexen.punct=/\!'#%&'\(\)*\+,\\\-\.\/:;<=>\?@\[\]\^_{|}~\$/,s.txt.regexen.rtl_chars=/[\u0600-\u06FF]|[\u0750-\u077F]|[\u0590-\u05FF]|[\uFE70-\uFEFF]/gm,s.txt.regexen.non_bmp_code_pairs=/[\uD800-\uDBFF][\uDC00-\uDFFF]/gm,s.txt.regexen.latinAccentChars=/\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u024F\u0253\u0254\u0256\u0257\u0259\u025B\u0263\u0268\u026F\u0272\u0289\u028B\u02BB\u0300-\u036F\u1E00-\u1EFF/,s.txt.regexen.bmpLetterAndMarks=/A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u052f\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u065f\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06ef\u06fa-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07ca-\u07f5\u07fa\u0800-\u082d\u0840-\u085b\u08a0-\u08b2\u08e4-\u0963\u0971-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09f0\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a70-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58\u0c59\u0c60-\u0c63\u0c81-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0cf1\u0cf2\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d57\u0d60-\u0d63\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0edc-\u0edf\u0f00\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u103f\u1050-\u108f\u109a-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16f1-\u16f8\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17d3\u17d7\u17dc\u17dd\u180b-\u180d\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f\u1aa7\u1ab0-\u1abe\u1b00-\u1b4b\u1b6b-\u1b73\u1b80-\u1baf\u1bba-\u1bf3\u1c00-\u1c37\u1c4d-\u1c4f\u1c5a-\u1c7d\u1cd0-\u1cd2\u1cd4-\u1cf6\u1cf8\u1cf9\u1d00-\u1df5\u1dfc-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u20d0-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2183\u2184\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005\u3006\u302a-\u302f\u3031-\u3035\u303b\u303c\u3041-\u3096\u3099\u309a\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua672\ua674-\ua67d\ua67f-\ua69d\ua69f-\ua6e5\ua6f0\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua7ad\ua7b0\ua7b1\ua7f7-\ua827\ua840-\ua873\ua880-\ua8c4\ua8e0-\ua8f7\ua8fb\ua90a-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf\ua9e0-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa60-\uaa76\uaa7a-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab5f\uab64\uab65\uabc0-\uabea\uabec\uabed\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf870-\uf87f\uf882\uf884-\uf89f\uf8b8\uf8c1-\uf8d6\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe2d\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc/,s.txt.regexen.astralLetterAndMarks=/\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\uddfd\ude80-\ude9c\udea0-\uded0\udee0\udf00-\udf1f\udf30-\udf40\udf42-\udf49\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude38-\ude3a\ude3f\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee6\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48]|\ud804[\udc00-\udc46\udc7f-\udcba\udcd0-\udce8\udd00-\udd34\udd50-\udd73\udd76\udd80-\uddc4\uddda\ude00-\ude11\ude13-\ude37\udeb0-\udeea\udf01-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3c-\udf44\udf47\udf48\udf4b-\udf4d\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]|\ud805[\udc80-\udcc5\udcc7\udd80-\uddb5\uddb8-\uddc0\ude00-\ude40\ude44\ude80-\udeb7]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud808[\udc00-\udf98]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udef0-\udef4\udf00-\udf36\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50-\udf7e\udf8f-\udf9f]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9d\udc9e]|\ud834[\udd65-\udd69\udd6d-\udd72\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud83a[\udc00-\udcc4\udcd0-\udcd6]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d]|\ud87e[\udc00-\ude1d]|\udb40[\udd00-\uddef]/,s.txt.regexen.bmpNumerals=/0-9\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0de6-\u0def\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\ua9f0-\ua9f9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19/,s.txt.regexen.astralNumerals=/\ud801[\udca0-\udca9]|\ud804[\udc66-\udc6f\udcf0-\udcf9\udd36-\udd3f\uddd0-\uddd9\udef0-\udef9]|\ud805[\udcd0-\udcd9\ude50-\ude59\udec0-\udec9]|\ud806[\udce0-\udce9]|\ud81a[\ude60-\ude69\udf50-\udf59]|\ud835[\udfce-\udfff]/,s.txt.regexen.hashtagSpecialChars=/_\u200c\u200d\ua67e\u05be\u05f3\u05f4\uff5e\u301c\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\xb7/,s.txt.regexen.hashSigns=/[##]/,s.txt.regexen.hashtagAlpha=n(/(?:[#{bmpLetterAndMarks}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}))/),s.txt.regexen.hashtagAlphaNumeric=n(/(?:[#{bmpLetterAndMarks}#{bmpNumerals}#{hashtagSpecialChars}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}|#{astralNumerals}))/),s.txt.regexen.endHashtagMatch=n(/^(?:#{hashSigns}|:\/\/)/),s.txt.regexen.codePoint=/(?:[^\uD800-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF])/,s.txt.regexen.hashtagBoundary=n(/(?:^|\uFE0E|\uFE0F|$|(?!#{hashtagAlphaNumeric}|&)#{codePoint})/),s.txt.regexen.validHashtag=n(/(#{hashtagBoundary})(#{hashSigns})(?!\uFE0F|\u20E3)(#{hashtagAlphaNumeric}*#{hashtagAlpha}#{hashtagAlphaNumeric}*)/gi),s.txt.regexen.validMentionPrecedingChars=/(?:^|[^a-zA-Z0-9_!#$%&*@@]|(?:^|[^a-zA-Z0-9_+~.-])(?:rt|RT|rT|Rt):?)/,s.txt.regexen.atSigns=/[@@]/,s.txt.regexen.validMentionOrList=n("(#{validMentionPrecedingChars})(#{atSigns})([a-zA-Z0-9_]{1,20})(/[a-zA-Z][a-zA-Z0-9_-]{0,24})?","g"),s.txt.regexen.validReply=n(/^(?:#{spaces})*#{atSigns}([a-zA-Z0-9_]{1,20})/),s.txt.regexen.endMentionMatch=n(/^(?:#{atSigns}|[#{latinAccentChars}]|:\/\/)/),s.txt.regexen.validUrlPrecedingChars=n(/(?:[^A-Za-z0-9@@$###{invalid_chars_group}]|^)/),s.txt.regexen.invalidUrlWithoutProtocolPrecedingChars=/[-_.\/]$/,s.txt.regexen.invalidDomainChars=i("#{punct}#{spaces_group}#{invalid_chars_group}",s.txt.regexen),s.txt.regexen.validDomainChars=n(/[^#{invalidDomainChars}]/),s.txt.regexen.validSubdomain=n(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\.)/),s.txt.regexen.validDomainName=n(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\.)/),s.txt.regexen.validGTLD=n(RegExp("(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@]|$))")),
-s.txt.regexen.validCCTLD=n(RegExp("(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@]|$))")),s.txt.regexen.validPunycode=/(?:xn--[0-9a-z]+)/,s.txt.regexen.validSpecialCCTLD=/(?:(?:co|tv)(?=[^0-9a-zA-Z@]|$))/,s.txt.regexen.validDomain=n(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/),s.txt.regexen.validAsciiDomain=n(/(?:(?:[\-a-z0-9#{latinAccentChars}]+)\.)+(?:#{validGTLD}|#{validCCTLD}|#{validPunycode})/gi),s.txt.regexen.invalidShortDomain=n(/^#{validDomainName}#{validCCTLD}$/i),s.txt.regexen.validSpecialShortDomain=n(/^#{validDomainName}#{validSpecialCCTLD}$/i),s.txt.regexen.validPortNumber=/[0-9]+/,s.txt.regexen.cyrillicLettersAndMarks=/\u0400-\u04FF/,s.txt.regexen.validGeneralUrlPathChars=n(/[a-z#{cyrillicLettersAndMarks}0-9!\*';:=\+,\.\$\/%#\[\]\-_~@\|&#{latinAccentChars}]/i),s.txt.regexen.validUrlBalancedParens=n("\\((?:#{validGeneralUrlPathChars}+|(?:#{validGeneralUrlPathChars}*\\(#{validGeneralUrlPathChars}+\\)#{validGeneralUrlPathChars}*))\\)","i"),s.txt.regexen.validUrlPathEndingChars=n(/[\+\-a-z#{cyrillicLettersAndMarks}0-9=_#\/#{latinAccentChars}]|(?:#{validUrlBalancedParens})/i),s.txt.regexen.validUrlPath=n("(?:(?:#{validGeneralUrlPathChars}*(?:#{validUrlBalancedParens}#{validGeneralUrlPathChars}*)*#{validUrlPathEndingChars})|(?:@#{validGeneralUrlPathChars}+/))","i"),s.txt.regexen.validUrlQueryChars=/[a-z0-9!?\*'@\(\);:&=\+\$\/%#\[\]\-_\.,~|]/i,s.txt.regexen.validUrlQueryEndingChars=/[a-z0-9_&=#\/]/i,s.txt.regexen.extractUrl=n("((#{validUrlPrecedingChars})((https?:\\/\\/)?(#{validDomain})(?::(#{validPortNumber}))?(\\/#{validUrlPath}*)?(\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?))","gi"),s.txt.regexen.validTcoUrl=/^https?:\/\/t\.co\/[a-z0-9]+/i,s.txt.regexen.urlHasProtocol=/^https?:\/\//i,s.txt.regexen.urlHasHttps=/^https:\/\//i,s.txt.regexen.cashtag=/[a-z]{1,6}(?:[._][a-z]{1,2})?/i,s.txt.regexen.validCashtag=n("(^|#{spaces})(\\$)(#{cashtag})(?=$|\\s|[#{punct}])","gi"),s.txt.regexen.validateUrlUnreserved=/[a-z\u0400-\u04FF0-9\-._~]/i,s.txt.regexen.validateUrlPctEncoded=/(?:%[0-9a-f]{2})/i,s.txt.regexen.validateUrlSubDelims=/[!$&'()*+,;=]/i,s.txt.regexen.validateUrlPchar=n("(?:#{validateUrlUnreserved}|#{validateUrlPctEncoded}|#{validateUrlSubDelims}|[:|@])","i"),s.txt.regexen.validateUrlScheme=/(?:[a-z][a-z0-9+\-.]*)/i,s.txt.regexen.validateUrlUserinfo=n("(?:#{validateUrlUnreserved}|#{validateUrlPctEncoded}|#{validateUrlSubDelims}|:)*","i"),s.txt.regexen.validateUrlDecOctet=/(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))/i,s.txt.regexen.validateUrlIpv4=n(/(?:#{validateUrlDecOctet}(?:\.#{validateUrlDecOctet}){3})/i),s.txt.regexen.validateUrlIpv6=/(?:\[[a-f0-9:\.]+\])/i,s.txt.regexen.validateUrlIp=n("(?:#{validateUrlIpv4}|#{validateUrlIpv6})","i"),s.txt.regexen.validateUrlSubDomainSegment=/(?:[a-z0-9](?:[a-z0-9_\-]*[a-z0-9])?)/i,s.txt.regexen.validateUrlDomainSegment=/(?:[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?)/i,s.txt.regexen.validateUrlDomainTld=/(?:[a-z](?:[a-z0-9\-]*[a-z0-9])?)/i,s.txt.regexen.validateUrlDomain=n(/(?:(?:#{validateUrlSubDomainSegment}\.)*(?:#{validateUrlDomainSegment}\.)#{validateUrlDomainTld})/i),s.txt.regexen.validateUrlHost=n("(?:#{validateUrlIp}|#{validateUrlDomain})","i"),s.txt.regexen.validateUrlUnicodeSubDomainSegment=/(?:(?:[a-z0-9]|[^\u0000-\u007f])(?:(?:[a-z0-9_\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i,s.txt.regexen.validateUrlUnicodeDomainSegment=/(?:(?:[a-z0-9]|[^\u0000-\u007f])(?:(?:[a-z0-9\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i,s.txt.regexen.validateUrlUnicodeDomainTld=/(?:(?:[a-z]|[^\u0000-\u007f])(?:(?:[a-z0-9\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i,s.txt.regexen.validateUrlUnicodeDomain=n(/(?:(?:#{validateUrlUnicodeSubDomainSegment}\.)*(?:#{validateUrlUnicodeDomainSegment}\.)#{validateUrlUnicodeDomainTld})/i),s.txt.regexen.validateUrlUnicodeHost=n("(?:#{validateUrlIp}|#{validateUrlUnicodeDomain})","i"),s.txt.regexen.validateUrlPort=/[0-9]{1,5}/,s.txt.regexen.validateUrlUnicodeAuthority=n("(?:(#{validateUrlUserinfo})@)?(#{validateUrlUnicodeHost})(?::(#{validateUrlPort}))?","i"),s.txt.regexen.validateUrlAuthority=n("(?:(#{validateUrlUserinfo})@)?(#{validateUrlHost})(?::(#{validateUrlPort}))?","i"),s.txt.regexen.validateUrlPath=n(/(\/#{validateUrlPchar}*)*/i),s.txt.regexen.validateUrlQuery=n(/(#{validateUrlPchar}|\/|\?)*/i),s.txt.regexen.validateUrlFragment=n(/(#{validateUrlPchar}|\/|\?)*/i),s.txt.regexen.validateUrlUnencoded=n("^(?:([^:/?#]+):\\/\\/)?([^/?#]*)([^?#]*)(?:\\?([^#]*))?(?:#(.*))?$","i");var l="tweet-url list-slug",f="tweet-url username",p="tweet-url hashtag",h="tweet-url cashtag",m={urlClass:!0,listClass:!0,usernameClass:!0,hashtagClass:!0,cashtagClass:!0,usernameUrlBase:!0,listUrlBase:!0,hashtagUrlBase:!0,cashtagUrlBase:!0,usernameUrlBlock:!0,listUrlBlock:!0,hashtagUrlBlock:!0,linkUrlBlock:!0,usernameIncludeSymbol:!0,suppressLists:!0,suppressNoFollow:!0,targetBlank:!0,suppressDataScreenName:!0,urlEntities:!0,symbolTag:!0,textWithSymbolTag:!0,urlTarget:!0,invisibleTagAttrs:!0,linkAttributeBlock:!0,linkTextBlock:!0,htmlEscapeNonEntities:!0},g={disabled:!0,readonly:!0,multiple:!0,checked:!0};s.txt.tagAttrs=function(e){var t="";for(var n in e){var r=e[n];g[n]&&(r=r?n:null),null!=r&&(t+=" "+s.txt.htmlEscape(n)+'="'+s.txt.htmlEscape(r.toString())+'"')}return t},s.txt.linkToText=function(e,t,n,r){r.suppressNoFollow||(n.rel="nofollow"),r.linkAttributeBlock&&r.linkAttributeBlock(e,n),r.linkTextBlock&&(t=r.linkTextBlock(e,t));var a={text:t,attr:s.txt.tagAttrs(n)};return i("<a#{attr}>#{text}</a>",a)},s.txt.linkToTextWithSymbol=function(e,t,n,r,a){var u=a.symbolTag?"<"+a.symbolTag+">"+t+"</"+a.symbolTag+">":t;n=s.txt.htmlEscape(n);var i=a.textWithSymbolTag?"<"+a.textWithSymbolTag+">"+n+"</"+a.textWithSymbolTag+">":n;return a.usernameIncludeSymbol||!t.match(s.txt.regexen.atSigns)?s.txt.linkToText(e,u+i,r,a):u+s.txt.linkToText(e,i,r,a)},s.txt.linkToHashtag=function(e,t,n){var r=t.substring(e.indices[0],e.indices[0]+1),a=s.txt.htmlEscape(e.hashtag),u=o(n.htmlAttrs||{});return u.href=n.hashtagUrlBase+a,u.title="#"+a,u["class"]=n.hashtagClass,a.charAt(0).match(s.txt.regexen.rtl_chars)&&(u["class"]+=" rtl"),n.targetBlank&&(u.target="_blank"),s.txt.linkToTextWithSymbol(e,r,a,u,n)},s.txt.linkToCashtag=function(e,t,n){var r=s.txt.htmlEscape(e.cashtag),a=o(n.htmlAttrs||{});return a.href=n.cashtagUrlBase+r,a.title="$"+r,a["class"]=n.cashtagClass,n.targetBlank&&(a.target="_blank"),s.txt.linkToTextWithSymbol(e,"$",r,a,n)},s.txt.linkToMentionAndList=function(e,t,n){var r=t.substring(e.indices[0],e.indices[0]+1),a=s.txt.htmlEscape(e.screenName),u=s.txt.htmlEscape(e.listSlug),i=e.listSlug&&!n.suppressLists,d=o(n.htmlAttrs||{});return d["class"]=i?n.listClass:n.usernameClass,d.href=i?n.listUrlBase+a+u:n.usernameUrlBase+a,i||n.suppressDataScreenName||(d["data-screen-name"]=a),n.targetBlank&&(d.target="_blank"),s.txt.linkToTextWithSymbol(e,r,i?a+u:a,d,n)},s.txt.linkToUrl=function(e,t,n){var r=e.url,a=r,u=s.txt.htmlEscape(a),i=n.urlEntities&&n.urlEntities[r]||e;i.display_url&&(u=s.txt.linkTextWithEntity(i,n));var d=o(n.htmlAttrs||{});return r.match(s.txt.regexen.urlHasProtocol)||(r="http://"+r),d.href=r,n.targetBlank&&(d.target="_blank"),n.urlClass&&(d["class"]=n.urlClass),n.urlTarget&&(d.target=n.urlTarget),!n.title&&i.display_url&&(d.title=i.expanded_url),s.txt.linkToText(e,u,d,n)},s.txt.linkTextWithEntity=function(e,t){var n=e.display_url,r=e.expanded_url,a=n.replace(/…/g,"");if(r.indexOf(a)!=-1){var u=r.indexOf(a),o={displayUrlSansEllipses:a,beforeDisplayUrl:r.substr(0,u),afterDisplayUrl:r.substr(u+a.length),precedingEllipsis:n.match(/^…/)?"…":"",followingEllipsis:n.match(/…$/)?"…":""};for(var d in o)o.hasOwnProperty(d)&&(o[d]=s.txt.htmlEscape(o[d]));return o.invisible=t.invisibleTagAttrs,i("<span class='tco-ellipsis'>#{precedingEllipsis}<span #{invisible}>&nbsp;</span></span><span #{invisible}>#{beforeDisplayUrl}</span><span class='js-display-url'>#{displayUrlSansEllipses}</span><span #{invisible}>#{afterDisplayUrl}</span><span class='tco-ellipsis'><span #{invisible}>&nbsp;</span>#{followingEllipsis}</span>",o)}return n},s.txt.autoLinkEntities=function(e,t,n){n=o(n||{}),n.hashtagClass=n.hashtagClass||p,n.hashtagUrlBase=n.hashtagUrlBase||"https://twitter.com/#!/search?q=%23",n.cashtagClass=n.cashtagClass||h,n.cashtagUrlBase=n.cashtagUrlBase||"https://twitter.com/#!/search?q=%24",n.listClass=n.listClass||l,n.usernameClass=n.usernameClass||f,n.usernameUrlBase=n.usernameUrlBase||"https://twitter.com/",n.listUrlBase=n.listUrlBase||"https://twitter.com/",n.htmlAttrs=s.txt.extractHtmlAttrsFromOptions(n),n.invisibleTagAttrs=n.invisibleTagAttrs||"style='position:absolute;left:-9999px;'";var r,a,u;if(n.urlEntities){for(r={},a=0,u=n.urlEntities.length;a<u;a++)r[n.urlEntities[a].url]=n.urlEntities[a];n.urlEntities=r}var i="",d=0;t.sort(function(e,t){return e.indices[0]-t.indices[0]});for(var c=n.htmlEscapeNonEntities?s.txt.htmlEscape:function(e){return e},a=0;a<t.length;a++){var m=t[a];i+=c(e.substring(d,m.indices[0])),m.url?i+=s.txt.linkToUrl(m,e,n):m.hashtag?i+=s.txt.linkToHashtag(m,e,n):m.screenName?i+=s.txt.linkToMentionAndList(m,e,n):m.cashtag&&(i+=s.txt.linkToCashtag(m,e,n)),d=m.indices[1]}return i+=c(e.substring(d,e.length))},s.txt.autoLinkWithJSON=function(e,t,n){if(t.user_mentions)for(var r=0;r<t.user_mentions.length;r++)t.user_mentions[r].screenName=t.user_mentions[r].screen_name;if(t.hashtags)for(var r=0;r<t.hashtags.length;r++)t.hashtags[r].hashtag=t.hashtags[r].text;if(t.symbols)for(var r=0;r<t.symbols.length;r++)t.symbols[r].cashtag=t.symbols[r].text;var a=[];for(var u in t)a=a.concat(t[u]);return s.txt.modifyIndicesFromUnicodeToUTF16(e,a),s.txt.autoLinkEntities(e,a,n)},s.txt.extractHtmlAttrsFromOptions=function(e){var t={};for(var n in e){var r=e[n];m[n]||(g[n]&&(r=r?n:null),null!=r&&(t[n]=r))}return t},s.txt.autoLink=function(e,t){var n=s.txt.extractEntitiesWithIndices(e,{extractUrlsWithoutProtocol:!1});return s.txt.autoLinkEntities(e,n,t)},s.txt.autoLinkUsernamesOrLists=function(e,t){var n=s.txt.extractMentionsOrListsWithIndices(e);return s.txt.autoLinkEntities(e,n,t)},s.txt.autoLinkHashtags=function(e,t){var n=s.txt.extractHashtagsWithIndices(e);return s.txt.autoLinkEntities(e,n,t)},s.txt.autoLinkCashtags=function(e,t){var n=s.txt.extractCashtagsWithIndices(e);return s.txt.autoLinkEntities(e,n,t)},s.txt.autoLinkUrlsCustom=function(e,t){var n=s.txt.extractUrlsWithIndices(e,{extractUrlsWithoutProtocol:!1});return s.txt.autoLinkEntities(e,n,t)},s.txt.removeOverlappingEntities=function(e){e.sort(function(e,t){return e.indices[0]-t.indices[0]});for(var t=e[0],n=1;n<e.length;n++)t.indices[1]>e[n].indices[0]?(e.splice(n,1),n--):t=e[n]},s.txt.extractEntitiesWithIndices=function(e,t){var n=s.txt.extractUrlsWithIndices(e,t).concat(s.txt.extractMentionsOrListsWithIndices(e)).concat(s.txt.extractHashtagsWithIndices(e,{checkUrlOverlap:!1})).concat(s.txt.extractCashtagsWithIndices(e));return 0==n.length?[]:(s.txt.removeOverlappingEntities(n),n)},s.txt.extractMentions=function(e){for(var t=[],n=s.txt.extractMentionsWithIndices(e),r=0;r<n.length;r++){var a=n[r].screenName;t.push(a)}return t},s.txt.extractMentionsWithIndices=function(e){for(var t,n=[],r=s.txt.extractMentionsOrListsWithIndices(e),a=0;a<r.length;a++)t=r[a],""==t.listSlug&&n.push({screenName:t.screenName,indices:t.indices});return n},s.txt.extractMentionsOrListsWithIndices=function(e){if(!e||!e.match(s.txt.regexen.atSigns))return[];var t=[];return e.replace(s.txt.regexen.validMentionOrList,function(e,n,r,a,u,i,o){var d=o.slice(i+e.length);if(!d.match(s.txt.regexen.endMentionMatch)){u=u||"";var c=i+n.length,l=c+a.length+u.length+1;t.push({screenName:a,listSlug:u,indices:[c,l]})}}),t},s.txt.extractReplies=function(e){if(!e)return null;var t=e.match(s.txt.regexen.validReply);return!t||RegExp.rightContext.match(s.txt.regexen.endMentionMatch)?null:t[1]},s.txt.extractUrls=function(e,t){for(var n=[],r=s.txt.extractUrlsWithIndices(e,t),a=0;a<r.length;a++)n.push(r[a].url);return n},s.txt.extractUrlsWithIndices=function(e,t){if(t||(t={extractUrlsWithoutProtocol:!0}),!e||(t.extractUrlsWithoutProtocol?!e.match(/\./):!e.match(/:/)))return[];for(var n=[];s.txt.regexen.extractUrl.exec(e);){var r=RegExp.$2,a=RegExp.$3,u=RegExp.$4,i=RegExp.$5,o=RegExp.$7,d=s.txt.regexen.extractUrl.lastIndex,c=d-a.length;if(u)a.match(s.txt.regexen.validTcoUrl)&&(a=RegExp.lastMatch,d=c+a.length),n.push({url:a,indices:[c,d]});else{if(!t.extractUrlsWithoutProtocol||r.match(s.txt.regexen.invalidUrlWithoutProtocolPrecedingChars))continue;var l=null,f=0;if(i.replace(s.txt.regexen.validAsciiDomain,function(e){var t=i.indexOf(e,f);f=t+e.length,l={url:e,indices:[c+t,c+f]},(o||e.match(s.txt.regexen.validSpecialShortDomain)||!e.match(s.txt.regexen.invalidShortDomain))&&n.push(l)}),null==l)continue;o&&(l.url=a.replace(i,l.url),l.indices[1]=d)}}return n},s.txt.extractHashtags=function(e){for(var t=[],n=s.txt.extractHashtagsWithIndices(e),r=0;r<n.length;r++)t.push(n[r].hashtag);return t},s.txt.extractHashtagsWithIndices=function(e,t){if(t||(t={checkUrlOverlap:!0}),!e||!e.match(s.txt.regexen.hashSigns))return[];var n=[];if(e.replace(s.txt.regexen.validHashtag,function(e,t,r,a,u,i){var o=i.slice(u+e.length);if(!o.match(s.txt.regexen.endHashtagMatch)){var d=u+t.length,c=d+a.length+1;n.push({hashtag:a,indices:[d,c]})}}),t.checkUrlOverlap){var r=s.txt.extractUrlsWithIndices(e);if(r.length>0){var a=n.concat(r);s.txt.removeOverlappingEntities(a),n=[];for(var u=0;u<a.length;u++)a[u].hashtag&&n.push(a[u])}}return n},s.txt.extractCashtags=function(e){for(var t=[],n=s.txt.extractCashtagsWithIndices(e),r=0;r<n.length;r++)t.push(n[r].cashtag);return t},s.txt.extractCashtagsWithIndices=function(e){if(!e||e.indexOf("$")==-1)return[];var t=[];return e.replace(s.txt.regexen.validCashtag,function(e,n,r,a,u,i){var o=u+n.length,d=o+a.length+1;t.push({cashtag:a,indices:[o,d]})}),t},s.txt.modifyIndicesFromUnicodeToUTF16=function(e,t){s.txt.convertUnicodeIndices(e,t,!1)},s.txt.modifyIndicesFromUTF16ToUnicode=function(e,t){s.txt.convertUnicodeIndices(e,t,!0)},s.txt.getUnicodeTextLength=function(e){return e.replace(s.txt.regexen.non_bmp_code_pairs," ").length},s.txt.convertUnicodeIndices=function(e,t,n){if(0!=t.length){var r=0,a=0;t.sort(function(e,t){return e.indices[0]-t.indices[0]});for(var u=0,i=t[0];r<e.length;){if(i.indices[0]==(n?r:a)){var o=i.indices[1]-i.indices[0];if(i.indices[0]=n?a:r,i.indices[1]=i.indices[0]+o,u++,u==t.length)break;i=t[u]}var d=e.charCodeAt(r);55296<=d&&d<=56319&&r<e.length-1&&(d=e.charCodeAt(r+1),56320<=d&&d<=57343&&r++),a++,r++}}},s.txt.splitTags=function(e){for(var t,n,r=e.split("<"),a=[],u=0;u<r.length;u+=1)if(n=r[u]){t=n.split(">");for(var i=0;i<t.length;i+=1)a.push(t[i])}else a.push("");return a},s.txt.hitHighlight=function(e,t,n){var r="em";if(t=t||[],n=n||{},0===t.length)return e;var a,u,i,o,d,c,l,f=n.tag||r,p=["<"+f+">","</"+f+">"],h=s.txt.splitTags(e),m="",g=0,v=h[0],b=0,x=0,y=!1,w=v,k=[];for(a=0;a<t.length;a+=1)for(u=0;u<t[a].length;u+=1)k.push(t[a][u]);for(i=0;i<k.length;i+=1){for(o=k[i],d=p[i%2],c=!1;null!=v&&o>=b+v.length;)m+=w.slice(x),y&&o===b+w.length&&(m+=d,c=!0),h[g+1]&&(m+="<"+h[g+1]+">"),b+=w.length,x=0,g+=2,v=h[g],w=v,y=!1;c||null==v?c||(c=!0,m+=d):(l=o-b,m+=w.slice(x,l)+d,x=l,y=i%2===0)}if(null!=v)for(x<w.length&&(m+=w.slice(x)),i=g+1;i<h.length;i+=1)m+=i%2===0?h[i]:"<"+h[i]+">";return m};var v=140;s.txt.getTweetLength=function(e,t){t||(t={short_url_length:23,short_url_length_https:23});var n=s.txt.getUnicodeTextLength(e),r=s.txt.extractUrlsWithIndices(e);s.txt.modifyIndicesFromUTF16ToUnicode(e,r);for(var a=0;a<r.length;a++)n+=r[a].indices[0]-r[a].indices[1],n+=r[a].url.toLowerCase().match(s.txt.regexen.urlHasHttps)?t.short_url_length_https:t.short_url_length;return n},s.txt.isInvalidTweet=function(e){return e?s.txt.getTweetLength(e)>v?"too_long":!!s.txt.hasInvalidCharacters(e)&&"invalid_characters":"empty"},s.txt.hasInvalidCharacters=function(e){return s.txt.regexen.invalid_chars.test(e)},s.txt.isValidTweetText=function(e){return!s.txt.isInvalidTweet(e)},s.txt.isValidUsername=function(e){if(!e)return!1;var t=s.txt.extractMentions(e);return 1===t.length&&t[0]===e.slice(1)};var b=n(/^#{validMentionOrList}$/);if(s.txt.isValidList=function(e){var t=e.match(b);return!(!t||""!=t[1]||!t[4])},s.txt.isValidHashtag=function(e){if(!e)return!1;var t=s.txt.extractHashtags(e);return 1===t.length&&t[0]===e.slice(1)},s.txt.isValidUrl=function(e,t,n){if(null==t&&(t=!0),null==n&&(n=!0),!e)return!1;var r=e.match(s.txt.regexen.validateUrlUnencoded);if(!r||r[0]!==e)return!1;var a=r[1],u=r[2],i=r[3],o=r[4],c=r[5];return!!((!n||d(a,s.txt.regexen.validateUrlScheme)&&a.match(/^https?$/i))&&d(i,s.txt.regexen.validateUrlPath)&&d(o,s.txt.regexen.validateUrlQuery,!0)&&d(c,s.txt.regexen.validateUrlFragment,!0))&&(t&&d(u,s.txt.regexen.validateUrlUnicodeAuthority)||!t&&d(u,s.txt.regexen.validateUrlAuthority))},"undefined"!=typeof e&&e.exports&&(e.exports=s.txt),a=[],r=s.txt,u="function"==typeof r?r.apply(t,a):r,!(void 0!==u&&(e.exports=u)),"undefined"!=typeof window)if(window.twttr)for(var x in s)window.twttr[x]=s[x];else window.twttr=s}()},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function u(e){i(),U=document.createElement("div");var t=document.createElement("a"),n=(0,k.findSVGContainer)(e).parentNode,r=e.getAttribute("data-pdf-annotate-id"),a=(0,k.getAnnotationRect)(e),u=a.left-O,l=a.top-O;U.setAttribute("id","pdf-annotate-edit-overlay"),U.setAttribute("data-target-id",r),U.style.boxSizing="content-box",U.style.position="absolute",U.style.top=l+"px",U.style.left=u+"px",U.style.width=a.width+"px",U.style.height=a.height+"px",U.style.border=O+"px solid "+k.BORDER_COLOR,U.style.borderRadius=O+"px",t.innerHTML="×",t.setAttribute("href","javascript://"),t.style.background="#fff",t.style.borderRadius="20px",t.style.border="1px solid #bbb",t.style.color="#bbb",t.style.fontSize="16px",t.style.padding="2px",t.style.textAlign="center",t.style.textDecoration="none",t.style.position="absolute",t.style.top="-13px",t.style.right="-13px",t.style.width="25px",t.style.height="25px",A.readonly&&(t.style.display="none"),U.appendChild(t),n.appendChild(U),document.addEventListener("click",d),document.addEventListener("keyup",s),document.addEventListener("mousedown",c),t.addEventListener("click",o),t.addEventListener("mouseover",function(){t.style.color="#35A4DC",t.style.borderColor="#999",t.style.boxShadow="0 1px 1px #ccc"}),t.addEventListener("mouseout",function(){t.style.color="#bbb",t.style.borderColor="#bbb",t.style.boxShadow=""}),U.addEventListener("mouseover",function(){C||A.readonly||(t.style.display="")}),U.addEventListener("mouseout",function(){t.style.display="none"})}function i(){U&&U.parentNode&&(U.parentNode.removeChild(U),U=null),document.removeEventListener("click",d),document.removeEventListener("keyup",s),document.removeEventListener("mousedown",c),document.removeEventListener("mousemove",l),document.removeEventListener("mouseup",f),(0,k.enableUserSelect)()}function o(){if(U){var e=U.getAttribute("data-target-id"),t=document.querySelectorAll('[data-pdf-annotate-id="'+e+'"]'),n=U.parentNode.querySelector("svg.annotationLayer"),r=(0,k.getMetadata)(n),u=r.documentId;[].concat(a(t)).forEach(function(e){e.parentNode.removeChild(e)}),b["default"].getStoreAdapter().deleteAnnotation(u,e),i()}}function d(e){if((0,k.findSVGAtPoint)(e.clientX,e.clientY)){var t=document.getElementById("pdf-annotate-edit-overlay");if(t){if(C||e.target===t)return;i()}}}function s(e){U&&46===e.keyCode&&"textarea"!==e.target.nodeName.toLowerCase()&&"input"!==e.target.nodeName.toLowerCase()&&(A.readonly||o())}function c(e){if(e.target===U){var t=U.getAttribute("data-target-id"),n=document.querySelector('[data-pdf-annotate-id="'+t+'"]'),r=n.getAttribute("data-pdf-annotate-type");"highlight"!==r&&"strikeout"!==r&&(A.readonly||(C=!0),S=e.clientX,L=e.clientY,T=U.offsetLeft,P=U.offsetTop,U.style.background="rgba(255, 255, 255, 0.7)",U.style.cursor="move",U.querySelector("a").style.display="none",document.addEventListener("mousemove",l),document.addEventListener("mouseup",f),(0,k.disableUserSelect)())}}function l(e){if(!A.readonly){var t=(U.getAttribute("data-target-id"),U.parentNode),n=t.getBoundingClientRect(),r=P+(e.clientY-L),a=T+(e.clientX-S),u=0,i=n.height,o=0,d=n.width;r>u&&r+U.offsetHeight<i&&(U.style.top=r+"px"),a>o&&a+U.offsetWidth<d&&(U.style.left=a+"px")}}function f(e){function t(e,t){return n(parseInt(u[0].getAttribute(e),10),parseInt(u[0].getAttribute(t),10))}function n(e,t){return{deltaX:O+(0,k.scaleDown)(o,{x:U.offsetLeft}).x-e,deltaY:O+(0,k.scaleDown)(o,{y:U.offsetTop}).y-t}}var r=U.getAttribute("data-target-id"),u=document.querySelectorAll('[data-pdf-annotate-id="'+r+'"]'),i=u[0].getAttribute("data-pdf-annotate-type"),o=U.parentNode.querySelector("svg.annotationLayer"),d=(0,k.getMetadata)(o),s=d.documentId;U.querySelector("a").style.display="",b["default"].getStoreAdapter().getAnnotation(s,r).then(function(e){if(["area","highlight","point","textbox"].indexOf(i)>-1){var d=t("x","y"),c=d.deltaX,l=d.deltaY;[].concat(a(u)).forEach(function(t,n){if(0!==l){var r=parseInt(t.getAttribute("y"),10)+l,a=r;"textbox"===i&&(a+=e.size),"point"!==i||$.browser.mozilla||(a=(0,k.scaleUp)(o,{viewY:a}).viewY),$.browser.mozilla&&(a-=8),t.setAttribute("y",a),e.rectangles?e.rectangles[n].y=r:e.y&&(e.y=r)}if(0!==c){var u=parseInt(t.getAttribute("x"),10)+c,d=u;"point"!==i||$.browser.mozilla||(d=(0,k.scaleUp)(o,{viewX:d}).viewX),$.browser.mozilla&&(d-=8),t.setAttribute("x",d),e.rectangles?e.rectangles[n].x=u:e.x&&(e.x=u)}})}else if("drawing"===i){var f=(0,k.scaleDown)(o,(0,k.getAnnotationRect)(u[0])),p=g(e.lines[0],2),h=p[0],m=p[1],v=n(h,m),x=v.deltaX,w=v.deltaY;w+=m-f.top,x+=h-f.left,e.lines.forEach(function(t,n){var r=g(e.lines[n],2),a=r[0],u=r[1];e.lines[n][0]=a+x,e.lines[n][1]=u+w}),u[0].parentNode.removeChild(u[0]),(0,y["default"])(o,e)}A.readonly||b["default"].getStoreAdapter().editAnnotation(s,r,e)}),setTimeout(function(){C=!1},0),U.style.background="",U.style.cursor="",document.removeEventListener("mousemove",l),document.removeEventListener("mouseup",f),(0,k.enableUserSelect)()}function p(e){var t=e.dataset.pdfAnnotateType;"point"===t&&(0,_.selectComment)(e.dataset.pdfAnnotateId),u(e)}function h(){E||(E=!0,(0,w.addEventListener)("annotation:click",p))}function m(){i(),E&&(E=!1,(0,w.removeEventListener)("annotation:click",p))}Object.defineProperty(t,"__esModule",{value:!0});var g=function(){function e(e,t){var n=[],r=!0,a=!1,u=void 0;try{for(var i,o=e[Symbol.iterator]();!(r=(i=o.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(d){a=!0,u=d}finally{try{!r&&o["return"]&&o["return"]()}finally{if(a)throw u}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();t.createEditOverlay=u,t.enableEdit=h,t.disableEdit=m;var v=n(1),b=r(v),x=n(41),y=r(x),w=n(4),k=n(6),_=n(38),A=n(37),E=!1,C=!1,U=void 0,S=void 0,L=void 0,T=void 0,P=void 0,O=3},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){var t=void 0,n=void 0;switch(e.rotation%360){case 0:t=n=0;break;case 90:t=0,n=e.width/e.scale*-1;break;case 180:t=e.width/e.scale*-1,n=e.height/e.scale*-1;break;case 270:t=e.height/e.scale*-1,n=0}return{x:t,y:n}}function u(e,t){var n=a(t);return e.setAttribute("transform","scale("+t.scale+") rotate("+t.rotation+") translate("+n.x+", "+n.y+")"),e}function i(e,t,n){n||(n=JSON.parse(e.getAttribute("data-pdf-annotate-viewport")));var r=void 0;switch(t.type){case"area":case"highlight":r=(0,m["default"])(t);break;case"strikeout":r=(0,s["default"])(t);break;case"point":r=(0,p["default"])(t);break;case"textbox":r=(0,v["default"])(t);break;case"drawing":r=(0,l["default"])(t)}return r&&(r.setAttribute("data-pdf-annotate-id",t.uuid),r.setAttribute("data-pdf-annotate-type",t.type),r.setAttribute("aria-hidden",!0),e.appendChild(u(r,n))),r}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=i;var o=n(42),d=(r(o),n(43)),s=r(d),c=n(46),l=r(c),f=n(47),p=r(f),h=n(48),m=r(h),g=n(49),v=r(g);/firefox/i.test(navigator.userAgent);e.exports=t["default"]},function(e,t){/*
+e.exports=function(e){return null!=e&&(n(e)||a(e)||!!e._isBuffer)}},function(e,t,n){"use strict";function a(e){this.defaults=e,this.interceptors={request:new i,response:new i}}var r=n(15),u=n(11),i=n(27),o=n(28);a.prototype.request=function(e){"string"==typeof e&&(e=u.merge({url:arguments[0]},arguments[1])),e=u.merge(r,{method:"get"},this.defaults,e),e.method=e.method.toLowerCase();var t=[o,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n},u.forEach(["delete","get","head","options"],function(e){a.prototype[e]=function(t,n){return this.request(u.merge(n||{},{method:e,url:t}))}}),u.forEach(["post","put","patch"],function(e){a.prototype[e]=function(t,n,a){return this.request(u.merge(a||{},{method:e,url:t,data:n}))}}),e.exports=a},function(e,t,n){(function(t){"use strict";function a(e,t){!u.isUndefined(e)&&u.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function r(){var e;return"undefined"!=typeof XMLHttpRequest?e=n(18):"undefined"!=typeof t&&(e=n(18)),e}var u=n(11),i=n(17),o={"Content-Type":"application/x-www-form-urlencoded"},d={adapter:r(),transformRequest:[function(e,t){return i(t,"Content-Type"),u.isFormData(e)||u.isArrayBuffer(e)||u.isBuffer(e)||u.isStream(e)||u.isFile(e)||u.isBlob(e)?e:u.isArrayBufferView(e)?e.buffer:u.isURLSearchParams(e)?(a(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):u.isObject(e)?(a(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(t){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};d.headers={common:{Accept:"application/json, text/plain, */*"}},u.forEach(["delete","get","head"],function(e){d.headers[e]={}}),u.forEach(["post","put","patch"],function(e){d.headers[e]=u.merge(o)}),e.exports=d}).call(t,n(16))},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function r(e){if(c===setTimeout)return setTimeout(e,0);if((c===n||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function u(e){if(l===clearTimeout)return clearTimeout(e);if((l===a||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function i(){m&&p&&(m=!1,p.length?h=p.concat(h):g=-1,h.length&&o())}function o(){if(!m){var e=r(i);m=!0;for(var t=h.length;t;){for(p=h,h=[];++g<t;)p&&p[g].run();g=-1,t=h.length}p=null,m=!1,u(e)}}function d(e,t){this.fun=e,this.array=t}function s(){}var c,l,f=e.exports={};!function(){try{c="function"==typeof setTimeout?setTimeout:n}catch(e){c=n}try{l="function"==typeof clearTimeout?clearTimeout:a}catch(e){l=a}}();var p,h=[],m=!1,g=-1;f.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];h.push(new d(e,t)),1!==h.length||m||r(o)},d.prototype.run=function(){this.fun.apply(null,this.array)},f.title="browser",f.browser=!0,f.env={},f.argv=[],f.version="",f.versions={},f.on=s,f.addListener=s,f.once=s,f.off=s,f.removeListener=s,f.removeAllListeners=s,f.emit=s,f.prependListener=s,f.prependOnceListener=s,f.listeners=function(e){return[]},f.binding=function(e){throw new Error("process.binding is not supported")},f.cwd=function(){return"/"},f.chdir=function(e){throw new Error("process.chdir is not supported")},f.umask=function(){return 0}},function(e,t,n){"use strict";var a=n(11);e.exports=function(e,t){a.forEach(e,function(n,a){a!==t&&a.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[a])})}},function(e,t,n){(function(t){"use strict";var a=n(11),r=n(19),u=n(22),i=n(23),o=n(24),d=n(20),s="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(25);e.exports=function(e){return new Promise(function(c,l){var f=e.data,p=e.headers;a.isFormData(f)&&delete p["Content-Type"];var h=new XMLHttpRequest,m="onreadystatechange",g=!1;if("test"===t.env.NODE_ENV||"undefined"==typeof window||!window.XDomainRequest||"withCredentials"in h||o(e.url)||(h=new window.XDomainRequest,m="onload",g=!0,h.onprogress=function(){},h.ontimeout=function(){}),e.auth){var v=e.auth.username||"",b=e.auth.password||"";p.Authorization="Basic "+s(v+":"+b)}if(h.open(e.method.toUpperCase(),u(e.url,e.params,e.paramsSerializer),!0),h.timeout=e.timeout,h[m]=function(){if(h&&(4===h.readyState||g)&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))){var t="getAllResponseHeaders"in h?i(h.getAllResponseHeaders()):null,n=e.responseType&&"text"!==e.responseType?h.response:h.responseText,a={data:n,status:1223===h.status?204:h.status,statusText:1223===h.status?"No Content":h.statusText,headers:t,config:e,request:h};r(c,l,a),h=null}},h.onerror=function(){l(d("Network Error",e,null,h)),h=null},h.ontimeout=function(){l(d("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",h)),h=null},a.isStandardBrowserEnv()){var x=n(26),y=(e.withCredentials||o(e.url))&&e.xsrfCookieName?x.read(e.xsrfCookieName):void 0;y&&(p[e.xsrfHeaderName]=y)}if("setRequestHeader"in h&&a.forEach(p,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete p[t]:h.setRequestHeader(t,e)}),e.withCredentials&&(h.withCredentials=!0),e.responseType)try{h.responseType=e.responseType}catch(w){if("json"!==e.responseType)throw w}"function"==typeof e.onDownloadProgress&&h.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){h&&(h.abort(),l(e),h=null)}),void 0===f&&(f=null),h.send(f)})}}).call(t,n(16))},function(e,t,n){"use strict";var a=n(20);e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(a("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var a=n(21);e.exports=function(e,t,n,r,u){var i=new Error(e);return a(i,t,n,r,u)}},function(e,t){"use strict";e.exports=function(e,t,n,a,r){return e.config=t,n&&(e.code=n),e.request=a,e.response=r,e}},function(e,t,n){"use strict";function a(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var r=n(11);e.exports=function(e,t,n){if(!t)return e;var u;if(n)u=n(t);else if(r.isURLSearchParams(t))u=t.toString();else{var i=[];r.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(r.isArray(e)?t+="[]":e=[e],r.forEach(e,function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),i.push(a(t)+"="+a(e))}))}),u=i.join("&")}return u&&(e+=(e.indexOf("?")===-1?"?":"&")+u),e}},function(e,t,n){"use strict";var a=n(11),r=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,u,i={};return e?(a.forEach(e.split("\n"),function(e){if(u=e.indexOf(":"),t=a.trim(e.substr(0,u)).toLowerCase(),n=a.trim(e.substr(u+1)),t){if(i[t]&&r.indexOf(t)>=0)return;"set-cookie"===t?i[t]=(i[t]?i[t]:[]).concat([n]):i[t]=i[t]?i[t]+", "+n:n}}),i):i}},function(e,t,n){"use strict";var a=n(11);e.exports=a.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(r.setAttribute("href",t),t=r.href),r.setAttribute("href",t),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:"/"===r.pathname.charAt(0)?r.pathname:"/"+r.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a");return t=e(window.location.href),function(n){var r=a.isString(n)?e(n):n;return r.protocol===t.protocol&&r.host===t.host}}():function(){return function(){return!0}}()},function(e,t){"use strict";function n(){this.message="String contains an invalid character"}function a(e){for(var t,a,u=String(e),i="",o=0,d=r;u.charAt(0|o)||(d="=",o%1);i+=d.charAt(63&t>>8-o%1*8)){if(a=u.charCodeAt(o+=.75),a>255)throw new n;t=t<<8|a}return i}var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=a},function(e,t,n){"use strict";var a=n(11);e.exports=a.isStandardBrowserEnv()?function(){return{write:function(e,t,n,r,u,i){var o=[];o.push(e+"="+encodeURIComponent(t)),a.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),a.isString(r)&&o.push("path="+r),a.isString(u)&&o.push("domain="+u),i===!0&&o.push("secure"),document.cookie=o.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";function a(){this.handlers=[]}var r=n(11);a.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},a.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},a.prototype.forEach=function(e){r.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=a},function(e,t,n){"use strict";function a(e){e.cancelToken&&e.cancelToken.throwIfRequested()}var r=n(11),u=n(29),i=n(30),o=n(15),d=n(31),s=n(32);e.exports=function(e){a(e),e.baseURL&&!d(e.url)&&(e.url=s(e.baseURL,e.url)),e.headers=e.headers||{},e.data=u(e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=e.adapter||o.adapter;return t(e).then(function(t){return a(e),t.data=u(t.data,t.headers,e.transformResponse),t},function(t){return i(t)||(a(e),t&&t.response&&(t.response.data=u(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},function(e,t,n){"use strict";var a=n(11);e.exports=function(e,t,n){return a.forEach(n,function(n){e=n(e,t)}),e}},function(e,t){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function a(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new r(e),t(n.reason))})}var r=n(33);a.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},a.source=function(){var e,t=new a(function(t){e=t});return{token:t,cancel:e}},e.exports=a},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e,t){"use strict";function n(e){var t=16*Math.random()|0,n="x"==e?t:3&t|8;return n.toString(16)}function a(){return u.replace(r,n)}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var r=/[xy]/g,u="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";e.exports=t["default"]},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.documentUrl=document.getElementById("pdf-data").dataset.filepath,t.documentId=document.getElementById("pdf-data").dataset.uuid,t.readonly="True"===document.getElementById("pdf-data").dataset.readonly},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){p["default"].getStoreAdapter().getComments(e).then(function(e){b.html(""),x.hide(),e.forEach(u)})}function u(e){var t=$("<div></div>"),n=$('<div class="view"></div>');if(t.addClass("comment-list-item"),t.attr("uuid",e.annotation),n.html(m["default"].autoLink(m["default"].htmlEscape(e.content).replace(/\n/g,"<br/>"))),n.bind("click",i),!v.readonly){var a=$("<button>Modifier</button>");a.bind("click",s),n.append($("<br/>")),n.append(a)}if(t.append(n),!v.readonly){var r=$("<textarea></textarea>");r.text(e.content);var u=$('<div class="edit" style="display:none">'),c=$("<button>Enregistrer</button>");c.bind("click",o);var l=$("<button>Annuler</button>");l.bind("click",d),u.append(r),u.append(c),u.append(l),t.append(u)}b.append(t)}function i(e){var t=$(e.target).closest(".comment-list-item");l(t.attr("uuid"))}function o(e){e.preventDefault();var t=$(e.target),n=t.closest(".comment-list-item"),a=n.attr("uuid"),r=n.find("textarea").val(),u=$("#pdf-data").data("uuid");p["default"].getStoreAdapter().updateComment(u,a,r).then(function(t){d(e)})}function d(e){e.preventDefault();var t=$(e.target),n=t.closest(".comment-list-item"),a=n.find(".view"),r=n.find(".edit");r.hide(),a.show()}function s(e){e.preventDefault();var t=$(e.target),n=t.closest(".comment-list-item"),a=n.find(".view"),r=n.find(".edit");r.show(),r.find("textarea").width(a.width()-10).height(a.height()+20),a.hide()}function c(e){var t=e.offset().top;if(!e.is(":visible")){e.css({visibility:"hidden"}).show();var t=e.offset().top;e.css({visibility:"",display:""})}var n=$(window).scrollTop(),a=n+window.innerHeight;return!(t<n||t>a)||(e.hasClass("comment-list-item")?$(".comment-list-container").animate({scrollTop:t-window.innerHeight/3},300):$("#content-wrapper").animate({scrollTop:t-window.innerHeight/3},300),!1)}function l(e){var t=$(".comment-list-item[uuid="+e+"]");$(".comment-list-item").removeClass("selected"),t.addClass("selected");var n=$("[data-pdf-annotate-id="+e+"]")[0];(0,g.createEditOverlay)(n),c($(n)),c(t)}Object.defineProperty(t,"__esModule",{value:!0}),t.renderComments=r,t.selectComment=l;var f=n(1),p=a(f),h=n(39),m=a(h),g=(n(4),n(40)),v=(n(6),n(37)),b=$("#comment-wrapper .comment-list-container"),x=$("#comment-wrapper .comment-list-form")},function(e,t,n){var a,r,u;!function(){function n(e,t){return t=t||"","string"!=typeof e&&(e.global&&t.indexOf("g")<0&&(t+="g"),e.ignoreCase&&t.indexOf("i")<0&&(t+="i"),e.multiline&&t.indexOf("m")<0&&(t+="m"),e=e.source),new RegExp(e.replace(/#\{(\w+)\}/g,function(e,t){var n=s.txt.regexen[t]||"";return"string"!=typeof n&&(n=n.source),n}),t)}function i(e,t){return e.replace(/#\{(\w+)\}/g,function(e,n){return t[n]||""})}function o(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function d(e,t,n){return n?!e||e.match(t)&&RegExp["$&"]===e:"string"==typeof e&&e.match(t)&&RegExp["$&"]===e}if("undefined"==typeof s||null===s)var s={};s.txt={},s.txt.regexen={};var c={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#39;"};s.txt.htmlEscape=function(e){return e&&e.replace(/[&"'><]/g,function(e){return c[e]})},s.txt.regexSupplant=n,s.txt.stringSupplant=i,s.txt.regexen.spaces_group=/\x09-\x0D\x20\x85\xA0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000/,s.txt.regexen.spaces=n(/[#{spaces_group}]/),s.txt.regexen.invalid_chars_group=/\uFFFE\uFEFF\uFFFF\u202A-\u202E/,s.txt.regexen.invalid_chars=n(/[#{invalid_chars_group}]/),s.txt.regexen.punct=/\!'#%&'\(\)*\+,\\\-\.\/:;<=>\?@\[\]\^_{|}~\$/,s.txt.regexen.rtl_chars=/[\u0600-\u06FF]|[\u0750-\u077F]|[\u0590-\u05FF]|[\uFE70-\uFEFF]/gm,s.txt.regexen.non_bmp_code_pairs=/[\uD800-\uDBFF][\uDC00-\uDFFF]/gm,s.txt.regexen.latinAccentChars=/\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u024F\u0253\u0254\u0256\u0257\u0259\u025B\u0263\u0268\u026F\u0272\u0289\u028B\u02BB\u0300-\u036F\u1E00-\u1EFF/,s.txt.regexen.bmpLetterAndMarks=/A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u052f\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u065f\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06ef\u06fa-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07ca-\u07f5\u07fa\u0800-\u082d\u0840-\u085b\u08a0-\u08b2\u08e4-\u0963\u0971-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09f0\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a70-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58\u0c59\u0c60-\u0c63\u0c81-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0cf1\u0cf2\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d57\u0d60-\u0d63\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0edc-\u0edf\u0f00\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u103f\u1050-\u108f\u109a-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16f1-\u16f8\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17d3\u17d7\u17dc\u17dd\u180b-\u180d\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f\u1aa7\u1ab0-\u1abe\u1b00-\u1b4b\u1b6b-\u1b73\u1b80-\u1baf\u1bba-\u1bf3\u1c00-\u1c37\u1c4d-\u1c4f\u1c5a-\u1c7d\u1cd0-\u1cd2\u1cd4-\u1cf6\u1cf8\u1cf9\u1d00-\u1df5\u1dfc-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u20d0-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2183\u2184\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005\u3006\u302a-\u302f\u3031-\u3035\u303b\u303c\u3041-\u3096\u3099\u309a\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua672\ua674-\ua67d\ua67f-\ua69d\ua69f-\ua6e5\ua6f0\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua7ad\ua7b0\ua7b1\ua7f7-\ua827\ua840-\ua873\ua880-\ua8c4\ua8e0-\ua8f7\ua8fb\ua90a-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf\ua9e0-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa60-\uaa76\uaa7a-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab5f\uab64\uab65\uabc0-\uabea\uabec\uabed\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf870-\uf87f\uf882\uf884-\uf89f\uf8b8\uf8c1-\uf8d6\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe2d\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc/,s.txt.regexen.astralLetterAndMarks=/\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\uddfd\ude80-\ude9c\udea0-\uded0\udee0\udf00-\udf1f\udf30-\udf40\udf42-\udf49\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude38-\ude3a\ude3f\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee6\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48]|\ud804[\udc00-\udc46\udc7f-\udcba\udcd0-\udce8\udd00-\udd34\udd50-\udd73\udd76\udd80-\uddc4\uddda\ude00-\ude11\ude13-\ude37\udeb0-\udeea\udf01-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3c-\udf44\udf47\udf48\udf4b-\udf4d\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]|\ud805[\udc80-\udcc5\udcc7\udd80-\uddb5\uddb8-\uddc0\ude00-\ude40\ude44\ude80-\udeb7]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud808[\udc00-\udf98]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udef0-\udef4\udf00-\udf36\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50-\udf7e\udf8f-\udf9f]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9d\udc9e]|\ud834[\udd65-\udd69\udd6d-\udd72\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud83a[\udc00-\udcc4\udcd0-\udcd6]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d]|\ud87e[\udc00-\ude1d]|\udb40[\udd00-\uddef]/,s.txt.regexen.bmpNumerals=/0-9\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0de6-\u0def\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\ua9f0-\ua9f9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19/,s.txt.regexen.astralNumerals=/\ud801[\udca0-\udca9]|\ud804[\udc66-\udc6f\udcf0-\udcf9\udd36-\udd3f\uddd0-\uddd9\udef0-\udef9]|\ud805[\udcd0-\udcd9\ude50-\ude59\udec0-\udec9]|\ud806[\udce0-\udce9]|\ud81a[\ude60-\ude69\udf50-\udf59]|\ud835[\udfce-\udfff]/,s.txt.regexen.hashtagSpecialChars=/_\u200c\u200d\ua67e\u05be\u05f3\u05f4\uff5e\u301c\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\xb7/,s.txt.regexen.hashSigns=/[##]/,s.txt.regexen.hashtagAlpha=n(/(?:[#{bmpLetterAndMarks}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}))/),s.txt.regexen.hashtagAlphaNumeric=n(/(?:[#{bmpLetterAndMarks}#{bmpNumerals}#{hashtagSpecialChars}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}|#{astralNumerals}))/),s.txt.regexen.endHashtagMatch=n(/^(?:#{hashSigns}|:\/\/)/),s.txt.regexen.codePoint=/(?:[^\uD800-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF])/,s.txt.regexen.hashtagBoundary=n(/(?:^|\uFE0E|\uFE0F|$|(?!#{hashtagAlphaNumeric}|&)#{codePoint})/),s.txt.regexen.validHashtag=n(/(#{hashtagBoundary})(#{hashSigns})(?!\uFE0F|\u20E3)(#{hashtagAlphaNumeric}*#{hashtagAlpha}#{hashtagAlphaNumeric}*)/gi),s.txt.regexen.validMentionPrecedingChars=/(?:^|[^a-zA-Z0-9_!#$%&*@@]|(?:^|[^a-zA-Z0-9_+~.-])(?:rt|RT|rT|Rt):?)/,s.txt.regexen.atSigns=/[@@]/,s.txt.regexen.validMentionOrList=n("(#{validMentionPrecedingChars})(#{atSigns})([a-zA-Z0-9_]{1,20})(/[a-zA-Z][a-zA-Z0-9_-]{0,24})?","g"),s.txt.regexen.validReply=n(/^(?:#{spaces})*#{atSigns}([a-zA-Z0-9_]{1,20})/),s.txt.regexen.endMentionMatch=n(/^(?:#{atSigns}|[#{latinAccentChars}]|:\/\/)/),s.txt.regexen.validUrlPrecedingChars=n(/(?:[^A-Za-z0-9@@$###{invalid_chars_group}]|^)/),s.txt.regexen.invalidUrlWithoutProtocolPrecedingChars=/[-_.\/]$/,s.txt.regexen.invalidDomainChars=i("#{punct}#{spaces_group}#{invalid_chars_group}",s.txt.regexen),s.txt.regexen.validDomainChars=n(/[^#{invalidDomainChars}]/),s.txt.regexen.validSubdomain=n(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\.)/),s.txt.regexen.validDomainName=n(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\.)/),s.txt.regexen.validGTLD=n(RegExp("(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@]|$))")),
+s.txt.regexen.validCCTLD=n(RegExp("(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@]|$))")),s.txt.regexen.validPunycode=/(?:xn--[0-9a-z]+)/,s.txt.regexen.validSpecialCCTLD=/(?:(?:co|tv)(?=[^0-9a-zA-Z@]|$))/,s.txt.regexen.validDomain=n(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/),s.txt.regexen.validAsciiDomain=n(/(?:(?:[\-a-z0-9#{latinAccentChars}]+)\.)+(?:#{validGTLD}|#{validCCTLD}|#{validPunycode})/gi),s.txt.regexen.invalidShortDomain=n(/^#{validDomainName}#{validCCTLD}$/i),s.txt.regexen.validSpecialShortDomain=n(/^#{validDomainName}#{validSpecialCCTLD}$/i),s.txt.regexen.validPortNumber=/[0-9]+/,s.txt.regexen.cyrillicLettersAndMarks=/\u0400-\u04FF/,s.txt.regexen.validGeneralUrlPathChars=n(/[a-z#{cyrillicLettersAndMarks}0-9!\*';:=\+,\.\$\/%#\[\]\-_~@\|&#{latinAccentChars}]/i),s.txt.regexen.validUrlBalancedParens=n("\\((?:#{validGeneralUrlPathChars}+|(?:#{validGeneralUrlPathChars}*\\(#{validGeneralUrlPathChars}+\\)#{validGeneralUrlPathChars}*))\\)","i"),s.txt.regexen.validUrlPathEndingChars=n(/[\+\-a-z#{cyrillicLettersAndMarks}0-9=_#\/#{latinAccentChars}]|(?:#{validUrlBalancedParens})/i),s.txt.regexen.validUrlPath=n("(?:(?:#{validGeneralUrlPathChars}*(?:#{validUrlBalancedParens}#{validGeneralUrlPathChars}*)*#{validUrlPathEndingChars})|(?:@#{validGeneralUrlPathChars}+/))","i"),s.txt.regexen.validUrlQueryChars=/[a-z0-9!?\*'@\(\);:&=\+\$\/%#\[\]\-_\.,~|]/i,s.txt.regexen.validUrlQueryEndingChars=/[a-z0-9_&=#\/]/i,s.txt.regexen.extractUrl=n("((#{validUrlPrecedingChars})((https?:\\/\\/)?(#{validDomain})(?::(#{validPortNumber}))?(\\/#{validUrlPath}*)?(\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?))","gi"),s.txt.regexen.validTcoUrl=/^https?:\/\/t\.co\/[a-z0-9]+/i,s.txt.regexen.urlHasProtocol=/^https?:\/\//i,s.txt.regexen.urlHasHttps=/^https:\/\//i,s.txt.regexen.cashtag=/[a-z]{1,6}(?:[._][a-z]{1,2})?/i,s.txt.regexen.validCashtag=n("(^|#{spaces})(\\$)(#{cashtag})(?=$|\\s|[#{punct}])","gi"),s.txt.regexen.validateUrlUnreserved=/[a-z\u0400-\u04FF0-9\-._~]/i,s.txt.regexen.validateUrlPctEncoded=/(?:%[0-9a-f]{2})/i,s.txt.regexen.validateUrlSubDelims=/[!$&'()*+,;=]/i,s.txt.regexen.validateUrlPchar=n("(?:#{validateUrlUnreserved}|#{validateUrlPctEncoded}|#{validateUrlSubDelims}|[:|@])","i"),s.txt.regexen.validateUrlScheme=/(?:[a-z][a-z0-9+\-.]*)/i,s.txt.regexen.validateUrlUserinfo=n("(?:#{validateUrlUnreserved}|#{validateUrlPctEncoded}|#{validateUrlSubDelims}|:)*","i"),s.txt.regexen.validateUrlDecOctet=/(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))/i,s.txt.regexen.validateUrlIpv4=n(/(?:#{validateUrlDecOctet}(?:\.#{validateUrlDecOctet}){3})/i),s.txt.regexen.validateUrlIpv6=/(?:\[[a-f0-9:\.]+\])/i,s.txt.regexen.validateUrlIp=n("(?:#{validateUrlIpv4}|#{validateUrlIpv6})","i"),s.txt.regexen.validateUrlSubDomainSegment=/(?:[a-z0-9](?:[a-z0-9_\-]*[a-z0-9])?)/i,s.txt.regexen.validateUrlDomainSegment=/(?:[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?)/i,s.txt.regexen.validateUrlDomainTld=/(?:[a-z](?:[a-z0-9\-]*[a-z0-9])?)/i,s.txt.regexen.validateUrlDomain=n(/(?:(?:#{validateUrlSubDomainSegment}\.)*(?:#{validateUrlDomainSegment}\.)#{validateUrlDomainTld})/i),s.txt.regexen.validateUrlHost=n("(?:#{validateUrlIp}|#{validateUrlDomain})","i"),s.txt.regexen.validateUrlUnicodeSubDomainSegment=/(?:(?:[a-z0-9]|[^\u0000-\u007f])(?:(?:[a-z0-9_\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i,s.txt.regexen.validateUrlUnicodeDomainSegment=/(?:(?:[a-z0-9]|[^\u0000-\u007f])(?:(?:[a-z0-9\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i,s.txt.regexen.validateUrlUnicodeDomainTld=/(?:(?:[a-z]|[^\u0000-\u007f])(?:(?:[a-z0-9\-]|[^\u0000-\u007f])*(?:[a-z0-9]|[^\u0000-\u007f]))?)/i,s.txt.regexen.validateUrlUnicodeDomain=n(/(?:(?:#{validateUrlUnicodeSubDomainSegment}\.)*(?:#{validateUrlUnicodeDomainSegment}\.)#{validateUrlUnicodeDomainTld})/i),s.txt.regexen.validateUrlUnicodeHost=n("(?:#{validateUrlIp}|#{validateUrlUnicodeDomain})","i"),s.txt.regexen.validateUrlPort=/[0-9]{1,5}/,s.txt.regexen.validateUrlUnicodeAuthority=n("(?:(#{validateUrlUserinfo})@)?(#{validateUrlUnicodeHost})(?::(#{validateUrlPort}))?","i"),s.txt.regexen.validateUrlAuthority=n("(?:(#{validateUrlUserinfo})@)?(#{validateUrlHost})(?::(#{validateUrlPort}))?","i"),s.txt.regexen.validateUrlPath=n(/(\/#{validateUrlPchar}*)*/i),s.txt.regexen.validateUrlQuery=n(/(#{validateUrlPchar}|\/|\?)*/i),s.txt.regexen.validateUrlFragment=n(/(#{validateUrlPchar}|\/|\?)*/i),s.txt.regexen.validateUrlUnencoded=n("^(?:([^:/?#]+):\\/\\/)?([^/?#]*)([^?#]*)(?:\\?([^#]*))?(?:#(.*))?$","i");var l="tweet-url list-slug",f="tweet-url username",p="tweet-url hashtag",h="tweet-url cashtag",m={urlClass:!0,listClass:!0,usernameClass:!0,hashtagClass:!0,cashtagClass:!0,usernameUrlBase:!0,listUrlBase:!0,hashtagUrlBase:!0,cashtagUrlBase:!0,usernameUrlBlock:!0,listUrlBlock:!0,hashtagUrlBlock:!0,linkUrlBlock:!0,usernameIncludeSymbol:!0,suppressLists:!0,suppressNoFollow:!0,targetBlank:!0,suppressDataScreenName:!0,urlEntities:!0,symbolTag:!0,textWithSymbolTag:!0,urlTarget:!0,invisibleTagAttrs:!0,linkAttributeBlock:!0,linkTextBlock:!0,htmlEscapeNonEntities:!0},g={disabled:!0,readonly:!0,multiple:!0,checked:!0};s.txt.tagAttrs=function(e){var t="";for(var n in e){var a=e[n];g[n]&&(a=a?n:null),null!=a&&(t+=" "+s.txt.htmlEscape(n)+'="'+s.txt.htmlEscape(a.toString())+'"')}return t},s.txt.linkToText=function(e,t,n,a){a.suppressNoFollow||(n.rel="nofollow"),a.linkAttributeBlock&&a.linkAttributeBlock(e,n),a.linkTextBlock&&(t=a.linkTextBlock(e,t));var r={text:t,attr:s.txt.tagAttrs(n)};return i("<a#{attr}>#{text}</a>",r)},s.txt.linkToTextWithSymbol=function(e,t,n,a,r){var u=r.symbolTag?"<"+r.symbolTag+">"+t+"</"+r.symbolTag+">":t;n=s.txt.htmlEscape(n);var i=r.textWithSymbolTag?"<"+r.textWithSymbolTag+">"+n+"</"+r.textWithSymbolTag+">":n;return r.usernameIncludeSymbol||!t.match(s.txt.regexen.atSigns)?s.txt.linkToText(e,u+i,a,r):u+s.txt.linkToText(e,i,a,r)},s.txt.linkToHashtag=function(e,t,n){var a=t.substring(e.indices[0],e.indices[0]+1),r=s.txt.htmlEscape(e.hashtag),u=o(n.htmlAttrs||{});return u.href=n.hashtagUrlBase+r,u.title="#"+r,u["class"]=n.hashtagClass,r.charAt(0).match(s.txt.regexen.rtl_chars)&&(u["class"]+=" rtl"),n.targetBlank&&(u.target="_blank"),s.txt.linkToTextWithSymbol(e,a,r,u,n)},s.txt.linkToCashtag=function(e,t,n){var a=s.txt.htmlEscape(e.cashtag),r=o(n.htmlAttrs||{});return r.href=n.cashtagUrlBase+a,r.title="$"+a,r["class"]=n.cashtagClass,n.targetBlank&&(r.target="_blank"),s.txt.linkToTextWithSymbol(e,"$",a,r,n)},s.txt.linkToMentionAndList=function(e,t,n){var a=t.substring(e.indices[0],e.indices[0]+1),r=s.txt.htmlEscape(e.screenName),u=s.txt.htmlEscape(e.listSlug),i=e.listSlug&&!n.suppressLists,d=o(n.htmlAttrs||{});return d["class"]=i?n.listClass:n.usernameClass,d.href=i?n.listUrlBase+r+u:n.usernameUrlBase+r,i||n.suppressDataScreenName||(d["data-screen-name"]=r),n.targetBlank&&(d.target="_blank"),s.txt.linkToTextWithSymbol(e,a,i?r+u:r,d,n)},s.txt.linkToUrl=function(e,t,n){var a=e.url,r=a,u=s.txt.htmlEscape(r),i=n.urlEntities&&n.urlEntities[a]||e;i.display_url&&(u=s.txt.linkTextWithEntity(i,n));var d=o(n.htmlAttrs||{});return a.match(s.txt.regexen.urlHasProtocol)||(a="http://"+a),d.href=a,n.targetBlank&&(d.target="_blank"),n.urlClass&&(d["class"]=n.urlClass),n.urlTarget&&(d.target=n.urlTarget),!n.title&&i.display_url&&(d.title=i.expanded_url),s.txt.linkToText(e,u,d,n)},s.txt.linkTextWithEntity=function(e,t){var n=e.display_url,a=e.expanded_url,r=n.replace(/…/g,"");if(a.indexOf(r)!=-1){var u=a.indexOf(r),o={displayUrlSansEllipses:r,beforeDisplayUrl:a.substr(0,u),afterDisplayUrl:a.substr(u+r.length),precedingEllipsis:n.match(/^…/)?"…":"",followingEllipsis:n.match(/…$/)?"…":""};for(var d in o)o.hasOwnProperty(d)&&(o[d]=s.txt.htmlEscape(o[d]));return o.invisible=t.invisibleTagAttrs,i("<span class='tco-ellipsis'>#{precedingEllipsis}<span #{invisible}>&nbsp;</span></span><span #{invisible}>#{beforeDisplayUrl}</span><span class='js-display-url'>#{displayUrlSansEllipses}</span><span #{invisible}>#{afterDisplayUrl}</span><span class='tco-ellipsis'><span #{invisible}>&nbsp;</span>#{followingEllipsis}</span>",o)}return n},s.txt.autoLinkEntities=function(e,t,n){n=o(n||{}),n.hashtagClass=n.hashtagClass||p,n.hashtagUrlBase=n.hashtagUrlBase||"https://twitter.com/#!/search?q=%23",n.cashtagClass=n.cashtagClass||h,n.cashtagUrlBase=n.cashtagUrlBase||"https://twitter.com/#!/search?q=%24",n.listClass=n.listClass||l,n.usernameClass=n.usernameClass||f,n.usernameUrlBase=n.usernameUrlBase||"https://twitter.com/",n.listUrlBase=n.listUrlBase||"https://twitter.com/",n.htmlAttrs=s.txt.extractHtmlAttrsFromOptions(n),n.invisibleTagAttrs=n.invisibleTagAttrs||"style='position:absolute;left:-9999px;'";var a,r,u;if(n.urlEntities){for(a={},r=0,u=n.urlEntities.length;r<u;r++)a[n.urlEntities[r].url]=n.urlEntities[r];n.urlEntities=a}var i="",d=0;t.sort(function(e,t){return e.indices[0]-t.indices[0]});for(var c=n.htmlEscapeNonEntities?s.txt.htmlEscape:function(e){return e},r=0;r<t.length;r++){var m=t[r];i+=c(e.substring(d,m.indices[0])),m.url?i+=s.txt.linkToUrl(m,e,n):m.hashtag?i+=s.txt.linkToHashtag(m,e,n):m.screenName?i+=s.txt.linkToMentionAndList(m,e,n):m.cashtag&&(i+=s.txt.linkToCashtag(m,e,n)),d=m.indices[1]}return i+=c(e.substring(d,e.length))},s.txt.autoLinkWithJSON=function(e,t,n){if(t.user_mentions)for(var a=0;a<t.user_mentions.length;a++)t.user_mentions[a].screenName=t.user_mentions[a].screen_name;if(t.hashtags)for(var a=0;a<t.hashtags.length;a++)t.hashtags[a].hashtag=t.hashtags[a].text;if(t.symbols)for(var a=0;a<t.symbols.length;a++)t.symbols[a].cashtag=t.symbols[a].text;var r=[];for(var u in t)r=r.concat(t[u]);return s.txt.modifyIndicesFromUnicodeToUTF16(e,r),s.txt.autoLinkEntities(e,r,n)},s.txt.extractHtmlAttrsFromOptions=function(e){var t={};for(var n in e){var a=e[n];m[n]||(g[n]&&(a=a?n:null),null!=a&&(t[n]=a))}return t},s.txt.autoLink=function(e,t){var n=s.txt.extractEntitiesWithIndices(e,{extractUrlsWithoutProtocol:!1});return s.txt.autoLinkEntities(e,n,t)},s.txt.autoLinkUsernamesOrLists=function(e,t){var n=s.txt.extractMentionsOrListsWithIndices(e);return s.txt.autoLinkEntities(e,n,t)},s.txt.autoLinkHashtags=function(e,t){var n=s.txt.extractHashtagsWithIndices(e);return s.txt.autoLinkEntities(e,n,t)},s.txt.autoLinkCashtags=function(e,t){var n=s.txt.extractCashtagsWithIndices(e);return s.txt.autoLinkEntities(e,n,t)},s.txt.autoLinkUrlsCustom=function(e,t){var n=s.txt.extractUrlsWithIndices(e,{extractUrlsWithoutProtocol:!1});return s.txt.autoLinkEntities(e,n,t)},s.txt.removeOverlappingEntities=function(e){e.sort(function(e,t){return e.indices[0]-t.indices[0]});for(var t=e[0],n=1;n<e.length;n++)t.indices[1]>e[n].indices[0]?(e.splice(n,1),n--):t=e[n]},s.txt.extractEntitiesWithIndices=function(e,t){var n=s.txt.extractUrlsWithIndices(e,t).concat(s.txt.extractMentionsOrListsWithIndices(e)).concat(s.txt.extractHashtagsWithIndices(e,{checkUrlOverlap:!1})).concat(s.txt.extractCashtagsWithIndices(e));return 0==n.length?[]:(s.txt.removeOverlappingEntities(n),n)},s.txt.extractMentions=function(e){for(var t=[],n=s.txt.extractMentionsWithIndices(e),a=0;a<n.length;a++){var r=n[a].screenName;t.push(r)}return t},s.txt.extractMentionsWithIndices=function(e){for(var t,n=[],a=s.txt.extractMentionsOrListsWithIndices(e),r=0;r<a.length;r++)t=a[r],""==t.listSlug&&n.push({screenName:t.screenName,indices:t.indices});return n},s.txt.extractMentionsOrListsWithIndices=function(e){if(!e||!e.match(s.txt.regexen.atSigns))return[];var t=[];return e.replace(s.txt.regexen.validMentionOrList,function(e,n,a,r,u,i,o){var d=o.slice(i+e.length);if(!d.match(s.txt.regexen.endMentionMatch)){u=u||"";var c=i+n.length,l=c+r.length+u.length+1;t.push({screenName:r,listSlug:u,indices:[c,l]})}}),t},s.txt.extractReplies=function(e){if(!e)return null;var t=e.match(s.txt.regexen.validReply);return!t||RegExp.rightContext.match(s.txt.regexen.endMentionMatch)?null:t[1]},s.txt.extractUrls=function(e,t){for(var n=[],a=s.txt.extractUrlsWithIndices(e,t),r=0;r<a.length;r++)n.push(a[r].url);return n},s.txt.extractUrlsWithIndices=function(e,t){if(t||(t={extractUrlsWithoutProtocol:!0}),!e||(t.extractUrlsWithoutProtocol?!e.match(/\./):!e.match(/:/)))return[];for(var n=[];s.txt.regexen.extractUrl.exec(e);){var a=RegExp.$2,r=RegExp.$3,u=RegExp.$4,i=RegExp.$5,o=RegExp.$7,d=s.txt.regexen.extractUrl.lastIndex,c=d-r.length;if(u)r.match(s.txt.regexen.validTcoUrl)&&(r=RegExp.lastMatch,d=c+r.length),n.push({url:r,indices:[c,d]});else{if(!t.extractUrlsWithoutProtocol||a.match(s.txt.regexen.invalidUrlWithoutProtocolPrecedingChars))continue;var l=null,f=0;if(i.replace(s.txt.regexen.validAsciiDomain,function(e){var t=i.indexOf(e,f);f=t+e.length,l={url:e,indices:[c+t,c+f]},(o||e.match(s.txt.regexen.validSpecialShortDomain)||!e.match(s.txt.regexen.invalidShortDomain))&&n.push(l)}),null==l)continue;o&&(l.url=r.replace(i,l.url),l.indices[1]=d)}}return n},s.txt.extractHashtags=function(e){for(var t=[],n=s.txt.extractHashtagsWithIndices(e),a=0;a<n.length;a++)t.push(n[a].hashtag);return t},s.txt.extractHashtagsWithIndices=function(e,t){if(t||(t={checkUrlOverlap:!0}),!e||!e.match(s.txt.regexen.hashSigns))return[];var n=[];if(e.replace(s.txt.regexen.validHashtag,function(e,t,a,r,u,i){var o=i.slice(u+e.length);if(!o.match(s.txt.regexen.endHashtagMatch)){var d=u+t.length,c=d+r.length+1;n.push({hashtag:r,indices:[d,c]})}}),t.checkUrlOverlap){var a=s.txt.extractUrlsWithIndices(e);if(a.length>0){var r=n.concat(a);s.txt.removeOverlappingEntities(r),n=[];for(var u=0;u<r.length;u++)r[u].hashtag&&n.push(r[u])}}return n},s.txt.extractCashtags=function(e){for(var t=[],n=s.txt.extractCashtagsWithIndices(e),a=0;a<n.length;a++)t.push(n[a].cashtag);return t},s.txt.extractCashtagsWithIndices=function(e){if(!e||e.indexOf("$")==-1)return[];var t=[];return e.replace(s.txt.regexen.validCashtag,function(e,n,a,r,u,i){var o=u+n.length,d=o+r.length+1;t.push({cashtag:r,indices:[o,d]})}),t},s.txt.modifyIndicesFromUnicodeToUTF16=function(e,t){s.txt.convertUnicodeIndices(e,t,!1)},s.txt.modifyIndicesFromUTF16ToUnicode=function(e,t){s.txt.convertUnicodeIndices(e,t,!0)},s.txt.getUnicodeTextLength=function(e){return e.replace(s.txt.regexen.non_bmp_code_pairs," ").length},s.txt.convertUnicodeIndices=function(e,t,n){if(0!=t.length){var a=0,r=0;t.sort(function(e,t){return e.indices[0]-t.indices[0]});for(var u=0,i=t[0];a<e.length;){if(i.indices[0]==(n?a:r)){var o=i.indices[1]-i.indices[0];if(i.indices[0]=n?r:a,i.indices[1]=i.indices[0]+o,u++,u==t.length)break;i=t[u]}var d=e.charCodeAt(a);55296<=d&&d<=56319&&a<e.length-1&&(d=e.charCodeAt(a+1),56320<=d&&d<=57343&&a++),r++,a++}}},s.txt.splitTags=function(e){for(var t,n,a=e.split("<"),r=[],u=0;u<a.length;u+=1)if(n=a[u]){t=n.split(">");for(var i=0;i<t.length;i+=1)r.push(t[i])}else r.push("");return r},s.txt.hitHighlight=function(e,t,n){var a="em";if(t=t||[],n=n||{},0===t.length)return e;var r,u,i,o,d,c,l,f=n.tag||a,p=["<"+f+">","</"+f+">"],h=s.txt.splitTags(e),m="",g=0,v=h[0],b=0,x=0,y=!1,w=v,k=[];for(r=0;r<t.length;r+=1)for(u=0;u<t[r].length;u+=1)k.push(t[r][u]);for(i=0;i<k.length;i+=1){for(o=k[i],d=p[i%2],c=!1;null!=v&&o>=b+v.length;)m+=w.slice(x),y&&o===b+w.length&&(m+=d,c=!0),h[g+1]&&(m+="<"+h[g+1]+">"),b+=w.length,x=0,g+=2,v=h[g],w=v,y=!1;c||null==v?c||(c=!0,m+=d):(l=o-b,m+=w.slice(x,l)+d,x=l,y=i%2===0)}if(null!=v)for(x<w.length&&(m+=w.slice(x)),i=g+1;i<h.length;i+=1)m+=i%2===0?h[i]:"<"+h[i]+">";return m};var v=140;s.txt.getTweetLength=function(e,t){t||(t={short_url_length:23,short_url_length_https:23});var n=s.txt.getUnicodeTextLength(e),a=s.txt.extractUrlsWithIndices(e);s.txt.modifyIndicesFromUTF16ToUnicode(e,a);for(var r=0;r<a.length;r++)n+=a[r].indices[0]-a[r].indices[1],n+=a[r].url.toLowerCase().match(s.txt.regexen.urlHasHttps)?t.short_url_length_https:t.short_url_length;return n},s.txt.isInvalidTweet=function(e){return e?s.txt.getTweetLength(e)>v?"too_long":!!s.txt.hasInvalidCharacters(e)&&"invalid_characters":"empty"},s.txt.hasInvalidCharacters=function(e){return s.txt.regexen.invalid_chars.test(e)},s.txt.isValidTweetText=function(e){return!s.txt.isInvalidTweet(e)},s.txt.isValidUsername=function(e){if(!e)return!1;var t=s.txt.extractMentions(e);return 1===t.length&&t[0]===e.slice(1)};var b=n(/^#{validMentionOrList}$/);if(s.txt.isValidList=function(e){var t=e.match(b);return!(!t||""!=t[1]||!t[4])},s.txt.isValidHashtag=function(e){if(!e)return!1;var t=s.txt.extractHashtags(e);return 1===t.length&&t[0]===e.slice(1)},s.txt.isValidUrl=function(e,t,n){if(null==t&&(t=!0),null==n&&(n=!0),!e)return!1;var a=e.match(s.txt.regexen.validateUrlUnencoded);if(!a||a[0]!==e)return!1;var r=a[1],u=a[2],i=a[3],o=a[4],c=a[5];return!!((!n||d(r,s.txt.regexen.validateUrlScheme)&&r.match(/^https?$/i))&&d(i,s.txt.regexen.validateUrlPath)&&d(o,s.txt.regexen.validateUrlQuery,!0)&&d(c,s.txt.regexen.validateUrlFragment,!0))&&(t&&d(u,s.txt.regexen.validateUrlUnicodeAuthority)||!t&&d(u,s.txt.regexen.validateUrlAuthority))},"undefined"!=typeof e&&e.exports&&(e.exports=s.txt),r=[],a=s.txt,u="function"==typeof a?a.apply(t,r):a,!(void 0!==u&&(e.exports=u)),"undefined"!=typeof window)if(window.twttr)for(var x in s)window.twttr[x]=s[x];else window.twttr=s}()},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function u(e){i(),U=document.createElement("div");var t=document.createElement("a"),n=(0,k.findSVGContainer)(e).parentNode,a=e.getAttribute("data-pdf-annotate-id"),r=(0,k.getAnnotationRect)(e),u=1,l=e.getAttribute("data-pdf-annotate-type");"point"===l&&(u=parseFloat($("select.scale").val()));var f=r.left-O,p=r.top-O;U.setAttribute("id","pdf-annotate-edit-overlay"),U.setAttribute("data-target-id",a),U.style.boxSizing="content-box",U.style.position="absolute",U.style.top=p*u+"px",U.style.left=f*u+"px",U.style.width=r.width*u+"px",U.style.height=r.height*u+"px",U.style.border=O+"px solid "+k.BORDER_COLOR,U.style.borderRadius=O+"px",t.innerHTML="×",t.setAttribute("href","javascript://"),t.style.background="#fff",t.style.borderRadius="20px",t.style.border="1px solid #bbb",t.style.color="#bbb",t.style.fontSize="16px",t.style.padding="2px",t.style.textAlign="center",t.style.textDecoration="none",t.style.position="absolute",t.style.top="-13px",t.style.right="-13px",t.style.width="25px",t.style.height="25px",A.readonly&&(t.style.display="none"),U.appendChild(t),n.appendChild(U),document.addEventListener("click",d),document.addEventListener("keyup",s),document.addEventListener("mousedown",c),t.addEventListener("click",o),t.addEventListener("mouseover",function(){t.style.color="#35A4DC",t.style.borderColor="#999",t.style.boxShadow="0 1px 1px #ccc"}),t.addEventListener("mouseout",function(){t.style.color="#bbb",t.style.borderColor="#bbb",t.style.boxShadow=""}),U.addEventListener("mouseover",function(){C||A.readonly||(t.style.display="")}),U.addEventListener("mouseout",function(){t.style.display="none"})}function i(){U&&U.parentNode&&(U.parentNode.removeChild(U),U=null),document.removeEventListener("click",d),document.removeEventListener("keyup",s),document.removeEventListener("mousedown",c),document.removeEventListener("mousemove",l),document.removeEventListener("mouseup",f),(0,k.enableUserSelect)()}function o(){if(U){var e=U.getAttribute("data-target-id"),t=document.querySelectorAll('[data-pdf-annotate-id="'+e+'"]'),n=U.parentNode.querySelector("svg.annotationLayer"),a=(0,k.getMetadata)(n),u=a.documentId;[].concat(r(t)).forEach(function(e){e.parentNode.removeChild(e)}),b["default"].getStoreAdapter().deleteAnnotation(u,e),i()}}function d(e){if((0,k.findSVGAtPoint)(e.clientX,e.clientY)){var t=document.getElementById("pdf-annotate-edit-overlay");if(t){if(C||e.target===t)return;i()}}}function s(e){U&&46===e.keyCode&&"textarea"!==e.target.nodeName.toLowerCase()&&"input"!==e.target.nodeName.toLowerCase()&&(A.readonly||o())}function c(e){if(e.target===U){var t=U.getAttribute("data-target-id"),n=document.querySelector('[data-pdf-annotate-id="'+t+'"]'),a=n.getAttribute("data-pdf-annotate-type");if("highlight"!==a&&"strikeout"!==a){var r=1;"point"===a&&(r=parseFloat($("select.scale").val())),A.readonly||(C=!0),S=e.clientX,L=e.clientY,T=U.offsetLeft,P=U.offsetTop,U.style.background="rgba(255, 255, 255, 0.7)",U.style.cursor="move",U.querySelector("a").style.display="none",document.addEventListener("mousemove",l),document.addEventListener("mouseup",f),(0,k.disableUserSelect)()}}}function l(e){if(!A.readonly){var t=(U.getAttribute("data-target-id"),U.parentNode),n=t.getBoundingClientRect(),a=P+(e.clientY-L),r=T+(e.clientX-S),u=0,i=n.height,o=0,d=n.width;a>u&&a+U.offsetHeight<i&&(U.style.top=a+"px"),r>o&&r+U.offsetWidth<d&&(U.style.left=r+"px")}}function f(e){function t(e,t){return n(parseInt(u[0].getAttribute(e),10),parseInt(u[0].getAttribute(t),10))}function n(e,t){return{deltaX:O+(0,k.scaleDown)(o,{x:U.offsetLeft}).x-e,deltaY:O+(0,k.scaleDown)(o,{y:U.offsetTop}).y-t}}var a=U.getAttribute("data-target-id"),u=document.querySelectorAll('[data-pdf-annotate-id="'+a+'"]'),i=u[0].getAttribute("data-pdf-annotate-type"),o=U.parentNode.querySelector("svg.annotationLayer"),d=(0,k.getMetadata)(o),s=d.documentId;U.querySelector("a").style.display="";var c=1;"point"===i&&(c=parseFloat($("select.scale").val())),b["default"].getStoreAdapter().getAnnotation(s,a).then(function(e){if(["area","highlight","point","textbox"].indexOf(i)>-1){var d=t("x","y"),l=d.deltaX,f=d.deltaY;[].concat(r(u)).forEach(function(t,n){if(0!==f){var a=parseInt(t.getAttribute("y"),10)+f,r=a;"textbox"===i&&(r+=e.size),"point"!==i||$.browser.mozilla||(r=(0,k.scaleUp)(o,{viewY:r}).viewY/c),$.browser.mozilla&&(r-=8),t.setAttribute("y",r),e.rectangles?e.rectangles[n].y=a:e.y&&(e.y=a)}if(0!==l){var u=parseInt(t.getAttribute("x"),10)+l,d=u;"point"!==i||$.browser.mozilla||(d=(0,k.scaleUp)(o,{viewX:d}).viewX/c),$.browser.mozilla&&(d-=8),t.setAttribute("x",d),e.rectangles?e.rectangles[n].x=u:e.x&&(e.x=u)}})}else if("drawing"===i){var p=(0,k.scaleDown)(o,(0,k.getAnnotationRect)(u[0])),h=g(e.lines[0],2),m=h[0],v=h[1],x=n(m,v),w=x.deltaX,_=x.deltaY;_+=v-p.top,w+=m-p.left,e.lines.forEach(function(t,n){var a=g(e.lines[n],2),r=a[0],u=a[1];e.lines[n][0]=r+w,e.lines[n][1]=u+_}),u[0].parentNode.removeChild(u[0]),(0,y["default"])(o,e)}A.readonly||b["default"].getStoreAdapter().editAnnotation(s,a,e)}),setTimeout(function(){C=!1},0),U.style.background="",U.style.cursor="",document.removeEventListener("mousemove",l),document.removeEventListener("mouseup",f),(0,k.enableUserSelect)()}function p(e){var t=e.dataset.pdfAnnotateType;"point"===t&&(0,_.selectComment)(e.dataset.pdfAnnotateId),u(e)}function h(){E||(E=!0,(0,w.addEventListener)("annotation:click",p))}function m(){i(),E&&(E=!1,(0,w.removeEventListener)("annotation:click",p))}Object.defineProperty(t,"__esModule",{value:!0});var g=function(){function e(e,t){var n=[],a=!0,r=!1,u=void 0;try{for(var i,o=e[Symbol.iterator]();!(a=(i=o.next()).done)&&(n.push(i.value),!t||n.length!==t);a=!0);}catch(d){r=!0,u=d}finally{try{!a&&o["return"]&&o["return"]()}finally{if(r)throw u}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();t.createEditOverlay=u,t.enableEdit=h,t.disableEdit=m;var v=n(1),b=a(v),x=n(41),y=a(x),w=n(4),k=n(6),_=n(38),A=n(37),E=(n(50),!1),C=!1,U=void 0,S=void 0,L=void 0,T=void 0,P=void 0,O=3},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=void 0,n=void 0;switch(e.rotation%360){case 0:t=n=0;break;case 90:t=0,n=e.width/e.scale*-1;break;case 180:t=e.width/e.scale*-1,n=e.height/e.scale*-1;break;case 270:t=e.height/e.scale*-1,n=0}return{x:t,y:n}}function u(e,t){var n=r(t);return e.setAttribute("transform","scale("+t.scale+") rotate("+t.rotation+") translate("+n.x+", "+n.y+")"),e}function i(e,t,n){n||(n=JSON.parse(e.getAttribute("data-pdf-annotate-viewport")));var a=void 0;switch(t.type){case"area":case"highlight":a=(0,m["default"])(t);break;case"strikeout":a=(0,s["default"])(t);break;case"point":a=(0,p["default"])(t);break;case"textbox":a=(0,v["default"])(t);break;case"drawing":a=(0,l["default"])(t)}return a&&(a.setAttribute("data-pdf-annotate-id",t.uuid),a.setAttribute("data-pdf-annotate-type",t.type),a.setAttribute("aria-hidden",!0),e.appendChild(u(a,n))),a}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=i;var o=n(42),d=(a(o),n(43)),s=a(d),c=n(46),l=a(c),f=n(47),p=a(f),h=n(48),m=a(h),g=n(49),v=a(g);/firefox/i.test(navigator.userAgent);e.exports=t["default"]},function(e,t){/*
        object-assign
        (c) Sindre Sorhus
        @license MIT
        */
-"use strict";function n(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function r(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(e){return t[e]});if("0123456789"!==r.join(""))return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(e){a[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},a)).join("")}catch(u){return!1}}var a=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=r()?Object.assign:function(e,t){for(var r,o,d=n(e),s=1;s<arguments.length;s++){r=Object(arguments[s]);for(var c in r)u.call(r,c)&&(d[c]=r[c]);if(a){o=a(r);for(var l=0;l<o.length;l++)i.call(r,o[l])&&(d[o[l]]=r[o[l]])}}return d}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){var t=document.createElementNS("http://www.w3.org/2000/svg","g");return(0,i["default"])(t,{stroke:(0,d["default"])(e.color||"#f00"),strokeWidth:1}),e.rectangles.forEach(function(e){var n=document.createElementNS("http://www.w3.org/2000/svg","line");(0,i["default"])(n,{x1:e.x,y1:e.y,x2:e.x+e.width,y2:e.y}),t.appendChild(n)}),t}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var u=n(44),i=r(u),o=n(45),d=r(o);e.exports=t["default"]},function(e,t){"use strict";function n(e,t){Object.keys(t).forEach(function(n){e.setAttribute(u(n),t[n])})}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n;var r=/[A-Z]/g,a=["viewBox"],u=function(e){return a.indexOf(e)===-1&&(e=e.replace(r,function(e){return"-"+e.toLowerCase()})),e};e.exports=t["default"]},function(e,t){"use strict";function n(e){return r.test(e)&&(e="#"+e),e}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n;var r=/^([a-f0-9]{6}|[a-f0-9]{3})$/i;e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){for(var t=[],n=document.createElementNS("http://www.w3.org/2000/svg","path"),r=0,a=e.lines.length;r<a;r++){var u=e.lines[r],o=e.lines[r+1];o&&t.push("M"+u[0]+" "+u[1]+" "+o[0]+" "+o[1])}return(0,i["default"])(n,{d:t.join(" ")+"Z",stroke:(0,d["default"])(e.color||"#000"),strokeWidth:e.width||1,fill:"none"}),n}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var u=n(44),i=r(u),o=n(45),d=r(o);e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","svg"),r=document.createElementNS("http://www.w3.org/2000/svg","rect"),a=document.createElementNS("http://www.w3.org/2000/svg","path");return(0,i["default"])(t,{width:o,height:o,x:e.x,y:e.y}),(0,i["default"])(n,{width:o,height:o,x:0,y:.05*o*-1,viewBox:"0 0 1000 1000"}),(0,i["default"])(r,{width:o,height:o,stroke:"#000",fill:"#ff0"}),(0,i["default"])(a,{d:d,strokeWidth:50,stroke:"#000",fill:"#fff"}),n.appendChild(a),t.appendChild(r),t.appendChild(n),t}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var u=n(44),i=r(u),o=25,d="M499.968 214.336q-113.832 0 -212.877 38.781t-157.356 104.625 -58.311 142.29q0 62.496 39.897 119.133t112.437 97.929l48.546 27.9 -15.066 53.568q-13.392 50.778 -39.06 95.976 84.816 -35.154 153.45 -95.418l23.994 -21.204 31.806 3.348q38.502 4.464 72.54 4.464 113.832 0 212.877 -38.781t157.356 -104.625 58.311 -142.29 -58.311 -142.29 -157.356 -104.625 -212.877 -38.781z";e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){if("highlight"===e.type){var t=document.createElementNS("http://www.w3.org/2000/svg","g");return(0,o["default"])(t,{fill:(0,s["default"])(e.color||"#ff0"),fillOpacity:.2}),e.rectangles.forEach(function(e){t.appendChild(u(e))}),t}var n=u(e);return(0,o["default"])(n,{stroke:(0,s["default"])(e.color||"#f00"),fill:"none"}),n}function u(e){var t=document.createElementNS("http://www.w3.org/2000/svg","rect");return(0,o["default"])(t,{x:e.x,y:e.y,width:e.width,height:e.height}),t}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var i=n(44),o=r(i),d=n(45),s=r(d);e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){var t=document.createElementNS("http://www.w3.org/2000/svg","text");return(0,i["default"])(t,{x:e.x,y:e.y+parseInt(e.size,10),fill:(0,d["default"])(e.color||"#000"),fontSize:e.size}),t.innerHTML=e.content,t}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var u=n(44),i=r(u),o=n(45),d=r(o);e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e,t,n){return new Promise(function(r,a){return e.innerHTML="",e.setAttribute("data-pdf-annotate-container",!0),e.setAttribute("data-pdf-annotate-viewport",JSON.stringify(t)),e.removeAttribute("data-pdf-annotate-document"),e.removeAttribute("data-pdf-annotate-page"),n?(e.setAttribute("data-pdf-annotate-document",n.documentId),e.setAttribute("data-pdf-annotate-page",n.pageNumber),Array.isArray(n.annotations)&&0!==n.annotations.length?(n.annotations.forEach(function(n){(0,o["default"])(e,n,t)}),void r(e)):r(e)):r(e)})}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var u=n(1),i=(r(u),n(41)),o=r(i),d=n(51);r(d);e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){e=Array.isArray(e)?e:[],Object.keys(f).forEach(function(t){var n=f[t];e.filter(function(e){return e.type===t}).sort(n).forEach(function(e,t){return(0,s["default"])(e,t+1)})})}function u(e,t){return e.y<t.y?e.x-t.x:1}function i(e,t){return u(e.rectangles[0],t.rectangles[0])}function o(e,t){var n=e.lines[0],r=t.lines[0];return u({x:n[0],y:n[1]},{x:r[0],y:r[1]})}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var d=n(52),s=r(d),c=n(58),l=r(c);(0,l["default"])();var f={highlight:i,strikeout:i,drawing:o,textbox:u,point:u,area:u};e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;switch(e.type){case"highlight":case"strikeout":var n=e.rectangles,r=n[0],a=n[n.length-1];(0,c["default"])((0,i["default"])("Begin "+e.type+" annotation "+t,e.uuid),r.x,r.y,e.page,!0),(0,c["default"])((0,i["default"])("End "+e.type+" annotation "+t,e.uuid+"-end"),a.x+a.width,a.y,e.page,!1);break;case"textbox":case"point":var u="textbox"===e.type?" (content: "+e.content+")":"";(0,d["default"])((0,i["default"])(e.type+" annotation "+t+u,e.uuid),e.x,e.y,e.page);break;case"drawing":case"area":var o="undefined"!=typeof e.x?e.x:e.lines[0][0],s="undefined"!=typeof e.y?e.y:e.lines[0][1];(0,d["default"])((0,i["default"])("Unlabeled drawing",e.uuid),o,s,e.page)}p.includes(e.type)&&(0,f["default"])(e.documentId,e.uuid)}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var u=n(53),i=r(u),o=n(54),d=r(o),s=n(55),c=r(s),l=n(56),f=r(l),p=["highlight","point","area"];e.exports=t["default"]},function(e,t){"use strict";function n(e,t){var n=document.createElement("div"),r=document.createTextNode(e);return n.appendChild(r),n.setAttribute("id","pdf-annotate-screenreader-"+t),n.style.position="absolute",n.style.left="-10000px",n.style.top="auto",n.style.width="1px",n.style.height="1px",n.style.overflow="hidden",n}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function u(e,t,n,r){if((0,o["default"])(e,t,n,r,!0))return!0;var u=document.querySelector('svg[data-pdf-annotate-page="'+r+'"]'),i=u.getBoundingClientRect(),s=[].concat(a(u.parentNode.querySelectorAll(".textLayer > div")));n=(0,d.scaleUp)(u,{y:n}).y+i.top,t=(0,d.scaleUp)(u,{x:t}).x+i.left;for(var c=0,l=s.length;c<l;c++){var f=s[c],p=f.getBoundingClientRect();if(n<=p.top)return f.parentNode.insertBefore(e,f),!0}var h=u.parentNode.querySelector(".textLayer");if(h){var m=h.getBoundingClientRect();if((0,d.pointIntersectsRect)(t,n,m))return h.appendChild(e),!0}return!1}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=u;var i=n(55),o=r(i),d=n(6);e.exports=t["default"]},function(e,t,n){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function a(e,t,n,r,a){var o=2;t=Math.max(t+o*(a?1:-1),0);var d=u(t,n+o,r);if(!d)return!1;t+=o*(a?-1:1);var s=document.querySelector('svg[data-pdf-annotate-page="'+r+'"]'),c=(0,i.scaleDown)(s,{left:d.getBoundingClientRect().left}).left-s.getBoundingClientRect().left,l=d.cloneNode(!0),f=l.innerHTML.split(""),p=[];for(l.style.position="absolute",l.style.top="-10000px",l.style.left="-10000px",document.body.appendChild(l);f.length;){if(">"===f[f.length-1])for(;f.length&&(p.unshift(f.pop()),"<"!==p[0]););l.innerHTML=f.join("");var h=(0,i.scaleDown)(s,{width:l.getBoundingClientRect().width}).width;if(c+h<=t)break;p.unshift(f.pop())}return d.innerHTML=f.join("")+e.outerHTML+p.join(""),l.parentNode.removeChild(l),!0}function u(e,t,n){var a=document.querySelector('svg[data-pdf-annotate-page="'+n+'"]'),u=a.getBoundingClientRect();return t=(0,i.scaleUp)(a,{y:t}).y+u.top,e=(0,i.scaleUp)(a,{x:e}).x+u.left,[].concat(r(a.parentNode.querySelectorAll(".textLayer [data-canvas-width]"))).filter(function(n){return(0,i.pointIntersectsRect)(e,t,n.getBoundingClientRect())})[0]}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var i=n(6);e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e,t,n){var r=void 0;return r=Array.isArray(n)?Promise.resolve(n):i["default"].getStoreAdapter().getComments(e,t),r.then(function(e){var n=document.getElementById("pdf-annotate-screenreader-"+t);if(n){var r=document.createElement("ol");r.setAttribute("id","pdf-annotate-screenreader-comment-list-"+t),r.setAttribute("aria-label","Comments"),n.appendChild(r),e.forEach(d["default"])}})}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var u=n(1),i=r(u),o=n(57),d=r(o);e.exports=t["default"]},function(e,t){"use strict";function n(e){if(e){var t=document.querySelector("#pdf-annotate-screenreader-"+e.annotation+" ol");if(t){var n=document.createElement("li");n.setAttribute("id","pdf-annotate-screenreader-comment-"+e.uuid),n.appendChild(document.createTextNode(""+e.content)),t.appendChild(n)}}}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(){(0,b.addEventListener)("annotation:add",function(e,t,n){u(e,t,n.type)}),(0,b.addEventListener)("annotation:edit",function(e,t,n){u(e,n.page,n.type)}),(0,b.addEventListener)("annotation:delete",i),(0,b.addEventListener)("comment:add",o),(0,b.addEventListener)("comment:update",d),(0,b.addEventListener)("comment:delete",s)}function u(e,t,n){y["default"].getStoreAdapter().getAnnotations(e).then(function(e){var t=[],r=!0,a=!1,u=void 0;try{for(var i,o=Object.keys(e)[Symbol.iterator]();!(r=(i=o.next()).done);r=!0){var d=i.value;for(var s in e[d])s.type==n&&t.push(s)}}catch(c){a=!0,u=c}finally{try{!r&&o["return"]&&o["return"]()}finally{if(a)throw u}}return t}).then(function(t){return t.forEach(function(t){i(e,t.uuid)}),t}).then(p["default"])}function i(e,t){c("pdf-annotate-screenreader-"+t),c("pdf-annotate-screenreader-"+t+"-end")}function o(e,t,n){var r=document.querySelector("pdf-annotate-screenreader-comment-list-"+t),a=void 0;a=r?Promise.resolve(!0):(0,v["default"])(e,t,[]).then(function(){return r=document.querySelector("pdf-annotate-screenreader-comment-list-"+t),!0}),a.then(function(){(0,m["default"])(n)})}function d(e,t,n){alert("updateComment")}function s(e,t){c("pdf-annotate-screenreader-comment-"+t)}function c(e){var t=document.getElementById(e);t&&t.parentNode.removeChild(t)}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=a;var l=n(52),f=(r(l),n(51)),p=r(f),h=n(57),m=r(h),g=n(56),v=r(g),b=n(4),x=n(1),y=r(x);e.exports=t["default"]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(4),a=n(40),u=n(60),i=n(61),o=n(62),d=n(63),s=n(64),c=n(6);t["default"]={addEventListener:r.addEventListener,removeEventListener:r.removeEventListener,fireEvent:r.fireEvent,disableEdit:a.disableEdit,enableEdit:a.enableEdit,disablePen:u.disablePen,enablePen:u.enablePen,setPen:u.setPen,disablePoint:i.disablePoint,enablePoint:i.enablePoint,disableRect:o.disableRect,enableRect:o.enableRect,disableText:d.disableText,enableText:d.enableText,setText:d.setText,createPage:s.createPage,renderPage:s.renderPage,setActiveToolbarItem:c.setActiveToolbarItem},e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(){y=null,w=[],document.addEventListener("mousemove",i),document.addEventListener("mouseup",u)}function u(e){var t=void 0;if(w.length>1&&(t=(0,g.findSVGAtPoint)(e.clientX,e.clientY))){var n=(0,g.getMetadata)(t),r=n.documentId,a=n.pageNumber;p["default"].getStoreAdapter().addAnnotation(r,a,{type:"drawing",width:b,color:x,lines:w}).then(function(e){y&&t.removeChild(y),(0,m["default"])(t,e)})}document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",u)}function i(e){d(e.clientX,e.clientY)}function o(e){27===e.keyCode&&(w=null,y.parentNode.removeChild(y),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",u))}function d(e,t){var n=(0,g.findSVGAtPoint)(e,t);if(n){var r=n.getBoundingClientRect(),a=(0,g.scaleDown)(n,{x:e-r.left,y:t-r.top});w.push([a.x,a.y]),w.length<=1||(y&&n.removeChild(y),y=(0,m["default"])(n,{type:"drawing",color:x,width:b,lines:w}))}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"000000";b=parseInt(e,10),x=t}function c(){v||(v=!0,document.addEventListener("mousedown",a),document.addEventListener("keyup",o),(0,g.disableUserSelect)())}function l(){v&&(v=!1,document.removeEventListener("mousedown",a),document.removeEventListener("keyup",o),(0,g.enableUserSelect)())}Object.defineProperty(t,"__esModule",{value:!0}),t.setPen=s,t.enablePen=c,t.disablePen=l;var f=n(1),p=r(f),h=n(41),m=r(h),g=n(6),v=!1,b=void 0,x=void 0,y=void 0,w=void 0},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){!v&&(0,m.findSVGAtPoint)(e.clientX,e.clientY)&&(v=document.createElement("textarea"),v.setAttribute("id","pdf-annotate-point-input"),v.setAttribute("placeholder","Saisir un commentaire"),v.style.border="3px solid "+m.BORDER_COLOR,v.style.borderRadius="3px",v.style.position="absolute",v.style.top=e.clientY+"px",v.style.left=e.clientX+"px",v.style.width="220px",v.style.height="130px",v.addEventListener("blur",u),v.addEventListener("keyup",i),document.body.appendChild(v),v.focus())}function u(){o()}function i(e){27===e.keyCode?d():13===e.keyCode&&o()}function o(){if(v.value.trim().length>0){var e=parseInt(v.style.left,10),t=parseInt(v.style.top,10),n=v.value.trim(),r=(0,m.findSVGAtPoint)(e,t);if(!r)return;var a=r.getBoundingClientRect(),u=(0,m.getMetadata)(r),i=u.documentId,o=u.pageNumber,s=Object.assign({type:"point"},(0,m.scaleDown)(r,{x:e-a.left,y:t-a.top}));f["default"].getStoreAdapter().addAnnotation(i,o,s).then(function(e){f["default"].getStoreAdapter().addComment(i,e.uuid,n),(0,h["default"])(r,e)})}d()}function d(){v.removeEventListener("blur",u),v.removeEventListener("keyup",i),document.body.removeChild(v),v=null}function s(){g||(g=!0,document.addEventListener("mouseup",a))}function c(){g&&(g=!1,document.removeEventListener("mouseup",a))}Object.defineProperty(t,"__esModule",{value:!0}),t.enablePoint=s,t.disablePoint=c;var l=n(1),f=r(l),p=n(41),h=r(p),m=n(6),g=!1,v=void 0},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function u(){try{var e=window.getSelection(),t=e.getRangeAt(0),n=t.getClientRects();if(n.length>0&&n[0].width>0&&n[0].height>0)return n}catch(r){}return null}function i(e){var t=void 0;if("area"===x&&(t=(0,v.findSVGAtPoint)(e.clientX,e.clientY))){var n=t.getBoundingClientRect();w=e.clientY,k=e.clientX,y=document.createElement("div"),y.style.position="absolute",y.style.top=w-n.top+"px",y.style.left=k-n.left+"px",y.style.border="3px solid "+v.BORDER_COLOR,y.style.borderRadius="3px",t.parentNode.appendChild(y),document.addEventListener("mousemove",o),(0,v.disableUserSelect)()}}function o(e){var t=y.parentNode.querySelector("svg.annotationLayer"),n=t.getBoundingClientRect();k+(e.clientX-k)<n.right&&(y.style.width=e.clientX-k+"px"),w+(e.clientY-w)<n.bottom&&(y.style.height=e.clientY-w+"px")}function d(e){var t=void 0;if("area"!==x&&(t=u())){(0,v.findSVGAtPoint)(t[0].left,t[0].top);c(x,[].concat(a(t)).map(function(e){return{top:e.top,left:e.left,width:e.width,height:e.height}}))}else if("area"===x&&y){var n=y.parentNode.querySelector("svg.annotationLayer"),r=n.getBoundingClientRect();c(x,[{top:parseInt(y.style.top,10)+r.top,left:parseInt(y.style.left,10)+r.left,width:parseInt(y.style.width,10),height:parseInt(y.style.height,10)}]),y.parentNode.removeChild(y),y=null,document.removeEventListener("mousemove",o),(0,v.enableUserSelect)()}}function s(e){if(27===e.keyCode){var t=window.getSelection();t.removeAllRanges(),y&&y.parentNode&&(y.parentNode.removeChild(y),y=null,document.removeEventListener("mousemove",o))}}function c(e,t,n){var r=(0,v.findSVGAtPoint)(t[0].left,t[0].top),u=void 0;if(r){var i=r.getBoundingClientRect();if(n||("highlight"===e?n="FFFF00":"strikeout"===e&&(n="FF0000")),u={type:e,color:n,rectangles:[].concat(a(t)).map(function(t){var n=0;return"strikeout"===e&&(n=t.height/2),(0,v.scaleDown)(r,{y:t.top+n-i.top,x:t.left-i.left,width:t.width,height:t.height})}).filter(function(e){return e.width>0&&e.height>0&&e.x>-1&&e.y>-1})},0!==u.rectangles.length){if("area"===e){var o=u.rectangles[0];delete u.rectangles,u.x=o.x,u.y=o.y,u.width=o.width,u.height=o.height}var d=(0,v.getMetadata)(r),s=d.documentId,c=d.pageNumber;h["default"].getStoreAdapter().addAnnotation(s,c,u).then(function(e){(0,g["default"])(r,e)})}}}function l(e){x=e,b||(b=!0,document.addEventListener("mouseup",d),document.addEventListener("mousedown",i),document.addEventListener("keyup",s))}function f(){b&&(b=!1,document.removeEventListener("mouseup",d),document.removeEventListener("mousedown",i),document.removeEventListener("keyup",s))}Object.defineProperty(t,"__esModule",{value:!0}),t.enableRect=l,t.disableRect=f;var p=n(1),h=r(p),m=n(41),g=r(m),v=n(6),b=!1,x=void 0,y=void 0,w=void 0,k=void 0},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){!b&&(0,g.findSVGAtPoint)(e.clientX,e.clientY)&&(b=document.createElement("input"),b.setAttribute("id","pdf-annotate-text-input"),b.setAttribute("placeholder","Enter text"),b.style.border="3px solid "+g.BORDER_COLOR,b.style.borderRadius="3px",b.style.position="absolute",b.style.top=e.clientY+"px",b.style.left=e.clientX+"px",b.style.fontSize=x+"px",b.addEventListener("blur",u),b.addEventListener("keyup",i),document.body.appendChild(b),b.focus())}function u(){o()}function i(e){27===e.keyCode?d():13===e.keyCode&&o()}function o(){if(b.value.trim().length>0){var e=parseInt(b.style.left,10),t=parseInt(b.style.top,10),n=(0,g.findSVGAtPoint)(e,t);if(!n)return;var r=(0,g.getMetadata)(n),a=r.documentId,u=r.pageNumber,i=n.getBoundingClientRect(),o=Object.assign({type:"textbox",size:x,color:y,content:b.value.trim()},(0,g.scaleDown)(n,{x:e-i.left,y:t-i.top,width:b.offsetWidth,height:b.offsetHeight}));p["default"].getStoreAdapter().addAnnotation(a,u,o).then(function(e){(0,m["default"])(n,e)})}d()}function d(){try{b&&(b.removeEventListener("blur",u),b.removeEventListener("keyup",i),document.body.removeChild(b),b=null)}catch(e){console.log("Try/catch is necessary because exist a error in Safari")}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:12,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"000000";x=parseInt(e,10),y=t}function c(){v||(v=!0,document.addEventListener("mouseup",a))}function l(){v&&(v=!1,document.removeEventListener("mouseup",a))}Object.defineProperty(t,"__esModule",{value:!0}),t.setText=s,t.enableText=c,t.disableText=l;var f=n(1),p=r(f),h=n(41),m=r(h),g=n(6),v=!1,b=void 0,x=void 0,y=void 0},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e){var t=document.createElement("div");t.innerHTML=m;var n=t.children[0],r=n.querySelector("canvas");return n.setAttribute("id","pageContainer"+e),n.setAttribute("data-page-number",e),r.mozOpaque=!0,r.setAttribute("id","page"+e),n}function u(e,t,n){var r=n.documentId,a=n.pdfDocument,u=n.scale;n.rotate;return Promise.all([a.getPage(e)]).then(function(n){var a=c(n,1),o=a[0],d=document.getElementById("pageContainer"+e),s=d.querySelector(".annotationLayer"),l=d.querySelector(".canvasWrapper canvas"),p=l.getContext("2d",{alpha:!1}),m=o.getViewport(u),g=i(e,m,p);return Promise.all([o.render({canvasContext:p,viewport:m,transform:g}),f["default"].render(s,m,{pageNumber:e,documentId:r,annotations:t[e]})]).then(function(){return o.getTextContent({normalizeWhitespace:!0}).then(function(n){return new Promise(function(r,a){var u=d.querySelector(".textLayer"),i=new pdfjsViewer.DefaultTextLayerFactory,o=i.createTextLayerBuilder(u,e-1,m);o.setTextContent(n),o.render(),setTimeout(function(){try{(0,h["default"])(t.annotations),r()}catch(e){a(e)}})})})}).then(function(){return d.setAttribute("data-loaded","true"),[o,t]})})}function i(e,t,n){var r=document.getElementById("pageContainer"+e),a=r.querySelector(".canvasWrapper canvas"),u=r.querySelector(".annotationLayer"),i=r.querySelector(".canvasWrapper"),c=r.querySelector(".textLayer"),l=d(n),f=l.scaled?[l.sx,0,0,l.sy,0,0]:null,p=o(l.sx),h=o(l.sy);return r.style.visibility="",a.width=s(t.width*l.sx,p[0]),a.height=s(t.height*l.sy,h[0]),a.style.width=s(t.width,p[1])+"px",a.style.height=s(t.height,p[1])+"px",u.setAttribute("width",t.width),u.setAttribute("height",t.height),u.style.width=t.width+"px",u.style.height=t.height+"px",r.style.width=t.width+"px",r.style.height=t.height+"px",i.style.width=t.width+"px",i.style.height=t.height+"px",c.style.width=t.width+"px",c.style.height=t.height+"px",f}function o(e){if(Math.floor(e)===e)return[e,1];var t=1/e,n=8;if(t>n)return[1,n];if(Math.floor(t)===t)return[1,t];for(var r=e>1?t:e,a=0,u=1,i=1,o=1;;){var d=a+i,s=u+o;if(s>n)break;r<=d/s?(i=d,o=s):(a=d,u=s)}return r-a/u<i/o-r?r===e?[a,u]:[u,a]:r===e?[i,o]:[o,i]}function d(e){var t=window.devicePixelRatio||1,n=e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1,r=t/n;return{sx:r,sy:r,scaled:1!==r}}function s(e,t){var n=e%t;return 0===n?e:Math.round(e-n+t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){var n=[],r=!0,a=!1,u=void 0;try{for(var i,o=e[Symbol.iterator]();!(r=(i=o.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(d){a=!0,u=d}finally{try{!r&&o["return"]&&o["return"]()}finally{if(a)throw u}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();t.createPage=a,t.renderPage=u;var l=n(1),f=r(l),p=n(51),h=r(p),m='\n  <div style="visibility: hidden;" class="page" data-loaded="false">\n    <div class="canvasWrapper">\n      <canvas></canvas>\n    </div>\n    <svg class="annotationLayer"></svg>\n    <div class="textLayer"></div>\n  </div>\n'},function(e,t){"use strict";function n(e,t,n){function a(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];f=e,p.setAttribute("data-color",e),p.style.background=e,t&&"function"==typeof n&&n(e),i()}function u(){l?i():o()}function i(){document.removeEventListener("keyup",s),c&&c.parentNode&&c.parentNode.removeChild(c),l=!1,p.focus()}function o(){c||(c=document.createElement("div"),c.style.background="#fff",c.style.border="1px solid #ccc",c.style.padding="2px",c.style.position="absolute",c.style.width="122px",e.style.position="relative",r.map(d).forEach(function(e){e.style.margin="2px",e.onclick=function(){a(e.getAttribute("data-color"))},c.appendChild(e)})),document.addEventListener("keyup",s),e.appendChild(c),l=!0}function d(e){var t=document.createElement("a");return t.className="color",t.setAttribute("href","javascript://"),e.name?t.setAttribute("title",e.name):t.setAttribute("title","Choisir une couleur"),t.setAttribute("data-color",e.hex),t.style.background=e.hex,t}function s(e){27===e.keyCode&&i()}var c=void 0,l=!1,f=void 0,p=d({hex:t});p.onclick=u,e.appendChild(p),a(t,!1)}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n;var r=[{hex:"#000000",name:"Black"},{hex:"#EF4437",name:"Red"},{hex:"#E71F63",name:"Pink"},{hex:"#8F3E97",name:"Purple"},{hex:"#65499D",name:"Deep Purple"},{hex:"#4554A4",name:"Indigo"},{hex:"#2083C5",name:"Blue"},{hex:"#35A4DC",name:"Light Blue"},{hex:"#09BCD3",name:"Cyan"},{hex:"#009688",name:"Teal"},{hex:"#43A047",name:"Green"},{hex:"#8BC34A",name:"Light Green"},{hex:"#FDC010",name:"Yellow"},{hex:"#F8971C",name:"Orange"},{hex:"#F0592B",name:"Deep Orange"},{hex:"#F06291",name:"Light Pink"}];e.exports=t["default"]}])});
+"use strict";function n(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function a(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var a=Object.getOwnPropertyNames(t).map(function(e){return t[e]});if("0123456789"!==a.join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(u){return!1}}var r=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=a()?Object.assign:function(e,t){for(var a,o,d=n(e),s=1;s<arguments.length;s++){a=Object(arguments[s]);for(var c in a)u.call(a,c)&&(d[c]=a[c]);if(r){o=r(a);for(var l=0;l<o.length;l++)i.call(a,o[l])&&(d[o[l]]=a[o[l]])}}return d}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=document.createElementNS("http://www.w3.org/2000/svg","g");return(0,i["default"])(t,{stroke:(0,d["default"])(e.color||"#f00"),strokeWidth:1}),e.rectangles.forEach(function(e){var n=document.createElementNS("http://www.w3.org/2000/svg","line");(0,i["default"])(n,{x1:e.x,y1:e.y,x2:e.x+e.width,y2:e.y}),t.appendChild(n)}),t}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var u=n(44),i=a(u),o=n(45),d=a(o);e.exports=t["default"]},function(e,t){"use strict";function n(e,t){Object.keys(t).forEach(function(n){e.setAttribute(u(n),t[n])})}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n;var a=/[A-Z]/g,r=["viewBox"],u=function(e){return r.indexOf(e)===-1&&(e=e.replace(a,function(e){return"-"+e.toLowerCase()})),e};e.exports=t["default"]},function(e,t){"use strict";function n(e){return a.test(e)&&(e="#"+e),e}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n;var a=/^([a-f0-9]{6}|[a-f0-9]{3})$/i;e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){for(var t=[],n=document.createElementNS("http://www.w3.org/2000/svg","path"),a=0,r=e.lines.length;a<r;a++){var u=e.lines[a],o=e.lines[a+1];o&&t.push("M"+u[0]+" "+u[1]+" "+o[0]+" "+o[1])}return(0,i["default"])(n,{d:t.join(" ")+"Z",stroke:(0,d["default"])(e.color||"#000"),strokeWidth:e.width||1,fill:"none"}),n}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var u=n(44),i=a(u),o=n(45),d=a(o);e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","svg"),a=document.createElementNS("http://www.w3.org/2000/svg","rect"),r=document.createElementNS("http://www.w3.org/2000/svg","path");return(0,i["default"])(t,{width:o,height:o,x:e.x,y:e.y}),(0,i["default"])(n,{width:o,height:o,x:0,y:.05*o*-1,viewBox:"0 0 1000 1000"}),(0,i["default"])(a,{width:o,height:o,stroke:"#000",fill:"#ff0"}),(0,i["default"])(r,{d:d,strokeWidth:50,stroke:"#000",fill:"#fff"}),n.appendChild(r),t.appendChild(a),t.appendChild(n),t}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var u=n(44),i=a(u),o=25,d="M499.968 214.336q-113.832 0 -212.877 38.781t-157.356 104.625 -58.311 142.29q0 62.496 39.897 119.133t112.437 97.929l48.546 27.9 -15.066 53.568q-13.392 50.778 -39.06 95.976 84.816 -35.154 153.45 -95.418l23.994 -21.204 31.806 3.348q38.502 4.464 72.54 4.464 113.832 0 212.877 -38.781t157.356 -104.625 58.311 -142.29 -58.311 -142.29 -157.356 -104.625 -212.877 -38.781z";e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){if("highlight"===e.type){var t=document.createElementNS("http://www.w3.org/2000/svg","g");return(0,o["default"])(t,{fill:(0,s["default"])(e.color||"#ff0"),fillOpacity:.2}),e.rectangles.forEach(function(e){t.appendChild(u(e))}),t}var n=u(e);return(0,o["default"])(n,{stroke:(0,s["default"])(e.color||"#f00"),fill:"none"}),n}function u(e){var t=document.createElementNS("http://www.w3.org/2000/svg","rect");return(0,o["default"])(t,{x:e.x,y:e.y,width:e.width,height:e.height}),t}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var i=n(44),o=a(i),d=n(45),s=a(d);e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=document.createElementNS("http://www.w3.org/2000/svg","text");return(0,i["default"])(t,{x:e.x,y:e.y+parseInt(e.size,10),fill:(0,d["default"])(e.color||"#000"),fontSize:e.size}),t.innerHTML=e.content,t}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var u=n(44),i=a(u),o=n(45),d=a(o);e.exports=t["default"]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=n(4),r=n(40),u=n(51),i=n(52),o=n(53),d=n(54),s=n(55),c=n(6);t["default"]={addEventListener:a.addEventListener,removeEventListener:a.removeEventListener,fireEvent:a.fireEvent,disableEdit:r.disableEdit,enableEdit:r.enableEdit,disablePen:u.disablePen,enablePen:u.enablePen,setPen:u.setPen,disablePoint:i.disablePoint,enablePoint:i.enablePoint,disableRect:o.disableRect,enableRect:o.enableRect,disableText:d.disableText,enableText:d.enableText,setText:d.setText,createPage:s.createPage,renderPage:s.renderPage,setActiveToolbarItem:c.setActiveToolbarItem},e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){y=null,w=[],document.addEventListener("mousemove",i),document.addEventListener("mouseup",u)}function u(e){var t=void 0;if(w.length>1&&(t=(0,g.findSVGAtPoint)(e.clientX,e.clientY))){var n=(0,g.getMetadata)(t),a=n.documentId,r=n.pageNumber;p["default"].getStoreAdapter().addAnnotation(a,r,{type:"drawing",width:b,color:x,lines:w}).then(function(e){y&&t.removeChild(y),(0,m["default"])(t,e)})}document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",u)}function i(e){d(e.clientX,e.clientY)}function o(e){27===e.keyCode&&(w=null,y.parentNode.removeChild(y),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",u))}function d(e,t){var n=(0,g.findSVGAtPoint)(e,t);if(n){var a=n.getBoundingClientRect(),r=(0,g.scaleDown)(n,{x:e-a.left,y:t-a.top});w.push([r.x,r.y]),w.length<=1||(y&&n.removeChild(y),y=(0,m["default"])(n,{type:"drawing",color:x,width:b,lines:w}))}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"000000";b=parseInt(e,10),x=t}function c(){v||(v=!0,document.addEventListener("mousedown",r),document.addEventListener("keyup",o),(0,g.disableUserSelect)())}function l(){v&&(v=!1,document.removeEventListener("mousedown",r),document.removeEventListener("keyup",o),(0,g.enableUserSelect)())}Object.defineProperty(t,"__esModule",{value:!0}),t.setPen=s,t.enablePen=c,t.disablePen=l;var f=n(1),p=a(f),h=n(41),m=a(h),g=n(6),v=!1,b=void 0,x=void 0,y=void 0,w=void 0},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){!v&&(0,m.findSVGAtPoint)(e.clientX,e.clientY)&&(v=document.createElement("textarea"),v.setAttribute("id","pdf-annotate-point-input"),v.setAttribute("placeholder","Saisir un commentaire"),v.style.border="3px solid "+m.BORDER_COLOR,v.style.borderRadius="3px",v.style.position="absolute",v.style.top=e.clientY+"px",v.style.left=e.clientX+"px",v.style.width="220px",v.style.height="130px",v.addEventListener("blur",u),v.addEventListener("keyup",i),document.body.appendChild(v),v.focus())}function u(){o()}function i(e){27===e.keyCode?d():13===e.keyCode&&o()}function o(){if(v.value.trim().length>0){var e=parseInt(v.style.left,10),t=parseInt(v.style.top,10),n=v.value.trim(),a=(0,m.findSVGAtPoint)(e,t);if(!a)return;var r=a.getBoundingClientRect(),u=(0,m.getMetadata)(a),i=u.documentId,o=u.pageNumber,s=Object.assign({type:"point"},(0,m.scaleDown)(a,{x:e-r.left,y:t-r.top}));f["default"].getStoreAdapter().addAnnotation(i,o,s).then(function(e){f["default"].getStoreAdapter().addComment(i,e.uuid,n),(0,h["default"])(a,e)})}d()}function d(){v.removeEventListener("blur",u),v.removeEventListener("keyup",i),document.body.removeChild(v),v=null}function s(){g||(g=!0,document.addEventListener("mouseup",r))}function c(){g&&(g=!1,document.removeEventListener("mouseup",r))}Object.defineProperty(t,"__esModule",{value:!0}),t.enablePoint=s,t.disablePoint=c;var l=n(1),f=a(l),p=n(41),h=a(p),m=n(6),g=!1,v=void 0},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function u(){try{var e=window.getSelection(),t=e.getRangeAt(0),n=t.getClientRects();if(n.length>0&&n[0].width>0&&n[0].height>0)return n}catch(a){}return null}function i(e){var t=void 0;if("area"===x&&(t=(0,v.findSVGAtPoint)(e.clientX,e.clientY))){var n=t.getBoundingClientRect();w=e.clientY,k=e.clientX,y=document.createElement("div"),y.style.position="absolute",y.style.top=w-n.top+"px",y.style.left=k-n.left+"px",y.style.border="3px solid "+v.BORDER_COLOR,y.style.borderRadius="3px",t.parentNode.appendChild(y),document.addEventListener("mousemove",o),(0,v.disableUserSelect)()}}function o(e){var t=y.parentNode.querySelector("svg.annotationLayer"),n=t.getBoundingClientRect();k+(e.clientX-k)<n.right&&(y.style.width=e.clientX-k+"px"),w+(e.clientY-w)<n.bottom&&(y.style.height=e.clientY-w+"px")}function d(e){var t=void 0;if("area"!==x&&(t=u())){(0,v.findSVGAtPoint)(t[0].left,t[0].top);c(x,[].concat(r(t)).map(function(e){return{top:e.top,left:e.left,width:e.width,height:e.height}}))}else if("area"===x&&y){var n=y.parentNode.querySelector("svg.annotationLayer"),a=n.getBoundingClientRect();c(x,[{top:parseInt(y.style.top,10)+a.top,left:parseInt(y.style.left,10)+a.left,width:parseInt(y.style.width,10),height:parseInt(y.style.height,10)}]),y.parentNode.removeChild(y),y=null,document.removeEventListener("mousemove",o),(0,v.enableUserSelect)()}}function s(e){if(27===e.keyCode){var t=window.getSelection();t.removeAllRanges(),y&&y.parentNode&&(y.parentNode.removeChild(y),y=null,document.removeEventListener("mousemove",o))}}function c(e,t,n){var a=(0,v.findSVGAtPoint)(t[0].left,t[0].top),u=void 0;if(a){var i=a.getBoundingClientRect();if(n||("highlight"===e?n="FFFF00":"strikeout"===e&&(n="FF0000")),u={type:e,color:n,rectangles:[].concat(r(t)).map(function(t){var n=0;return"strikeout"===e&&(n=t.height/2),(0,v.scaleDown)(a,{y:t.top+n-i.top,x:t.left-i.left,width:t.width,height:t.height})}).filter(function(e){return e.width>0&&e.height>0&&e.x>-1&&e.y>-1})},0!==u.rectangles.length){if("area"===e){var o=u.rectangles[0];delete u.rectangles,u.x=o.x,u.y=o.y,u.width=o.width,u.height=o.height}var d=(0,v.getMetadata)(a),s=d.documentId,c=d.pageNumber;h["default"].getStoreAdapter().addAnnotation(s,c,u).then(function(e){(0,g["default"])(a,e)})}}}function l(e){x=e,b||(b=!0,document.addEventListener("mouseup",d),document.addEventListener("mousedown",i),document.addEventListener("keyup",s))}function f(){b&&(b=!1,document.removeEventListener("mouseup",d),document.removeEventListener("mousedown",i),document.removeEventListener("keyup",s))}Object.defineProperty(t,"__esModule",{value:!0}),t.enableRect=l,t.disableRect=f;var p=n(1),h=a(p),m=n(41),g=a(m),v=n(6),b=!1,x=void 0,y=void 0,w=void 0,k=void 0},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){!b&&(0,g.findSVGAtPoint)(e.clientX,e.clientY)&&(b=document.createElement("input"),b.setAttribute("id","pdf-annotate-text-input"),b.setAttribute("placeholder","Enter text"),b.style.border="3px solid "+g.BORDER_COLOR,b.style.borderRadius="3px",b.style.position="absolute",b.style.top=e.clientY+"px",b.style.left=e.clientX+"px",b.style.fontSize=x+"px",b.addEventListener("blur",u),b.addEventListener("keyup",i),document.body.appendChild(b),b.focus())}function u(){o()}function i(e){27===e.keyCode?d():13===e.keyCode&&o()}function o(){if(b.value.trim().length>0){var e=parseInt(b.style.left,10),t=parseInt(b.style.top,10),n=(0,g.findSVGAtPoint)(e,t);if(!n)return;var a=(0,g.getMetadata)(n),r=a.documentId,u=a.pageNumber,i=n.getBoundingClientRect(),o=Object.assign({type:"textbox",size:x,color:y,content:b.value.trim()},(0,g.scaleDown)(n,{x:e-i.left,y:t-i.top,width:b.offsetWidth,height:b.offsetHeight}));p["default"].getStoreAdapter().addAnnotation(r,u,o).then(function(e){(0,m["default"])(n,e)})}d()}function d(){try{b&&(b.removeEventListener("blur",u),b.removeEventListener("keyup",i),document.body.removeChild(b),b=null)}catch(e){console.log("Try/catch is necessary because exist a error in Safari")}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:12,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"000000";x=parseInt(e,10),y=t}function c(){v||(v=!0,document.addEventListener("mouseup",r))}function l(){v&&(v=!1,document.removeEventListener("mouseup",r))}Object.defineProperty(t,"__esModule",{value:!0}),t.setText=s,t.enableText=c,t.disableText=l;var f=n(1),p=a(f),h=n(41),m=a(h),g=n(6),v=!1,b=void 0,x=void 0,y=void 0},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=document.createElement("div");t.innerHTML=m;var n=t.children[0],a=n.querySelector("canvas");return n.setAttribute("id","pageContainer"+e),n.setAttribute("data-page-number",e),a.mozOpaque=!0,a.setAttribute("id","page"+e),n}function u(e,t,n){var a=n.documentId,r=n.pdfDocument,u=n.scale;n.rotate;return Promise.all([r.getPage(e)]).then(function(n){var r=c(n,1),o=r[0],d=document.getElementById("pageContainer"+e),s=d.querySelector(".annotationLayer"),l=d.querySelector(".canvasWrapper canvas"),p=l.getContext("2d",{alpha:!1}),m=o.getViewport(u),g=i(e,m,p);return Promise.all([o.render({canvasContext:p,viewport:m,transform:g}),f["default"].render(s,m,{pageNumber:e,documentId:a,annotations:t[e]})]).then(function(){return o.getTextContent({normalizeWhitespace:!0}).then(function(n){return new Promise(function(a,r){var u=d.querySelector(".textLayer"),i=new pdfjsViewer.DefaultTextLayerFactory,o=i.createTextLayerBuilder(u,e-1,m);o.setTextContent(n),o.render(),setTimeout(function(){try{(0,h["default"])(t.annotations),a()}catch(e){r(e)}})})})}).then(function(){return d.setAttribute("data-loaded","true"),[o,t]})})}function i(e,t,n){var a=document.getElementById("pageContainer"+e),r=a.querySelector(".canvasWrapper canvas"),u=a.querySelector(".annotationLayer"),i=a.querySelector(".canvasWrapper"),c=a.querySelector(".textLayer"),l=d(n),f=l.scaled?[l.sx,0,0,l.sy,0,0]:null,p=o(l.sx),h=o(l.sy);return a.style.visibility="",r.width=s(t.width*l.sx,p[0]),r.height=s(t.height*l.sy,h[0]),r.style.width=s(t.width,p[1])+"px",r.style.height=s(t.height,p[1])+"px",u.setAttribute("width",t.width),u.setAttribute("height",t.height),u.style.width=t.width+"px",u.style.height=t.height+"px",a.style.width=t.width+"px",a.style.height=t.height+"px",i.style.width=t.width+"px",i.style.height=t.height+"px",c.style.width=t.width+"px",c.style.height=t.height+"px",f}function o(e){if(Math.floor(e)===e)return[e,1];var t=1/e,n=8;if(t>n)return[1,n];if(Math.floor(t)===t)return[1,t];for(var a=e>1?t:e,r=0,u=1,i=1,o=1;;){var d=r+i,s=u+o;if(s>n)break;a<=d/s?(i=d,o=s):(r=d,u=s)}return a-r/u<i/o-a?a===e?[r,u]:[u,r]:a===e?[i,o]:[o,i]}function d(e){var t=window.devicePixelRatio||1,n=e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1,a=t/n;return{sx:a,sy:a,scaled:1!==a}}function s(e,t){var n=e%t;return 0===n?e:Math.round(e-n+t)}Object.defineProperty(t,"__esModule",{value:!0});var c=function(){function e(e,t){var n=[],a=!0,r=!1,u=void 0;try{for(var i,o=e[Symbol.iterator]();!(a=(i=o.next()).done)&&(n.push(i.value),!t||n.length!==t);a=!0);}catch(d){r=!0,u=d}finally{try{!a&&o["return"]&&o["return"]()}finally{if(r)throw u}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();t.createPage=r,t.renderPage=u;var l=n(1),f=a(l),p=n(56),h=a(p),m='\n  <div style="visibility: hidden;" class="page" data-loaded="false">\n    <div class="canvasWrapper">\n      <canvas></canvas>\n    </div>\n    <svg class="annotationLayer"></svg>\n    <div class="textLayer"></div>\n  </div>\n'},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e=Array.isArray(e)?e:[],Object.keys(f).forEach(function(t){var n=f[t];e.filter(function(e){return e.type===t}).sort(n).forEach(function(e,t){return(0,s["default"])(e,t+1)})})}function u(e,t){return e.y<t.y?e.x-t.x:1}function i(e,t){return u(e.rectangles[0],t.rectangles[0])}function o(e,t){var n=e.lines[0],a=t.lines[0];return u({x:n[0],y:n[1]},{x:a[0],y:a[1]})}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var d=n(57),s=a(d),c=n(63),l=a(c);(0,l["default"])();var f={highlight:i,strikeout:i,drawing:o,textbox:u,point:u,area:u};e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;switch(e.type){case"highlight":case"strikeout":var n=e.rectangles,a=n[0],r=n[n.length-1];(0,c["default"])((0,i["default"])("Begin "+e.type+" annotation "+t,e.uuid),a.x,a.y,e.page,!0),(0,c["default"])((0,i["default"])("End "+e.type+" annotation "+t,e.uuid+"-end"),r.x+r.width,r.y,e.page,!1);break;case"textbox":case"point":var u="textbox"===e.type?" (content: "+e.content+")":"";(0,d["default"])((0,i["default"])(e.type+" annotation "+t+u,e.uuid),e.x,e.y,e.page);break;case"drawing":case"area":var o="undefined"!=typeof e.x?e.x:e.lines[0][0],s="undefined"!=typeof e.y?e.y:e.lines[0][1];(0,d["default"])((0,i["default"])("Unlabeled drawing",e.uuid),o,s,e.page)}p.includes(e.type)&&(0,f["default"])(e.documentId,e.uuid)}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var u=n(58),i=a(u),o=n(59),d=a(o),s=n(60),c=a(s),l=n(61),f=a(l),p=["highlight","point","area"];e.exports=t["default"]},function(e,t){"use strict";function n(e,t){var n=document.createElement("div"),a=document.createTextNode(e);return n.appendChild(a),n.setAttribute("id","pdf-annotate-screenreader-"+t),n.style.position="absolute",n.style.left="-10000px",n.style.top="auto",n.style.width="1px",n.style.height="1px",n.style.overflow="hidden",n}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n,e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function u(e,t,n,a){if((0,o["default"])(e,t,n,a,!0))return!0;var u=document.querySelector('svg[data-pdf-annotate-page="'+a+'"]'),i=u.getBoundingClientRect(),s=[].concat(r(u.parentNode.querySelectorAll(".textLayer > div")));n=(0,d.scaleUp)(u,{y:n}).y+i.top,t=(0,d.scaleUp)(u,{x:t}).x+i.left;for(var c=0,l=s.length;c<l;c++){var f=s[c],p=f.getBoundingClientRect();if(n<=p.top)return f.parentNode.insertBefore(e,f),!0}var h=u.parentNode.querySelector(".textLayer");if(h){var m=h.getBoundingClientRect();if((0,d.pointIntersectsRect)(t,n,m))return h.appendChild(e),!0}return!1}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=u;var i=n(60),o=a(i),d=n(6);e.exports=t["default"]},function(e,t,n){"use strict";function a(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function r(e,t,n,a,r){var o=2;t=Math.max(t+o*(r?1:-1),0);var d=u(t,n+o,a);if(!d)return!1;t+=o*(r?-1:1);var s=document.querySelector('svg[data-pdf-annotate-page="'+a+'"]'),c=(0,i.scaleDown)(s,{left:d.getBoundingClientRect().left}).left-s.getBoundingClientRect().left,l=d.cloneNode(!0),f=l.innerHTML.split(""),p=[];for(l.style.position="absolute",l.style.top="-10000px",l.style.left="-10000px",document.body.appendChild(l);f.length;){if(">"===f[f.length-1])for(;f.length&&(p.unshift(f.pop()),"<"!==p[0]););l.innerHTML=f.join("");var h=(0,i.scaleDown)(s,{width:l.getBoundingClientRect().width}).width;if(c+h<=t)break;p.unshift(f.pop())}return d.innerHTML=f.join("")+e.outerHTML+p.join(""),l.parentNode.removeChild(l),!0}function u(e,t,n){var r=document.querySelector('svg[data-pdf-annotate-page="'+n+'"]'),u=r.getBoundingClientRect();return t=(0,i.scaleUp)(r,{y:t}).y+u.top,e=(0,i.scaleUp)(r,{x:e}).x+u.left,[].concat(a(r.parentNode.querySelectorAll(".textLayer [data-canvas-width]"))).filter(function(n){return(0,i.pointIntersectsRect)(e,t,n.getBoundingClientRect())})[0]}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var i=n(6);e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,n){var a=void 0;return a=Array.isArray(n)?Promise.resolve(n):i["default"].getStoreAdapter().getComments(e,t),a.then(function(e){var n=document.getElementById("pdf-annotate-screenreader-"+t);if(n){var a=document.createElement("ol");a.setAttribute("id","pdf-annotate-screenreader-comment-list-"+t),a.setAttribute("aria-label","Comments"),n.appendChild(a),e.forEach(d["default"])}})}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var u=n(1),i=a(u),o=n(62),d=a(o);e.exports=t["default"]},function(e,t){"use strict";function n(e){if(e){var t=document.querySelector("#pdf-annotate-screenreader-"+e.annotation+" ol");if(t){var n=document.createElement("li");n.setAttribute("id","pdf-annotate-screenreader-comment-"+e.uuid),n.appendChild(document.createTextNode(""+e.content)),t.appendChild(n)}}}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n,e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){(0,b.addEventListener)("annotation:add",function(e,t,n){u(e,t,n.type)}),(0,b.addEventListener)("annotation:edit",function(e,t,n){u(e,n.page,n.type)}),(0,b.addEventListener)("annotation:delete",i),(0,b.addEventListener)("comment:add",o),(0,b.addEventListener)("comment:update",d),(0,b.addEventListener)("comment:delete",s)}function u(e,t,n){y["default"].getStoreAdapter().getAnnotations(e).then(function(e){var t=[],a=!0,r=!1,u=void 0;try{for(var i,o=Object.keys(e)[Symbol.iterator]();!(a=(i=o.next()).done);a=!0){var d=i.value;for(var s in e[d])s.type==n&&t.push(s)}}catch(c){r=!0,u=c}finally{try{!a&&o["return"]&&o["return"]()}finally{if(r)throw u}}return t}).then(function(t){return t.forEach(function(t){i(e,t.uuid)}),t}).then(p["default"])}function i(e,t){c("pdf-annotate-screenreader-"+t),c("pdf-annotate-screenreader-"+t+"-end")}function o(e,t,n){var a=document.querySelector("pdf-annotate-screenreader-comment-list-"+t),r=void 0;r=a?Promise.resolve(!0):(0,v["default"])(e,t,[]).then(function(){return a=document.querySelector("pdf-annotate-screenreader-comment-list-"+t),!0}),r.then(function(){(0,m["default"])(n)})}function d(e,t,n){alert("updateComment")}function s(e,t){c("pdf-annotate-screenreader-comment-"+t)}function c(e){var t=document.getElementById(e);t&&t.parentNode.removeChild(t)}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var l=n(57),f=(a(l),n(56)),p=a(f),h=n(62),m=a(h),g=n(61),v=a(g),b=n(4),x=n(1),y=a(x);e.exports=t["default"]},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,n){return new Promise(function(a,r){return e.innerHTML="",e.setAttribute("data-pdf-annotate-container",!0),e.setAttribute("data-pdf-annotate-viewport",JSON.stringify(t)),e.removeAttribute("data-pdf-annotate-document"),e.removeAttribute("data-pdf-annotate-page"),n?(e.setAttribute("data-pdf-annotate-document",n.documentId),e.setAttribute("data-pdf-annotate-page",n.pageNumber),Array.isArray(n.annotations)&&0!==n.annotations.length?(n.annotations.forEach(function(n){(0,o["default"])(e,n,t)}),void a(e)):a(e)):a(e)})}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r;var u=n(1),i=(a(u),n(41)),o=a(i),d=n(56);a(d);e.exports=t["default"]},function(e,t){"use strict";function n(e,t,n){function r(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];f=e,p.setAttribute("data-color",e),p.style.background=e,t&&"function"==typeof n&&n(e),i()}function u(){l?i():o()}function i(){document.removeEventListener("keyup",s),c&&c.parentNode&&c.parentNode.removeChild(c),l=!1,p.focus()}function o(){c||(c=document.createElement("div"),c.style.background="#fff",c.style.border="1px solid #ccc",c.style.padding="2px",c.style.position="absolute",c.style.width="122px",e.style.position="relative",a.map(d).forEach(function(e){e.style.margin="2px",e.onclick=function(){r(e.getAttribute("data-color"))},c.appendChild(e)})),document.addEventListener("keyup",s),e.appendChild(c),l=!0}function d(e){var t=document.createElement("a");return t.className="color",t.setAttribute("href","javascript://"),e.name?t.setAttribute("title",e.name):t.setAttribute("title","Choisir une couleur"),t.setAttribute("data-color",e.hex),t.style.background=e.hex,t}function s(e){27===e.keyCode&&i()}var c=void 0,l=!1,f=void 0,p=d({hex:t});p.onclick=u,e.appendChild(p),r(t,!1)}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n;var a=[{hex:"#000000",name:"Black"},{hex:"#EF4437",name:"Red"},{hex:"#E71F63",name:"Pink"},{hex:"#8F3E97",name:"Purple"},{hex:"#65499D",name:"Deep Purple"},{hex:"#4554A4",name:"Indigo"},{hex:"#2083C5",name:"Blue"},{hex:"#35A4DC",name:"Light Blue"},{hex:"#09BCD3",name:"Cyan"},{hex:"#009688",name:"Teal"},{hex:"#43A047",name:"Green"},{hex:"#8BC34A",name:"Light Green"},{hex:"#FDC010",name:"Yellow"},{hex:"#F8971C",name:"Orange"},{hex:"#F0592B",name:"Deep Orange"},{hex:"#F06291",name:"Light Pink"}];e.exports=t["default"]}])});
 //# sourceMappingURL=pdf-annotate.min.js.map
\ No newline at end of file
index d3b384cd0a2cb704a9eea5a6464876ab686aaf11..f4df6301ee1fd8ea37b0ec83e6d73bdf6ac41e61 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///static/pdfannotator/pdf-annotate.min.js","webpack:///webpack/bootstrap c806f426ae1e6db611f9","webpack:///./src/index.js","webpack:///./src/PDFJSAnnotate.js","webpack:///./src/adapter/StoreAdapter.js","webpack:///./src/utils/abstractFunction.js","webpack:///./src/UI/event.js","webpack:///./~/events/events.js","webpack:///./src/UI/utils.js","webpack:///./~/create-stylesheet/index.js","webpack:///./src/adapter/CRFPAStoreAdapter.js","webpack:///./~/axios/index.js","webpack:///./~/axios/lib/axios.js","webpack:///./~/axios/lib/utils.js","webpack:///./~/axios/lib/helpers/bind.js","webpack:///./~/is-buffer/index.js","webpack:///./~/axios/lib/core/Axios.js","webpack:///./~/axios/lib/defaults.js","webpack:///./~/process/browser.js","webpack:///./~/axios/lib/helpers/normalizeHeaderName.js","webpack:///./~/axios/lib/adapters/xhr.js","webpack:///./~/axios/lib/core/settle.js","webpack:///./~/axios/lib/core/createError.js","webpack:///./~/axios/lib/core/enhanceError.js","webpack:///./~/axios/lib/helpers/buildURL.js","webpack:///./~/axios/lib/helpers/parseHeaders.js","webpack:///./~/axios/lib/helpers/isURLSameOrigin.js","webpack:///./~/axios/lib/helpers/btoa.js","webpack:///./~/axios/lib/helpers/cookies.js","webpack:///./~/axios/lib/core/InterceptorManager.js","webpack:///./~/axios/lib/core/dispatchRequest.js","webpack:///./~/axios/lib/core/transformData.js","webpack:///./~/axios/lib/cancel/isCancel.js","webpack:///./~/axios/lib/helpers/isAbsoluteURL.js","webpack:///./~/axios/lib/helpers/combineURLs.js","webpack:///./~/axios/lib/cancel/Cancel.js","webpack:///./~/axios/lib/cancel/CancelToken.js","webpack:///./~/axios/lib/helpers/spread.js","webpack:///./src/utils/uuid.js","webpack:///./src/initFile.js","webpack:///./src/UI/comments.js","webpack:///./~/twitter-text/twitter-text.js","webpack:///./src/UI/edit.js","webpack:///./src/render/appendChild.js","webpack:///./~/object-assign/index.js","webpack:///./src/render/renderLine.js","webpack:///./src/utils/setAttributes.js","webpack:///./src/utils/normalizeColor.js","webpack:///./src/render/renderPath.js","webpack:///./src/render/renderPoint.js","webpack:///./src/render/renderRect.js","webpack:///./src/render/renderText.js","webpack:///./src/render/index.js","webpack:///./src/a11y/renderScreenReaderHints.js","webpack:///./src/a11y/insertScreenReaderHint.js","webpack:///./src/a11y/createScreenReaderOnly.js","webpack:///./src/a11y/insertElementWithinChildren.js","webpack:///./src/a11y/insertElementWithinElement.js","webpack:///./src/a11y/renderScreenReaderComments.js","webpack:///./src/a11y/insertScreenReaderComment.js","webpack:///./src/a11y/initEventHandlers.js","webpack:///./src/UI/index.js","webpack:///./src/UI/pen.js","webpack:///./src/UI/point.js","webpack:///./src/UI/rect.js","webpack:///./src/UI/text.js","webpack:///./src/UI/page.js","webpack:///./src/initColorPicker.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","render","pdfjsLib","getDocument","RENDER_OPTIONS","documentId","then","pdf","pdfDocument","viewer","document","getElementById","innerHTML","NUM_PAGES","_pdfInfo","numPages","i","page","UI","createPage","appendChild","PDFJSAnnotate","getAnnotations","annotations","_loop","num","getPage","renderPage","_ref","_ref2","_slicedToArray","pdfPage","viewport","getViewport","scale","PAGE_HEIGHT","height","$","browser","mozilla","remove","Object","defineProperty","value","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","length","err","Array","isArray","TypeError","_PDFJSAnnotate","_PDFJSAnnotate2","_initFile","_twitterText","_initColorPicker","_initColorPicker2","_comments","documentUrl","enhanceTextSelection","parseFloat","localStorage","getItem","setStoreAdapter","CRFPAStoreAdapter","setActiveToolbarItem","type","button","tooltype","active","querySelector","classList","disableEdit","disablePen","disableText","disablePoint","disableRect","add","setItem","enableEdit","enablePen","enableText","enablePoint","enableRect","readonly","initText","setText","size","color","initPen","Option","setPen","penColor","penSize","modified","selected","removeAttribute","setAttribute","handlePenSizeChange","e","target","addEventListener","handleToolbarClick","nodeName","getAttribute","setScaleRotate","rotate","parseInt","handleScaleChange","renderComments","_StoreAdapter","_StoreAdapter2","_CRFPAStoreAdapter","_CRFPAStoreAdapter2","_render","_render2","_UI","_UI2","StoreAdapter","__storeAdapter","getStoreAdapter","adapter","_getStoreAdapter","apply","arguments","_classCallCheck","instance","Constructor","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","_abstractFunction","_abstractFunction2","_event","_this","definition","keys","forEach","annotationId","pageNumber","annotation","content","commentId","get","__getAnnotations","set","fn","__addAnnotation","fireEvent","__editAnnotation","__deleteAnnotation","success","__addComment","comment","__updateComment","__deleteComment","abstractFunction","name","Error","emitter","emit","on","removeEventListener","removeListener","_events","_events2","_utils","EventEmitter","clickNode","findSVGAtPoint","clientX","clientY","findAnnotationAtPoint","_maxListeners","isFunction","arg","isNumber","isObject","isUndefined","defaultMaxListeners","setMaxListeners","n","isNaN","er","handler","len","args","listeners","error","context","slice","addListener","listener","newListener","warned","console","trace","once","g","fired","list","position","splice","removeAllListeners","ret","listenerCount","evlistener","findSVGContainer","node","parentNode","toUpperCase","x","y","elements","querySelectorAll","l","el","rect","getBoundingClientRect","pointIntersectsRect","svg","getOffsetAnnotationRect","top","bottom","left","right","getAnnotationRect","_getOffset","getOffset","offsetLeft","offsetTop","h","w","LINE_OFFSET","toLowerCase","minX","maxX","minY","maxY","replace","split","s","map","width","_getOffset2","result","includes","scaleUp","_getMetadata","getMetadata","scaleDown","_getMetadata2","getScroll","scrollTop","scrollLeft","disableUserSelect","userSelectStyleSheet","head","enableUserSelect","removeChild","JSON","parse","BORDER_COLOR","_createStylesheet","_createStylesheet2","body","-webkit-user-select","-moz-user-select","-ms-user-select","user-select","processRuleSet","selector","block","processDeclarationBlock","prop","processDeclaration","join","hyphenate","match","blocks","style","createElement","text","createTextNode","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","_axios","_axios2","_uuid","_uuid2","_StoreAdapter3","axios","defaults","xsrfCookieName","xsrfHeaderName","API","baseURL","timeout","withCredentials","headers","Accept","Content-Type","Access-Control-Allow-Origin","getPrototypeOf","params","fileUuid","response","data","log","alert","getAnnotation","addAnnotation","uuid","post","editAnnotation","deleteAnnotation","getComments","addComment","updateComment","createInstance","defaultConfig","Axios","bind","request","utils","extend","instanceConfig","merge","Cancel","CancelToken","isCancel","all","promises","Promise","spread","val","toString","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","trim","str","isStandardBrowserEnv","navigator","product","window","hasOwnProperty","assignValue","a","b","thisArg","isBuffer","isSlowBuffer","readFloatLE","_isBuffer","interceptors","InterceptorManager","dispatchRequest","config","url","method","chain","promise","resolve","interceptor","unshift","fulfilled","rejected","shift","process","setContentTypeIfUnset","getDefaultAdapter","XMLHttpRequest","normalizeHeaderName","DEFAULT_CONTENT_TYPE","transformRequest","stringify","transformResponse","maxContentLength","validateStatus","status","common","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","run","Item","array","noop","nextTick","title","env","argv","version","versions","off","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","normalizedName","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","reject","requestData","requestHeaders","loadEvent","xDomain","NODE_ENV","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","paramsSerializer","readyState","responseURL","indexOf","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","cookies","xsrfValue","read","setRequestHeader","onDownloadProgress","onUploadProgress","upload","cancelToken","cancel","abort","send","enhanceError","message","code","encode","encodeURIComponent","serializedParams","parts","v","toISOString","ignoreDuplicateOf","parsed","line","substr","resolveURL","href","msie","urlParsingNode","protocol","host","search","hash","hostname","port","pathname","charAt","originURL","test","userAgent","location","requestURL","E","input","charCode","String","output","idx","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","RegExp","decodeURIComponent","now","handlers","use","eject","throwIfCancellationRequested","throwIfRequested","transformData","isAbsoluteURL","combineURLs","reason","fns","__CANCEL__","relativeURL","executor","resolvePromise","token","source","callback","replacement","r","Math","random","PATTERN","REGEXP","dataset","filepath","comments","commentList","html","commentForm","hide","insertComment","child","view","addClass","attr","twitter","autoLink","htmlEscape","handleCommentClick","editBtn","handleEditClick","append","textarea","textareaWrapper","saveBtn","saveComment","cancelBtn","cancelCommentEdit","closest","selectComment","preventDefault","find","edit","show","scrollToView","element","offset","is","css","visibility","display","visible_area_start","visible_area_end","innerHeight","hasClass","animate","removeClass","_edit","createEditOverlay","_twitterText2","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","regexSupplant","regex","flags","global","ignoreCase","multiline","newRegex","twttr","txt","regexen","stringSupplant","values","clone","o","k","isValidMatch","string","optional","HTML_ENTITIES","&",">","<","\"","'","character","spaces_group","spaces","invalid_chars_group","invalid_chars","punct","rtl_chars","non_bmp_code_pairs","latinAccentChars","bmpLetterAndMarks","astralLetterAndMarks","bmpNumerals","astralNumerals","hashtagSpecialChars","hashSigns","hashtagAlpha","hashtagAlphaNumeric","endHashtagMatch","codePoint","hashtagBoundary","validHashtag","validMentionPrecedingChars","atSigns","validMentionOrList","validReply","endMentionMatch","validUrlPrecedingChars","invalidUrlWithoutProtocolPrecedingChars","invalidDomainChars","validDomainChars","validSubdomain","validDomainName","validGTLD","validCCTLD","validPunycode","validSpecialCCTLD","validDomain","validAsciiDomain","invalidShortDomain","validSpecialShortDomain","validPortNumber","cyrillicLettersAndMarks","validGeneralUrlPathChars","validUrlBalancedParens","validUrlPathEndingChars","validUrlPath","validUrlQueryChars","validUrlQueryEndingChars","extractUrl","validTcoUrl","urlHasProtocol","urlHasHttps","cashtag","validCashtag","validateUrlUnreserved","validateUrlPctEncoded","validateUrlSubDelims","validateUrlPchar","validateUrlScheme","validateUrlUserinfo","validateUrlDecOctet","validateUrlIpv4","validateUrlIpv6","validateUrlIp","validateUrlSubDomainSegment","validateUrlDomainSegment","validateUrlDomainTld","validateUrlDomain","validateUrlHost","validateUrlUnicodeSubDomainSegment","validateUrlUnicodeDomainSegment","validateUrlUnicodeDomainTld","validateUrlUnicodeDomain","validateUrlUnicodeHost","validateUrlPort","validateUrlUnicodeAuthority","validateUrlAuthority","validateUrlPath","validateUrlQuery","validateUrlFragment","validateUrlUnencoded","DEFAULT_LIST_CLASS","DEFAULT_USERNAME_CLASS","DEFAULT_HASHTAG_CLASS","DEFAULT_CASHTAG_CLASS","OPTIONS_NOT_ATTRIBUTES","urlClass","listClass","usernameClass","hashtagClass","cashtagClass","usernameUrlBase","listUrlBase","hashtagUrlBase","cashtagUrlBase","usernameUrlBlock","listUrlBlock","hashtagUrlBlock","linkUrlBlock","usernameIncludeSymbol","suppressLists","suppressNoFollow","targetBlank","suppressDataScreenName","urlEntities","symbolTag","textWithSymbolTag","urlTarget","invisibleTagAttrs","linkAttributeBlock","linkTextBlock","htmlEscapeNonEntities","BOOLEAN_ATTRIBUTES","disabled","multiple","checked","tagAttrs","attributes","htmlAttrs","linkToText","entity","options","rel","d","linkToTextWithSymbol","symbol","taggedSymbol","taggedText","linkToHashtag","substring","indices","hashtag","attrs","linkToCashtag","linkToMentionAndList","at","user","screenName","slashListname","listSlug","isList","linkToUrl","displayUrl","linkText","urlEntity","display_url","linkTextWithEntity","expanded_url","expandedUrl","displayUrlSansEllipses","displayUrlIndex","beforeDisplayUrl","afterDisplayUrl","precedingEllipsis","followingEllipsis","autoLinkEntities","entities","extractHtmlAttrsFromOptions","beginIndex","sort","nonEntity","autoLinkWithJSON","json","user_mentions","screen_name","hashtags","symbols","modifyIndicesFromUnicodeToUTF16","extractEntitiesWithIndices","extractUrlsWithoutProtocol","autoLinkUsernamesOrLists","extractMentionsOrListsWithIndices","autoLinkHashtags","extractHashtagsWithIndices","autoLinkCashtags","extractCashtagsWithIndices","autoLinkUrlsCustom","extractUrlsWithIndices","removeOverlappingEntities","prev","checkUrlOverlap","extractMentions","screenNamesOnly","screenNamesWithIndices","extractMentionsWithIndices","mentionOrList","mentions","mentionsOrLists","possibleNames","before","atSign","chunk","after","startPosition","endPosition","extractReplies","possibleScreenName","rightContext","extractUrls","urlsOnly","urlsWithIndices","urls","exec","$2","$3","$4","$5","$7","lastIndex","lastMatch","lastUrl","asciiEndPosition","asciiDomain","asciiStartPosition","extractHashtags","hashtagsOnly","hashtagsWithIndices","tags","hashText","extractCashtags","cashtagsOnly","cashtagsWithIndices","dollar","convertUnicodeIndices","modifyIndicesFromUTF16ToUnicode","getUnicodeTextLength","indicesInUTF16","charIndex","codePointIndex","entityIndex","splitTags","secondSplits","firstSplits","allSplits","j","hitHighlight","hits","defaultHighlightTag","index","hit","tag","placed","hitSpot","tagName","chunks","chunkIndex","prevChunksLen","chunkCursor","startInChunk","chunkChars","flatHits","MAX_LENGTH","getTweetLength","short_url_length","short_url_length_https","textLength","isInvalidTweet","hasInvalidCharacters","isValidTweetText","isValidUsername","extracted","VALID_LIST_RE","isValidList","usernameList","isValidHashtag","isValidUrl","unicodeDomains","requireProtocol","urlParts","scheme","authority","query","fragment","_toConsumableArray","arr2","from","destroyEditOverlay","overlay","anchor","styleLeft","OVERLAY_BORDER_SIZE","styleTop","boxSizing","border","borderRadius","background","fontSize","padding","textAlign","textDecoration","handleDocumentClick","handleDocumentKeyup","handleDocumentMousedown","borderColor","boxShadow","isDragging","handleDocumentMousemove","handleDocumentMouseup","nodes","keyCode","dragOffsetX","dragOffsetY","dragStartX","dragStartY","cursor","offsetHeight","offsetWidth","getDelta","propX","propY","calcDelta","deltaX","deltaY","_getDelta","t","modelY","viewY","rectangles","modelX","viewX","_annotation$lines$","lines","originX","originY","_calcDelta","_annotation$lines$i","_appendChild2","handleAnnotationClick","_enabled","_appendChild","getTranslation","rotation","transform","trans","_renderRect2","_renderLine2","_renderPoint2","_renderText2","_renderPath2","_objectAssign","_renderLine","_renderPath","_renderPoint","_renderRect","_renderText","toObject","shouldUseNative","assign","test1","getOwnPropertyNames","test2","fromCharCode","order2","test3","letter","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","to","renderLine","group","createElementNS","_setAttributes2","stroke","_normalizeColor2","strokeWidth","x1","y1","x2","y2","_setAttributes","_normalizeColor","setAttributes","keyCase","UPPER_REGEX","BLACKLIST","normalizeColor","REGEX_HASHLESS_HEX","renderPath","p1","p2","fill","renderPoint","outerSVG","innerSVG","SIZE","viewBox","D","renderRect","fillOpacity","createRect","renderText","_renderScreenReaderHints","renderScreenReaderHints","SORT_TYPES","sortBy","filter","_insertScreenReaderHint2","sortByPoint","sortByRectPoint","sortByLinePoint","lineA","lineB","_insertScreenReaderHint","_initEventHandlers","_initEventHandlers2","highlight","strikeout","drawing","textbox","point","area","insertScreenReaderHint","rects","first","last","_insertElementWithinElement2","_createScreenReaderOnly2","_insertElementWithinChildren2","COMMENT_TYPES","_renderScreenReaderComments2","_createScreenReaderOnly","_insertElementWithinChildren","_insertElementWithinElement","_renderScreenReaderComments","createScreenReaderOnly","overflow","insertElementWithinChildren","insertBefore","textLayer","textRect","insertElementWithinElement","OFFSET_ADJUST","max","textLayerElementFromPoint","temp","cloneNode","tail","pop","outerHTML","renderScreenReaderComments","insertScreenReaderComment","_insertScreenReaderComment","_insertScreenReaderComment2","item","initEventHandlers","reorderAnnotationsByType","removeAnnotation","removeComment","annotationsByPage","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","removeElementById","elementId","_renderScreenReaderHints2","_pen","_point","_rect","_text","_page","_penSize","_penColor","savePoint","handleInputBlur","handleInputKeyup","focus","closeInput","getSelectionRects","selection","getSelection","range","getRangeAt","getClientRects","_type","saveRect","removeAllRanges","boundingRect","_textSize","saveText","_textColor","textSize","textColor","PAGE_TEMPLATE","children","canvas","mozOpaque","renderOptions","canvasContext","getContext","alpha","scalePage","getTextContent","normalizeWhitespace","textContent","textLayerFactory","pdfjsViewer","DefaultTextLayerFactory","textLayerBuilder","createTextLayerBuilder","setTextContent","wrapper","outputScale","getOutputScale","scaled","sx","sy","sfx","approximateFraction","sfy","roundToDivide","floor","xinv","limit","x_","q","ctx","devicePixelRatio","backingStoreRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","pixelRatio","div","round","initColorPicker","onChange","setColor","fireOnChange","currentValue","closePicker","togglePicker","isPickerOpen","openPicker","picker","COLORS","createColorOption","margin","onclick","className","hex"],"mappings":"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","file":"static/pdfannotator/pdf-annotate.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PDFAnnotate\"] = factory();\n\telse\n\t\troot[\"PDFAnnotate\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PDFAnnotate\"] = factory();\n\telse\n\t\troot[\"PDFAnnotate\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _initFile = __webpack_require__(37);\n\t\n\tvar _twitterText = __webpack_require__(39);\n\t\n\tvar _twitterText2 = _interopRequireDefault(_twitterText);\n\t\n\tvar _initColorPicker = __webpack_require__(65);\n\t\n\tvar _initColorPicker2 = _interopRequireDefault(_initColorPicker);\n\t\n\tvar _comments = __webpack_require__(38);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar UI = _PDFJSAnnotate2.default.UI;\n\t\n\t\n\tvar PAGE_HEIGHT = void 0;\n\tvar RENDER_OPTIONS = {\n\t    documentId: _initFile.documentUrl,\n\t    pdfDocument: null,\n\t    enhanceTextSelection: true,\n\t    scale: parseFloat(localStorage.getItem(_initFile.documentId + '/scale'), 10) || 1.33\n\t    // rotate: parseInt(localStorage.getItem(`${documentId}/rotate`), 10) || 0\n\t};\n\t\n\t_PDFJSAnnotate2.default.setStoreAdapter(new _PDFJSAnnotate2.default.CRFPAStoreAdapter());\n\t// pdfjsLib.workerSrc = '/static/pdfannotator/pdf.worker.js';\n\t\n\t// Render stuff\n\t\n\t// let renderedPages = {};\n\t// document.getElementById('content-wrapper').addEventListener('scroll', function (e) {\n\t//   let visiblePageNum = Math.round(e.target.scrollTop / PAGE_HEIGHT) + 1;\n\t//   let visiblePage = document.querySelector(`.page[data-page-number=\"${visiblePageNum}\"][data-loaded=\"false\"]`);\n\t//   if (visiblePage) {\n\t//     // Prevent invoking UI.renderPage on the same page more than once.\n\t// \tif ( !renderedPages[visiblePageNum] ) {\n\t// \t  renderedPages[visiblePageNum] = true;\n\t// \t  setTimeout(function () {\n\t// \t\tUI.renderPage(visiblePageNum, RENDER_OPTIONS);\n\t// \t  });\n\t// \t}\n\t//   }\n\t// });\n\t\n\tvar NUM_PAGES = 0;\n\tfunction render() {\n\t\n\t    pdfjsLib.getDocument(RENDER_OPTIONS.documentId).then(function (pdf) {\n\t        RENDER_OPTIONS.pdfDocument = pdf;\n\t\n\t        var viewer = document.getElementById('viewer');\n\t        viewer.innerHTML = '';\n\t        NUM_PAGES = pdf._pdfInfo.numPages;\n\t        for (var i = 0; i < NUM_PAGES; i++) {\n\t            var page = UI.createPage(i + 1);\n\t            viewer.appendChild(page);\n\t        }\n\t\n\t        _PDFJSAnnotate2.default.getAnnotations(_initFile.documentId).then(function (annotations) {\n\t            var _loop = function _loop(num) {\n\t                pdf.getPage(num).then(function () {\n\t                    UI.renderPage(num, annotations, RENDER_OPTIONS).then(function (_ref) {\n\t                        var _ref2 = _slicedToArray(_ref, 2),\n\t                            pdfPage = _ref2[0],\n\t                            annotations = _ref2[1];\n\t\n\t                        var viewport = pdfPage.getViewport(RENDER_OPTIONS.scale);\n\t                        PAGE_HEIGHT = viewport.height;\n\t                        if ($.browser.mozilla) $('.textLayer>.endOfContent').remove();\n\t                    });\n\t                });\n\t            };\n\t\n\t            for (var num = 1; num <= NUM_PAGES; num++) {\n\t                _loop(num);\n\t            }\n\t        });\n\t    });\n\t}\n\trender();\n\t\n\tvar setActiveToolbarItem = function setActiveToolbarItem(type, button) {\n\t    var tooltype = localStorage.getItem(RENDER_OPTIONS.documentId + '/tooltype') || 'cursor';\n\t    var active = document.querySelector('.toolbar button.active');\n\t    if (active) {\n\t        active.classList.remove('active');\n\t\n\t        switch (tooltype) {\n\t            case 'cursor':\n\t                UI.disableEdit();\n\t                break;\n\t            case 'draw':\n\t                UI.disablePen();\n\t                break;\n\t            case 'text':\n\t                UI.disableText();\n\t                break;\n\t            case 'point':\n\t                UI.disablePoint();\n\t                break;\n\t            case 'area':\n\t            case 'highlight':\n\t            case 'strikeout':\n\t                UI.disableRect();\n\t                break;\n\t        }\n\t    }\n\t\n\t    if (button) {\n\t        button.classList.add('active');\n\t    }\n\t    if (tooltype !== type) {\n\t        localStorage.setItem(RENDER_OPTIONS.documentId + '/tooltype', type);\n\t    }\n\t    tooltype = type;\n\t\n\t    switch (type) {\n\t        case 'cursor':\n\t            UI.enableEdit();\n\t            break;\n\t        case 'draw':\n\t            UI.enablePen();\n\t            break;\n\t        case 'text':\n\t            UI.enableText();\n\t            break;\n\t        case 'point':\n\t            UI.enablePoint();\n\t            break;\n\t        case 'area':\n\t        case 'highlight':\n\t        case 'strikeout':\n\t            UI.enableRect(type);\n\t            break;\n\t    }\n\t};\n\t_PDFJSAnnotate2.default.setActiveToolbarItem = setActiveToolbarItem;\n\t\n\tif (!_initFile.readonly) {\n\t    // Text stuff\n\t    (function () {\n\t        var textSize = void 0;\n\t        var textColor = void 0;\n\t\n\t        function initText() {\n\t            // let size = document.querySelector('.toolbar .text-size');\n\t            // [8, 9, 10, 11, 12, 14, 18, 24, 30, 36, 48, 60, 72, 96].forEach((s) => {\n\t            //     size.appendChild(new Option(s, s));\n\t            // });\n\t            //\n\t            // setText(\n\t            //     localStorage.getItem(`${RENDER_OPTIONS.documentId}/text/size`) || 12,\n\t            //     localStorage.getItem(`${RENDER_OPTIONS.documentId}/text/color`) || '#EF4437'\n\t            // );\n\t            setText(12, '#EF4437');\n\t\n\t            // initColorPicker(document.querySelector('.text-color'), textColor, function (value) {\n\t            //     setText(textSize, value);\n\t            // });\n\t        }\n\t\n\t        function setText(size, color) {\n\t            // let modified = false;\n\t            //\n\t            // if (textSize !== size) {\n\t            //     modified = true;\n\t            //     textSize = size;\n\t            //     localStorage.setItem(`${RENDER_OPTIONS.documentId}/text/size`, textSize);\n\t            //     // document.querySelector('.toolbar .text-size').value = textSize;\n\t            // }\n\t            //\n\t            // if (textColor !== color) {\n\t            //     modified = true;\n\t            //     textColor = color;\n\t            //     localStorage.setItem(`${RENDER_OPTIONS.documentId}/text/color`, textColor);\n\t            //\n\t            //     let selected = document.querySelector('.toolbar .text-color.color-selected');\n\t            //     if (selected) {\n\t            //         selected.classList.remove('color-selected');\n\t            //         selected.removeAttribute('aria-selected');\n\t            //     }\n\t            //\n\t            //     selected = document.querySelector(`.toolbar .text-color[data-color=\"${color}\"]`);\n\t            //     if (selected) {\n\t            //         selected.classList.add('color-selected');\n\t            //         selected.setAttribute('aria-selected', true);\n\t            //     }\n\t            //\n\t            // }\n\t\n\t            // if (modified) {\n\t            UI.setText(size, color);\n\t            // }\n\t        }\n\t\n\t        // function handleTextSizeChange(e) {\n\t        //     setText(e.target.value, textColor);\n\t        // }\n\t\n\t        // document.querySelector('.toolbar .text-size').addEventListener('change', handleTextSizeChange);\n\t\n\t        initText();\n\t    })();\n\t\n\t    // Pen stuff\n\t    (function () {\n\t        var penSize = void 0;\n\t        var penColor = void 0;\n\t\n\t        function initPen() {\n\t            var size = document.querySelector('.toolbar .pen-size');\n\t            for (var i = 0; i < 20; i++) {\n\t                size.appendChild(new Option(i + 1, i + 1));\n\t            }\n\t\n\t            setPen(localStorage.getItem(RENDER_OPTIONS.documentId + '/pen/size') || 1, localStorage.getItem(RENDER_OPTIONS.documentId + '/pen/color') || '#000000');\n\t\n\t            (0, _initColorPicker2.default)(document.querySelector('.pen-color'), penColor, function (value) {\n\t                setPen(penSize, value);\n\t            });\n\t        }\n\t\n\t        function setPen(size, color) {\n\t            var modified = false;\n\t\n\t            if (penSize !== size) {\n\t                modified = true;\n\t                penSize = size;\n\t                localStorage.setItem(RENDER_OPTIONS.documentId + '/pen/size', penSize);\n\t                document.querySelector('.toolbar .pen-size').value = penSize;\n\t            }\n\t\n\t            if (penColor !== color) {\n\t                modified = true;\n\t                penColor = color;\n\t                localStorage.setItem(RENDER_OPTIONS.documentId + '/pen/color', penColor);\n\t\n\t                var selected = document.querySelector('.toolbar .pen-color.color-selected');\n\t                if (selected) {\n\t                    selected.classList.remove('color-selected');\n\t                    selected.removeAttribute('aria-selected');\n\t                }\n\t\n\t                selected = document.querySelector('.toolbar .pen-color[data-color=\"' + color + '\"]');\n\t                if (selected) {\n\t                    selected.classList.add('color-selected');\n\t                    selected.setAttribute('aria-selected', true);\n\t                }\n\t            }\n\t\n\t            if (modified) {\n\t                UI.setPen(penSize, penColor);\n\t            }\n\t        }\n\t\n\t        function handlePenSizeChange(e) {\n\t            setPen(e.target.value, penColor);\n\t        }\n\t\n\t        document.querySelector('.toolbar .pen-size').addEventListener('change', handlePenSizeChange);\n\t\n\t        initPen();\n\t    })();\n\t\n\t    // Toolbar buttons\n\t    (function () {\n\t        var tooltype = localStorage.getItem(RENDER_OPTIONS.documentId + '/tooltype') || 'cursor';\n\t        if (tooltype) {\n\t            setActiveToolbarItem(tooltype, document.querySelector('.toolbar button[data-tooltype=' + tooltype + ']'));\n\t        }\n\t\n\t        function handleToolbarClick(e) {\n\t            if (e.target.nodeName === 'BUTTON') {\n\t                setActiveToolbarItem(e.target.getAttribute('data-tooltype'), e.target);\n\t            }\n\t        }\n\t\n\t        document.querySelector('.toolbar').addEventListener('click', handleToolbarClick);\n\t    })();\n\t}\n\t\n\tif (_initFile.readonly) UI.enableEdit();\n\t\n\t// Scale/rotate\n\t(function () {\n\t    function setScaleRotate(scale, rotate) {\n\t        scale = parseFloat(scale, 10);\n\t        rotate = parseInt(rotate, 10);\n\t\n\t        if (RENDER_OPTIONS.scale !== scale || RENDER_OPTIONS.rotate !== rotate) {\n\t            RENDER_OPTIONS.scale = scale;\n\t            RENDER_OPTIONS.rotate = rotate;\n\t\n\t            localStorage.setItem(RENDER_OPTIONS.documentId + '/scale', RENDER_OPTIONS.scale);\n\t            localStorage.setItem(RENDER_OPTIONS.documentId + '/rotate', RENDER_OPTIONS.rotate % 360);\n\t\n\t            render();\n\t        }\n\t    }\n\t\n\t    function handleScaleChange(e) {\n\t        setScaleRotate(e.target.value, RENDER_OPTIONS.rotate);\n\t    }\n\t\n\t    function handleRotateCWClick() {\n\t        setScaleRotate(RENDER_OPTIONS.scale, RENDER_OPTIONS.rotate + 90);\n\t    }\n\t\n\t    function handleRotateCCWClick() {\n\t        setScaleRotate(RENDER_OPTIONS.scale, RENDER_OPTIONS.rotate - 90);\n\t    }\n\t\n\t    document.querySelector('.toolbar select.scale').value = RENDER_OPTIONS.scale;\n\t    document.querySelector('.toolbar select.scale').addEventListener('change', handleScaleChange);\n\t    // document.querySelector('.toolbar .rotate-ccw').addEventListener('click', handleRotateCCWClick);\n\t    // document.querySelector('.toolbar .rotate-cw').addEventListener('click', handleRotateCWClick);\n\t})();\n\t\n\t(0, _comments.renderComments)(_initFile.documentId);\n\t\n\texports.default = _PDFJSAnnotate2.default;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _StoreAdapter = __webpack_require__(2);\n\t\n\tvar _StoreAdapter2 = _interopRequireDefault(_StoreAdapter);\n\t\n\tvar _CRFPAStoreAdapter = __webpack_require__(8);\n\t\n\tvar _CRFPAStoreAdapter2 = _interopRequireDefault(_CRFPAStoreAdapter);\n\t\n\tvar _render = __webpack_require__(50);\n\t\n\tvar _render2 = _interopRequireDefault(_render);\n\t\n\tvar _UI = __webpack_require__(59);\n\t\n\tvar _UI2 = _interopRequireDefault(_UI);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = {\n\t  /**\n\t   * Abstract class that needs to be defined so PDFJSAnnotate\n\t   * knows how to communicate with your server.\n\t   */\n\t  StoreAdapter: _StoreAdapter2.default,\n\t\n\t  /**\n\t   * Implementation of StoreAdapter that stores annotation data to localStorage.\n\t   */\n\t  CRFPAStoreAdapter: _CRFPAStoreAdapter2.default,\n\t\n\t  /**\n\t   * Abstract instance of StoreAdapter\n\t   */\n\t  __storeAdapter: new _StoreAdapter2.default(),\n\t\n\t  /**\n\t   * Getter for the underlying StoreAdapter property\n\t   *\n\t   * @return {StoreAdapter}\n\t   */\n\t  getStoreAdapter: function getStoreAdapter() {\n\t    return this.__storeAdapter;\n\t  },\n\t\n\t\n\t  /**\n\t   * Setter for the underlying StoreAdapter property\n\t   *\n\t   * @param {StoreAdapter} adapter The StoreAdapter implementation to be used.\n\t   */\n\t  setStoreAdapter: function setStoreAdapter(adapter) {\n\t    // TODO this throws an error when bundled\n\t    // if (!(adapter instanceof StoreAdapter)) {\n\t    //   throw new Error('adapter must be an instance of StoreAdapter');\n\t    // }\n\t\n\t    this.__storeAdapter = adapter;\n\t  },\n\t\n\t\n\t  /**\n\t   * UI is a helper for instrumenting UI interactions for creating,\n\t   * editing, and deleting annotations in the browser.\n\t   */\n\t  UI: _UI2.default,\n\t\n\t  /**\n\t   * Render the annotations for a page in the PDF Document\n\t   *\n\t   * @param {SVGElement} svg The SVG element that annotations should be rendered to\n\t   * @param {PageViewport} viewport The PDFPage.getViewport data\n\t   * @param {Object} data The StoreAdapter.getAnnotations data\n\t   * @return {Promise}\n\t   */\n\t  render: _render2.default,\n\t\n\t  /**\n\t   * Convenience method for getting annotation data\n\t   *\n\t   * @alias StoreAdapter.getAnnotations\n\t   * @param {String} documentId The ID of the document\n\t   * @return {Promise}\n\t   */\n\t  getAnnotations: function getAnnotations(documentId) {\n\t    var _getStoreAdapter;\n\t\n\t    return (_getStoreAdapter = this.getStoreAdapter()).getAnnotations.apply(_getStoreAdapter, arguments);\n\t  }\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _abstractFunction = __webpack_require__(3);\n\t\n\tvar _abstractFunction2 = _interopRequireDefault(_abstractFunction);\n\t\n\tvar _event = __webpack_require__(4);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\t// Adapter should never be invoked publicly\n\tvar StoreAdapter = function () {\n\t  /**\n\t   * Create a new StoreAdapter instance\n\t   *\n\t   * @param {Object} [definition] The definition to use for overriding abstract methods\n\t   */\n\t  function StoreAdapter() {\n\t    var _this = this;\n\t\n\t    var definition = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\t\n\t    _classCallCheck(this, StoreAdapter);\n\t\n\t    // Copy each function from definition if it is a function we know about\n\t    Object.keys(definition).forEach(function (key) {\n\t      if (typeof definition[key] === 'function' && typeof _this[key] === 'function') {\n\t        _this[key] = definition[key];\n\t      }\n\t    });\n\t  }\n\t\n\t  /**\n\t   * Get all the annotations for a given document and page number.\n\t   *\n\t   * @param {String} documentId The ID for the document the annotations belong to\n\t   * @param {Number} pageNumber The number of the page the annotations belong to\n\t   * @return {Promise}\n\t   */\n\t\n\t\n\t  _createClass(StoreAdapter, [{\n\t    key: '__getAnnotations',\n\t    value: function __getAnnotations(documentId) {\n\t      (0, _abstractFunction2.default)('getAnnotations');\n\t    }\n\t  }, {\n\t    key: 'getAnnotation',\n\t\n\t\n\t    /**\n\t     * Get the definition for a specific annotation.\n\t     *\n\t     * @param {String} documentId The ID for the document the annotation belongs to\n\t     * @param {String} annotationId The ID for the annotation\n\t     * @return {Promise}\n\t     */\n\t    value: function getAnnotation(documentId, annotationId) {\n\t      (0, _abstractFunction2.default)('getAnnotation');\n\t    }\n\t\n\t    /**\n\t     * Add an annotation\n\t     *\n\t     * @param {String} documentId The ID for the document to add the annotation to\n\t     * @param {String} pageNumber The page number to add the annotation to\n\t     * @param {Object} annotation The definition for the new annotation\n\t     * @return {Promise}\n\t     */\n\t\n\t  }, {\n\t    key: '__addAnnotation',\n\t    value: function __addAnnotation(documentId, pageNumber, annotation) {\n\t      (0, _abstractFunction2.default)('addAnnotation');\n\t    }\n\t  }, {\n\t    key: '__editAnnotation',\n\t\n\t\n\t    /**\n\t     * Edit an annotation\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} pageNumber the page number of the annotation\n\t     * @param {Object} annotation The definition of the modified annotation\n\t     * @return {Promise}\n\t     */\n\t    value: function __editAnnotation(documentId, pageNumber, annotation) {\n\t      (0, _abstractFunction2.default)('editAnnotation');\n\t    }\n\t  }, {\n\t    key: '__deleteAnnotation',\n\t\n\t\n\t    /**\n\t     * Delete an annotation\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} annotationId The ID for the annotation\n\t     * @return {Promise}\n\t     */\n\t    value: function __deleteAnnotation(documentId, annotationId) {\n\t      (0, _abstractFunction2.default)('deleteAnnotation');\n\t    }\n\t  }, {\n\t    key: 'getComments',\n\t\n\t\n\t    /**\n\t     * Get all the comments for an annotation\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} annotationId The ID for the annotation\n\t     * @return {Promise}\n\t     */\n\t    value: function getComments(documentId, annotationId) {\n\t      (0, _abstractFunction2.default)('getComments');\n\t    }\n\t\n\t    /**\n\t     * Add a new comment\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} annotationId The ID for the annotation\n\t     * @param {Object} content The definition of the comment\n\t     * @return {Promise}\n\t     */\n\t\n\t  }, {\n\t    key: '__addComment',\n\t    value: function __addComment(documentId, annotationId, content) {\n\t      (0, _abstractFunction2.default)('addComment');\n\t    }\n\t  }, {\n\t    key: '__updateComment',\n\t\n\t\n\t    /**\n\t     * Update a new comment\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} annotationId The ID for the annotation\n\t     * @param {Object} content The definition of the comment\n\t     * @return {Promise}\n\t     */\n\t    value: function __updateComment(documentId, annotationId, content) {\n\t      (0, _abstractFunction2.default)('addComment');\n\t    }\n\t  }, {\n\t    key: '__deleteComment',\n\t\n\t\n\t    /**\n\t     * Delete a comment\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} commentId The ID for the comment\n\t     * @return {Promise}\n\t     */\n\t    value: function __deleteComment(documentId, commentId) {\n\t      (0, _abstractFunction2.default)('deleteComment');\n\t    }\n\t  }, {\n\t    key: 'getAnnotations',\n\t    get: function get() {\n\t      return this.__getAnnotations;\n\t    },\n\t    set: function set(fn) {\n\t      this.__getAnnotations = function getAnnotations(documentId) {\n\t        return fn.apply(undefined, arguments).then(function (annotations) {\n\t          // TODO may be best to have this happen on the server\n\t          // if (annotations) {\n\t          //   annotations.forEach((a) => {\n\t          //     a.documentId = documentId;\n\t          //   });\n\t          // }\n\t          return annotations;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'addAnnotation',\n\t    get: function get() {\n\t      return this.__addAnnotation;\n\t    },\n\t    set: function set(fn) {\n\t      this.__addAnnotation = function addAnnotation(documentId, pageNumber, annotation) {\n\t        return fn.apply(undefined, arguments).then(function (annotation) {\n\t          (0, _event.fireEvent)('annotation:add', documentId, pageNumber, annotation);\n\t          return annotation;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'editAnnotation',\n\t    get: function get() {\n\t      return this.__editAnnotation;\n\t    },\n\t    set: function set(fn) {\n\t      this.__editAnnotation = function editAnnotation(documentId, annotationId, annotation) {\n\t        return fn.apply(undefined, arguments).then(function (annotation) {\n\t          (0, _event.fireEvent)('annotation:edit', documentId, annotationId, annotation);\n\t          return annotation;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'deleteAnnotation',\n\t    get: function get() {\n\t      return this.__deleteAnnotation;\n\t    },\n\t    set: function set(fn) {\n\t      this.__deleteAnnotation = function deleteAnnotation(documentId, annotationId) {\n\t        return fn.apply(undefined, arguments).then(function (success) {\n\t          if (success) {\n\t            (0, _event.fireEvent)('annotation:delete', documentId, annotationId);\n\t          }\n\t          return success;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'addComment',\n\t    get: function get() {\n\t      return this.__addComment;\n\t    },\n\t    set: function set(fn) {\n\t      this.__addComment = function addComment(documentId, annotationId, content) {\n\t        return fn.apply(undefined, arguments).then(function (comment) {\n\t          (0, _event.fireEvent)('comment:add', documentId, annotationId, comment);\n\t          return comment;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'updateComment',\n\t    get: function get() {\n\t      return this.__updateComment;\n\t    },\n\t    set: function set(fn) {\n\t      this.__updateComment = function updateComment(documentId, annotationId, content) {\n\t        return fn.apply(undefined, arguments).then(function (comment) {\n\t          (0, _event.fireEvent)('comment:updated', documentId, annotationId, comment);\n\t          return comment;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'deleteComment',\n\t    get: function get() {\n\t      return this.__deleteComment;\n\t    },\n\t    set: function set(fn) {\n\t      this.__deleteComment = function deleteComment(documentId, commentId) {\n\t        return fn.apply(undefined, arguments).then(function (success) {\n\t          if (success) {\n\t            (0, _event.fireEvent)('comment:delete', documentId, commentId);\n\t          }\n\t          return success;\n\t        });\n\t      };\n\t    }\n\t  }]);\n\t\n\t  return StoreAdapter;\n\t}();\n\t\n\texports.default = StoreAdapter;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = abstractFunction;\n\t/**\n\t * Throw an Error for an abstract function that hasn't been implemented.\n\t *\n\t * @param {String} name The name of the abstract function\n\t */\n\tfunction abstractFunction(name) {\n\t  throw new Error(name + ' is not implemented');\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.fireEvent = fireEvent;\n\texports.addEventListener = addEventListener;\n\texports.removeEventListener = removeEventListener;\n\t\n\tvar _events = __webpack_require__(5);\n\t\n\tvar _events2 = _interopRequireDefault(_events);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar emitter = new _events2.default();\n\t\n\tvar clickNode = void 0;\n\t\n\t/**\n\t * Handle document.click event\n\t *\n\t * @param {Event} e The DOM event to be handled\n\t */\n\t// document.addEventListener('mousedown', function handleDocumentClick(e) {\n\t\n\tdocument.addEventListener('click', function handleDocumentClick(e) {\n\t  if (!(0, _utils.findSVGAtPoint)(e.clientX, e.clientY)) {\n\t    return;\n\t  }\n\t\n\t  var target = (0, _utils.findAnnotationAtPoint)(e.clientX, e.clientY);\n\t\n\t  // Emit annotation:blur if clickNode is no longer clicked\n\t  if (clickNode && clickNode !== target) {\n\t    emitter.emit('annotation:blur', clickNode);\n\t  }\n\t\n\t  // Emit annotation:click if target was clicked\n\t  if (target) {\n\t    emitter.emit('annotation:click', target);\n\t  }\n\t\n\t  clickNode = target;\n\t});\n\t\n\t// let mouseOverNode;\n\t// document.addEventListener('mousemove', function handleDocumentMousemove(e) {\n\t//   let target = findAnnotationAtPoint(e.clientX, e.clientY);\n\t//\n\t//   // Emit annotation:mouseout if target was mouseout'd\n\t//   if (mouseOverNode && !target) {\n\t//     emitter.emit('annotation:mouseout', mouseOverNode);\n\t//   }\n\t//\n\t//   // Emit annotation:mouseover if target was mouseover'd\n\t//   if (target && mouseOverNode !== target) {\n\t//     emitter.emit('annotation:mouseover', target);\n\t//   }\n\t//\n\t//   mouseOverNode = target;\n\t// });\n\t\n\tfunction fireEvent() {\n\t  emitter.emit.apply(emitter, arguments);\n\t};\n\tfunction addEventListener() {\n\t  emitter.on.apply(emitter, arguments);\n\t};\n\tfunction removeEventListener() {\n\t  emitter.removeListener.apply(emitter, arguments);\n\t};\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t// Copyright Joyent, Inc. and other Node contributors.\n\t//\n\t// Permission is hereby granted, free of charge, to any person obtaining a\n\t// copy of this software and associated documentation files (the\n\t// \"Software\"), to deal in the Software without restriction, including\n\t// without limitation the rights to use, copy, modify, merge, publish,\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\n\t// persons to whom the Software is furnished to do so, subject to the\n\t// following conditions:\n\t//\n\t// The above copyright notice and this permission notice shall be included\n\t// in all copies or substantial portions of the Software.\n\t//\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\t\n\tfunction EventEmitter() {\n\t  this._events = this._events || {};\n\t  this._maxListeners = this._maxListeners || undefined;\n\t}\n\tmodule.exports = EventEmitter;\n\t\n\t// Backwards-compat with node 0.10.x\n\tEventEmitter.EventEmitter = EventEmitter;\n\t\n\tEventEmitter.prototype._events = undefined;\n\tEventEmitter.prototype._maxListeners = undefined;\n\t\n\t// By default EventEmitters will print a warning if more than 10 listeners are\n\t// added to it. This is a useful default which helps finding memory leaks.\n\tEventEmitter.defaultMaxListeners = 10;\n\t\n\t// Obviously not all Emitters should be limited to 10. This function allows\n\t// that to be increased. Set to zero for unlimited.\n\tEventEmitter.prototype.setMaxListeners = function(n) {\n\t  if (!isNumber(n) || n < 0 || isNaN(n))\n\t    throw TypeError('n must be a positive number');\n\t  this._maxListeners = n;\n\t  return this;\n\t};\n\t\n\tEventEmitter.prototype.emit = function(type) {\n\t  var er, handler, len, args, i, listeners;\n\t\n\t  if (!this._events)\n\t    this._events = {};\n\t\n\t  // If there is no 'error' event listener then throw.\n\t  if (type === 'error') {\n\t    if (!this._events.error ||\n\t        (isObject(this._events.error) && !this._events.error.length)) {\n\t      er = arguments[1];\n\t      if (er instanceof Error) {\n\t        throw er; // Unhandled 'error' event\n\t      } else {\n\t        // At least give some kind of context to the user\n\t        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n\t        err.context = er;\n\t        throw err;\n\t      }\n\t    }\n\t  }\n\t\n\t  handler = this._events[type];\n\t\n\t  if (isUndefined(handler))\n\t    return false;\n\t\n\t  if (isFunction(handler)) {\n\t    switch (arguments.length) {\n\t      // fast cases\n\t      case 1:\n\t        handler.call(this);\n\t        break;\n\t      case 2:\n\t        handler.call(this, arguments[1]);\n\t        break;\n\t      case 3:\n\t        handler.call(this, arguments[1], arguments[2]);\n\t        break;\n\t      // slower\n\t      default:\n\t        args = Array.prototype.slice.call(arguments, 1);\n\t        handler.apply(this, args);\n\t    }\n\t  } else if (isObject(handler)) {\n\t    args = Array.prototype.slice.call(arguments, 1);\n\t    listeners = handler.slice();\n\t    len = listeners.length;\n\t    for (i = 0; i < len; i++)\n\t      listeners[i].apply(this, args);\n\t  }\n\t\n\t  return true;\n\t};\n\t\n\tEventEmitter.prototype.addListener = function(type, listener) {\n\t  var m;\n\t\n\t  if (!isFunction(listener))\n\t    throw TypeError('listener must be a function');\n\t\n\t  if (!this._events)\n\t    this._events = {};\n\t\n\t  // To avoid recursion in the case that type === \"newListener\"! Before\n\t  // adding it to the listeners, first emit \"newListener\".\n\t  if (this._events.newListener)\n\t    this.emit('newListener', type,\n\t              isFunction(listener.listener) ?\n\t              listener.listener : listener);\n\t\n\t  if (!this._events[type])\n\t    // Optimize the case of one listener. Don't need the extra array object.\n\t    this._events[type] = listener;\n\t  else if (isObject(this._events[type]))\n\t    // If we've already got an array, just append.\n\t    this._events[type].push(listener);\n\t  else\n\t    // Adding the second element, need to change to array.\n\t    this._events[type] = [this._events[type], listener];\n\t\n\t  // Check for listener leak\n\t  if (isObject(this._events[type]) && !this._events[type].warned) {\n\t    if (!isUndefined(this._maxListeners)) {\n\t      m = this._maxListeners;\n\t    } else {\n\t      m = EventEmitter.defaultMaxListeners;\n\t    }\n\t\n\t    if (m && m > 0 && this._events[type].length > m) {\n\t      this._events[type].warned = true;\n\t      console.error('(node) warning: possible EventEmitter memory ' +\n\t                    'leak detected. %d listeners added. ' +\n\t                    'Use emitter.setMaxListeners() to increase limit.',\n\t                    this._events[type].length);\n\t      if (typeof console.trace === 'function') {\n\t        // not supported in IE 10\n\t        console.trace();\n\t      }\n\t    }\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\tEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\t\n\tEventEmitter.prototype.once = function(type, listener) {\n\t  if (!isFunction(listener))\n\t    throw TypeError('listener must be a function');\n\t\n\t  var fired = false;\n\t\n\t  function g() {\n\t    this.removeListener(type, g);\n\t\n\t    if (!fired) {\n\t      fired = true;\n\t      listener.apply(this, arguments);\n\t    }\n\t  }\n\t\n\t  g.listener = listener;\n\t  this.on(type, g);\n\t\n\t  return this;\n\t};\n\t\n\t// emits a 'removeListener' event iff the listener was removed\n\tEventEmitter.prototype.removeListener = function(type, listener) {\n\t  var list, position, length, i;\n\t\n\t  if (!isFunction(listener))\n\t    throw TypeError('listener must be a function');\n\t\n\t  if (!this._events || !this._events[type])\n\t    return this;\n\t\n\t  list = this._events[type];\n\t  length = list.length;\n\t  position = -1;\n\t\n\t  if (list === listener ||\n\t      (isFunction(list.listener) && list.listener === listener)) {\n\t    delete this._events[type];\n\t    if (this._events.removeListener)\n\t      this.emit('removeListener', type, listener);\n\t\n\t  } else if (isObject(list)) {\n\t    for (i = length; i-- > 0;) {\n\t      if (list[i] === listener ||\n\t          (list[i].listener && list[i].listener === listener)) {\n\t        position = i;\n\t        break;\n\t      }\n\t    }\n\t\n\t    if (position < 0)\n\t      return this;\n\t\n\t    if (list.length === 1) {\n\t      list.length = 0;\n\t      delete this._events[type];\n\t    } else {\n\t      list.splice(position, 1);\n\t    }\n\t\n\t    if (this._events.removeListener)\n\t      this.emit('removeListener', type, listener);\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\tEventEmitter.prototype.removeAllListeners = function(type) {\n\t  var key, listeners;\n\t\n\t  if (!this._events)\n\t    return this;\n\t\n\t  // not listening for removeListener, no need to emit\n\t  if (!this._events.removeListener) {\n\t    if (arguments.length === 0)\n\t      this._events = {};\n\t    else if (this._events[type])\n\t      delete this._events[type];\n\t    return this;\n\t  }\n\t\n\t  // emit removeListener for all listeners on all events\n\t  if (arguments.length === 0) {\n\t    for (key in this._events) {\n\t      if (key === 'removeListener') continue;\n\t      this.removeAllListeners(key);\n\t    }\n\t    this.removeAllListeners('removeListener');\n\t    this._events = {};\n\t    return this;\n\t  }\n\t\n\t  listeners = this._events[type];\n\t\n\t  if (isFunction(listeners)) {\n\t    this.removeListener(type, listeners);\n\t  } else if (listeners) {\n\t    // LIFO order\n\t    while (listeners.length)\n\t      this.removeListener(type, listeners[listeners.length - 1]);\n\t  }\n\t  delete this._events[type];\n\t\n\t  return this;\n\t};\n\t\n\tEventEmitter.prototype.listeners = function(type) {\n\t  var ret;\n\t  if (!this._events || !this._events[type])\n\t    ret = [];\n\t  else if (isFunction(this._events[type]))\n\t    ret = [this._events[type]];\n\t  else\n\t    ret = this._events[type].slice();\n\t  return ret;\n\t};\n\t\n\tEventEmitter.prototype.listenerCount = function(type) {\n\t  if (this._events) {\n\t    var evlistener = this._events[type];\n\t\n\t    if (isFunction(evlistener))\n\t      return 1;\n\t    else if (evlistener)\n\t      return evlistener.length;\n\t  }\n\t  return 0;\n\t};\n\t\n\tEventEmitter.listenerCount = function(emitter, type) {\n\t  return emitter.listenerCount(type);\n\t};\n\t\n\tfunction isFunction(arg) {\n\t  return typeof arg === 'function';\n\t}\n\t\n\tfunction isNumber(arg) {\n\t  return typeof arg === 'number';\n\t}\n\t\n\tfunction isObject(arg) {\n\t  return typeof arg === 'object' && arg !== null;\n\t}\n\t\n\tfunction isUndefined(arg) {\n\t  return arg === void 0;\n\t}\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.BORDER_COLOR = undefined;\n\texports.findSVGContainer = findSVGContainer;\n\texports.findSVGAtPoint = findSVGAtPoint;\n\texports.findAnnotationAtPoint = findAnnotationAtPoint;\n\texports.pointIntersectsRect = pointIntersectsRect;\n\texports.getOffsetAnnotationRect = getOffsetAnnotationRect;\n\texports.getAnnotationRect = getAnnotationRect;\n\texports.scaleUp = scaleUp;\n\texports.scaleDown = scaleDown;\n\texports.getScroll = getScroll;\n\texports.getOffset = getOffset;\n\texports.disableUserSelect = disableUserSelect;\n\texports.enableUserSelect = enableUserSelect;\n\texports.getMetadata = getMetadata;\n\t\n\tvar _createStylesheet = __webpack_require__(7);\n\t\n\tvar _createStylesheet2 = _interopRequireDefault(_createStylesheet);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar BORDER_COLOR = exports.BORDER_COLOR = '#00BFFF';\n\t\n\tvar userSelectStyleSheet = (0, _createStylesheet2.default)({\n\t  body: {\n\t    '-webkit-user-select': 'none',\n\t    '-moz-user-select': 'none',\n\t    '-ms-user-select': 'none',\n\t    'user-select': 'none'\n\t  }\n\t});\n\tuserSelectStyleSheet.setAttribute('data-pdf-annotate-user-select', 'true');\n\t\n\t/**\n\t * Find the SVGElement that contains all the annotations for a page\n\t *\n\t * @param {Element} node An annotation within that container\n\t * @return {SVGElement} The container SVG or null if it can't be found\n\t */\n\tfunction findSVGContainer(node) {\n\t  var parentNode = node;\n\t\n\t  while ((parentNode = parentNode.parentNode) && parentNode !== document) {\n\t    if (parentNode.nodeName.toUpperCase() === 'SVG' && parentNode.getAttribute('data-pdf-annotate-container') === 'true') {\n\t      return parentNode;\n\t    }\n\t  }\n\t\n\t  return null;\n\t}\n\t\n\t/**\n\t * Find an SVGElement container at a given point\n\t *\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @return {SVGElement} The container SVG or null if one can't be found\n\t */\n\tfunction findSVGAtPoint(x, y) {\n\t  var elements = document.querySelectorAll('svg[data-pdf-annotate-container=\"true\"]');\n\t  for (var i = 0, l = elements.length; i < l; i++) {\n\t    var el = elements[i];\n\t    var rect = el.getBoundingClientRect();\n\t\n\t    if (pointIntersectsRect(x, y, rect)) {\n\t      return el;\n\t    }\n\t  }\n\t\n\t  return null;\n\t}\n\t\n\t/**\n\t * Find an Element that represents an annotation at a given point\n\t *\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @return {Element} The annotation element or null if one can't be found\n\t */\n\tfunction findAnnotationAtPoint(x, y) {\n\t  var svg = findSVGAtPoint(x, y);\n\t  if (!svg) {\n\t    return;\n\t  }\n\t  var elements = svg.querySelectorAll('[data-pdf-annotate-type]');\n\t\n\t  // Find a target element within SVG\n\t  for (var i = 0, l = elements.length; i < l; i++) {\n\t    var el = elements[i];\n\t    if (pointIntersectsRect(x, y, getOffsetAnnotationRect(el))) {\n\t      return el;\n\t    }\n\t  }\n\t\n\t  return null;\n\t}\n\t\n\t/**\n\t * Determine if a point intersects a rect\n\t *\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @param {Object} rect The points of a rect (likely from getBoundingClientRect)\n\t * @return {Boolean} True if a collision occurs, otherwise false\n\t */\n\tfunction pointIntersectsRect(x, y, rect) {\n\t  return y >= rect.top && y <= rect.bottom && x >= rect.left && x <= rect.right;\n\t}\n\t\n\t/**\n\t * Get the rect of an annotation element accounting for offset.\n\t *\n\t * @param {Element} el The element to get the rect of\n\t * @return {Object} The dimensions of the element\n\t */\n\tfunction getOffsetAnnotationRect(el) {\n\t  var rect = getAnnotationRect(el);\n\t\n\t  var _getOffset = getOffset(el),\n\t      offsetLeft = _getOffset.offsetLeft,\n\t      offsetTop = _getOffset.offsetTop;\n\t\n\t  return {\n\t    top: rect.top + offsetTop,\n\t    left: rect.left + offsetLeft,\n\t    right: rect.right + offsetLeft,\n\t    bottom: rect.bottom + offsetTop\n\t  };\n\t}\n\t\n\t/**\n\t * Get the rect of an annotation element.\n\t *\n\t * @param {Element} el The element to get the rect of\n\t * @return {Object} The dimensions of the element\n\t */\n\tfunction getAnnotationRect(el) {\n\t  var h = 0,\n\t      w = 0,\n\t      x = 0,\n\t      y = 0;\n\t  var rect = el.getBoundingClientRect();\n\t  // TODO this should be calculated somehow\n\t  var LINE_OFFSET = 16;\n\t  // debugger;\n\t  switch (el.nodeName.toLowerCase()) {\n\t    case 'path':\n\t      var minX = void 0,\n\t          maxX = void 0,\n\t          minY = void 0,\n\t          maxY = void 0;\n\t\n\t      el.getAttribute('d').replace(/Z/, '').split('M').splice(1).forEach(function (p) {\n\t        var s = p.split(' ').map(function (i) {\n\t          return parseInt(i, 10);\n\t        });\n\t\n\t        if (typeof minX === 'undefined' || s[0] < minX) {\n\t          minX = s[0];\n\t        }\n\t        if (typeof maxX === 'undefined' || s[2] > maxX) {\n\t          maxX = s[2];\n\t        }\n\t        if (typeof minY === 'undefined' || s[1] < minY) {\n\t          minY = s[1];\n\t        }\n\t        if (typeof maxY === 'undefined' || s[3] > maxY) {\n\t          maxY = s[3];\n\t        }\n\t      });\n\t\n\t      h = maxY - minY;\n\t      w = maxX - minX;\n\t      x = minX;\n\t      y = minY;\n\t      break;\n\t\n\t    case 'line':\n\t      h = parseInt(el.getAttribute('y2'), 10) - parseInt(el.getAttribute('y1'), 10);\n\t      w = parseInt(el.getAttribute('x2'), 10) - parseInt(el.getAttribute('x1'), 10);\n\t      x = parseInt(el.getAttribute('x1'), 10);\n\t      y = parseInt(el.getAttribute('y1'), 10);\n\t\n\t      if (h === 0) {\n\t        h += LINE_OFFSET;\n\t        y -= LINE_OFFSET / 2;\n\t      }\n\t      break;\n\t\n\t    case 'text':\n\t      h = rect.height;\n\t      w = rect.width;\n\t      x = parseInt(el.getAttribute('x'), 10);\n\t      y = parseInt(el.getAttribute('y'), 10) - h;\n\t      break;\n\t\n\t    case 'g':\n\t      var _getOffset2 = getOffset(el),\n\t          offsetLeft = _getOffset2.offsetLeft,\n\t          offsetTop = _getOffset2.offsetTop;\n\t\n\t      h = rect.height;\n\t      w = rect.width;\n\t      x = rect.left - offsetLeft;\n\t      y = rect.top - offsetTop;\n\t\n\t      if (el.getAttribute('data-pdf-annotate-type') === 'strikeout') {\n\t        h += LINE_OFFSET;\n\t        y -= LINE_OFFSET / 2;\n\t      }\n\t      break;\n\t\n\t    case 'rect':\n\t    case 'svg':\n\t      h = parseInt(el.getAttribute('height'), 10);\n\t      w = parseInt(el.getAttribute('width'), 10);\n\t      x = parseInt(el.getAttribute('x'), 10);\n\t      y = parseInt(el.getAttribute('y'), 10);\n\t      break;\n\t  }\n\t\n\t  // Result provides same properties as getBoundingClientRect\n\t  var result = {\n\t    top: y,\n\t    left: x,\n\t    width: w,\n\t    height: h,\n\t    right: x + w,\n\t    bottom: y + h\n\t  };\n\t\n\t  // For the case of nested SVG (point annotations) and grouped\n\t  // lines or rects no adjustment needs to be made for scale.\n\t  // I assume that the scale is already being handled\n\t  // natively by virtue of the `transform` attribute.\n\t  if (!['svg', 'g'].includes(el.nodeName.toLowerCase())) {\n\t    result = scaleUp(findSVGAtPoint(rect.left, rect.top), result);\n\t  }\n\t\n\t  // // comment point need to be scaled on FF\n\t  if (el.nodeName.toLowerCase() == 'svg' && $.browser.mozilla) {\n\t    result = scaleUp(findSVGAtPoint(rect.left, rect.top), result);\n\t  }\n\t\n\t  return result;\n\t}\n\t\n\t/**\n\t * Adjust scale from normalized scale (100%) to rendered scale.\n\t *\n\t * @param {SVGElement} svg The SVG to gather metadata from\n\t * @param {Object} rect A map of numeric values to scale\n\t * @return {Object} A copy of `rect` with values scaled up\n\t */\n\tfunction scaleUp(svg, rect) {\n\t  var result = {};\n\t\n\t  var _getMetadata = getMetadata(svg),\n\t      viewport = _getMetadata.viewport;\n\t\n\t  Object.keys(rect).forEach(function (key) {\n\t    result[key] = rect[key] * viewport.scale;\n\t  });\n\t\n\t  return result;\n\t}\n\t\n\t/**\n\t * Adjust scale from rendered scale to a normalized scale (100%).\n\t *\n\t * @param {SVGElement} svg The SVG to gather metadata from\n\t * @param {Object} rect A map of numeric values to scale\n\t * @return {Object} A copy of `rect` with values scaled down\n\t */\n\tfunction scaleDown(svg, rect) {\n\t  var result = {};\n\t\n\t  var _getMetadata2 = getMetadata(svg),\n\t      viewport = _getMetadata2.viewport;\n\t\n\t  Object.keys(rect).forEach(function (key) {\n\t    result[key] = rect[key] / viewport.scale;\n\t  });\n\t\n\t  return result;\n\t}\n\t\n\t/**\n\t * Get the scroll position of an element, accounting for parent elements\n\t *\n\t * @param {Element} el The element to get the scroll position for\n\t * @return {Object} The scrollTop and scrollLeft position\n\t */\n\tfunction getScroll(el) {\n\t  var scrollTop = 0;\n\t  var scrollLeft = 0;\n\t  var parentNode = el;\n\t\n\t  while ((parentNode = parentNode.parentNode) && parentNode !== document) {\n\t    scrollTop += parentNode.scrollTop;\n\t    scrollLeft += parentNode.scrollLeft;\n\t  }\n\t\n\t  return { scrollTop: scrollTop, scrollLeft: scrollLeft };\n\t}\n\t\n\t/**\n\t * Get the offset position of an element, accounting for parent elements\n\t *\n\t * @param {Element} el The element to get the offset position for\n\t * @return {Object} The offsetTop and offsetLeft position\n\t */\n\tfunction getOffset(el) {\n\t  var parentNode = el;\n\t\n\t  while ((parentNode = parentNode.parentNode) && parentNode !== document) {\n\t    if (parentNode.nodeName.toUpperCase() === 'SVG') {\n\t      break;\n\t    }\n\t  }\n\t\n\t  var rect = parentNode.getBoundingClientRect();\n\t\n\t  return { offsetLeft: rect.left, offsetTop: rect.top };\n\t}\n\t\n\t/**\n\t * Disable user ability to select text on page\n\t */\n\tfunction disableUserSelect() {\n\t  if (!userSelectStyleSheet.parentNode) {\n\t    document.head.appendChild(userSelectStyleSheet);\n\t  }\n\t}\n\t\n\t/**\n\t * Enable user ability to select text on page\n\t */\n\tfunction enableUserSelect() {\n\t  if (userSelectStyleSheet.parentNode) {\n\t    userSelectStyleSheet.parentNode.removeChild(userSelectStyleSheet);\n\t  }\n\t}\n\t\n\t/**\n\t * Get the metadata for a SVG container\n\t *\n\t * @param {SVGElement} svg The SVG container to get metadata for\n\t */\n\tfunction getMetadata(svg) {\n\t  return {\n\t    documentId: svg.getAttribute('data-pdf-annotate-document'),\n\t    pageNumber: parseInt(svg.getAttribute('data-pdf-annotate-page'), 10),\n\t    viewport: JSON.parse(svg.getAttribute('data-pdf-annotate-viewport'))\n\t  };\n\t}\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function createStyleSheet(blocks) {\n\t  var style = document.createElement('style');\n\t  var text = Object.keys(blocks).map(function (selector) {\n\t    return processRuleSet(selector, blocks[selector]);\n\t  }).join('\\n');\n\t  \n\t  style.setAttribute('type', 'text/css');\n\t  style.appendChild(document.createTextNode(text));\n\t\n\t  return style;\n\t}\n\t\n\tfunction processRuleSet(selector, block) {\n\t  return selector + ' {\\n' + processDeclarationBlock(block) + '\\n}';\n\t}\n\t\n\tfunction processDeclarationBlock(block) {\n\t  return Object.keys(block).map(function (prop) {\n\t    return processDeclaration(prop, block[prop]);\n\t  }).join('\\n');\n\t}\n\t\n\tfunction processDeclaration(prop, value) {\n\t  if (!isNaN(value) && value != 0) {\n\t    value = value + 'px';\n\t  }\n\t\n\t  return hyphenate(prop) + ': ' + value + ';';\n\t}\n\t\n\tfunction hyphenate(prop) {\n\t  return prop.replace(/[A-Z]/g, function (match) {\n\t    return '-' + match.toLowerCase();\n\t  });\n\t}\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\t\n\tvar _axios = __webpack_require__(9);\n\t\n\tvar _axios2 = _interopRequireDefault(_axios);\n\t\n\tvar _uuid = __webpack_require__(36);\n\t\n\tvar _uuid2 = _interopRequireDefault(_uuid);\n\t\n\tvar _StoreAdapter2 = __webpack_require__(2);\n\t\n\tvar _StoreAdapter3 = _interopRequireDefault(_StoreAdapter2);\n\t\n\tvar _initFile = __webpack_require__(37);\n\t\n\tvar _comments = __webpack_require__(38);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\t_axios2.default.defaults.xsrfCookieName = 'csrftoken';\n\t_axios2.default.defaults.xsrfHeaderName = 'X-CSRFToken';\n\t\n\tvar CRFPAStoreAdapter = function (_StoreAdapter) {\n\t    _inherits(CRFPAStoreAdapter, _StoreAdapter);\n\t\n\t    function CRFPAStoreAdapter() {\n\t        _classCallCheck(this, CRFPAStoreAdapter);\n\t\n\t        var API = _axios2.default.create({\n\t            baseURL: '/pdfannotator',\n\t            timeout: 60000,\n\t            withCredentials: true,\n\t            headers: {\n\t                'Accept': 'application/json',\n\t                'Content-Type': 'application/json',\n\t                'Access-Control-Allow-Origin': '*'\n\t            }\n\t        });\n\t\n\t        return _possibleConstructorReturn(this, (CRFPAStoreAdapter.__proto__ || Object.getPrototypeOf(CRFPAStoreAdapter)).call(this, {\n\t            getAnnotations: function getAnnotations(documentId) {\n\t\n\t                return API.get('/get-annotations/', {\n\t                    params: {\n\t                        fileUuid: _initFile.documentId\n\t                    }\n\t                }).then(function (response) {\n\t                    return response.data;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et les annotations n'ont pas pu être téléchargées depuis le serveur.\");\n\t                });\n\t\n\t                // return new Promise((resolve, reject) => {\n\t                //   let annotations = getAnnotations(documentId).filter((i) => {\n\t                //     return i.page === pageNumber && i.class === 'Annotation';\n\t                //   });\n\t                //\n\t                //   resolve({\n\t                //     documentId,\n\t                //     pageNumber,\n\t                //     annotations\n\t                //   });\n\t                // });\n\t            },\n\t            getAnnotation: function getAnnotation(documentId, annotationId) {\n\t                return API.get('/get-annotation/', {\n\t                    params: {\n\t                        fileUuid: _initFile.documentId,\n\t                        annotationId: annotationId\n\t                    }\n\t                }).then(function (response) {\n\t                    return response.data;\n\t                });\n\t            },\n\t            addAnnotation: function addAnnotation(documentId, pageNumber, annotation) {\n\t\n\t                annotation.class = 'Annotation';\n\t                annotation.page = pageNumber;\n\t                annotation.uuid = (0, _uuid2.default)();\n\t\n\t                return API.post('/add-annotation/', {\n\t                    fileUuid: _initFile.documentId,\n\t                    page: pageNumber,\n\t                    annotation: annotation\n\t                }).then(function (response) {\n\t                    return annotation;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et votre annotation n'a pas pu être enregistrée.\");\n\t                });\n\t\n\t                // return new Promise((resolve, reject) => {\n\t\n\t                // annotation.class = 'Annotation';\n\t                // annotation.uuid = uuid();\n\t                // annotation.page = pageNumber;\n\t\n\t                // let annotations = getAnnotations(documentId);\n\t                // annotations.push(annotation);\n\t                // updateAnnotations(documentId, annotations);\n\t\n\t                // resolve(annotation);\n\t                // });\n\t            },\n\t            editAnnotation: function editAnnotation(documentId, annotationId, annotation) {\n\t                return API.post('/update-annotation/', {\n\t                    fileUuid: _initFile.documentId,\n\t                    annotationId: annotationId,\n\t                    annotation: annotation\n\t                }).then(function (response) {\n\t                    if (annotation.type === 'point') (0, _comments.renderComments)();\n\t                    return response;\n\t                }).then(function (response) {\n\t                    return annotation;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et l'annotation n'a pas pu être enregistrée.\");\n\t                });\n\t\n\t                // return new Promise((resolve, reject) => {\n\t                //   let annotations = getAnnotations(documentId);\n\t                //   annotations[findAnnotation(documentId, annotationId)] = annotation;\n\t                //   updateAnnotations(documentId, annotations);\n\t                //\n\t                //   resolve(annotation);\n\t                // });\n\t            },\n\t            deleteAnnotation: function deleteAnnotation(documentId, annotationId) {\n\t                return API.post('/delete-annotation/', {\n\t                    annotationId: annotationId,\n\t                    fileUuid: _initFile.documentId\n\t                }).then(function (response) {\n\t                    (0, _comments.renderComments)();\n\t                    return response;\n\t                }).then(function (response) {\n\t                    return true;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et l'annotation n'a pas pu être supprimée.\");\n\t                });;\n\t\n\t                // return new Promise((resolve, reject) => {\n\t                //   let index = findAnnotation(documentId, annotationId);\n\t                //   if (index > -1) {\n\t                //     let annotations = getAnnotations(documentId);\n\t                //     annotations.splice(index, 1);\n\t                //     updateAnnotations(documentId, annotations);\n\t                //   }\n\t                //\n\t                //   resolve(true);\n\t                // });\n\t            },\n\t            getComments: function getComments(documentId) {\n\t                return API.get('/get-comments/', {\n\t                    params: {\n\t                        fileUuid: _initFile.documentId\n\t                    }\n\t                }).then(function (response) {\n\t                    return response.data;\n\t                });\n\t\n\t                // return new Promise((resolve, reject) => {\n\t                //   resolve(getAnnotations(documentId).filter((i) => {\n\t                //     return i.class === 'Comment' && i.annotation === annotationId;\n\t                //   }));\n\t                // });\n\t            },\n\t            addComment: function addComment(documentId, annotationId, content) {\n\t\n\t                return API.post('/add-comment/', {\n\t                    fileUuid: _initFile.documentId,\n\t                    annotationId: annotationId,\n\t                    content: content\n\t                }).then(function (response) {\n\t                    (0, _comments.renderComments)();\n\t                    return response;\n\t                }).then(function (response) {\n\t                    return content;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et votre commentaire n'a pas pu être enregistré.\");\n\t                });;\n\t\n\t                // return new Promise((resolve, reject) => {\n\t                //   let comment = {\n\t                //     class: 'Comment',\n\t                //     uuid: uuid(),\n\t                //     annotation: annotationId,\n\t                //     content: content\n\t                //   };\n\t                //\n\t                //\n\t                //\n\t                //   let annotations = getAnnotations(documentId);\n\t                //   annotations.push(comment);\n\t                //   updateAnnotations(documentId, annotations);\n\t                //\n\t                //   resolve(comment);\n\t                // });\n\t            },\n\t            updateComment: function updateComment(documentId, annotationId, comment) {\n\t                return API.post('/update-comment/', {\n\t                    fileUuid: _initFile.documentId,\n\t                    annotationId: annotationId,\n\t                    comment: comment\n\t                }).then(function (response) {\n\t                    (0, _comments.renderComments)();\n\t                    return response;\n\t                }).then(function (response) {\n\t                    return comment;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et votre commentaire n'a pas pu être enregistrée.\");\n\t                });;\n\t            }\n\t        }\n\t\n\t        // deleteComment(documentId, commentId) {\n\t        //\n\t        //     return API.post('/delete-comment/', {\n\t        //         fileUuid,\n\t        //         commentId,\n\t        //     }).then(function (response) {\n\t        //         return true;\n\t        //     });\n\t        // }\n\t        ));\n\t    }\n\t\n\t    return CRFPAStoreAdapter;\n\t}(_StoreAdapter3.default);\n\t//\n\t// function getAnnotations(documentId) {\n\t//   return JSON.parse(localStorage.getItem(`${documentId}/annotations`)) || [];\n\t// }\n\t//\n\t// function updateAnnotations(documentId, annotations) {\n\t//   localStorage.setItem(`${documentId}/annotations`, JSON.stringify(annotations));\n\t// }\n\t\n\t// function findAnnotation(documentId, annotationId) {\n\t//   let index = -1;\n\t//   let annotations = getAnnotations(documentId);\n\t//   for (let i=0, l=annotations.length; i<l; i++) {\n\t//     if (annotations[i].uuid === annotationId) {\n\t//       index = i;\n\t//       break;\n\t//     }\n\t//   }\n\t//   return index;\n\t// }\n\t\n\t\n\texports.default = CRFPAStoreAdapter;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(10);\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\tvar bind = __webpack_require__(12);\n\tvar Axios = __webpack_require__(14);\n\tvar defaults = __webpack_require__(15);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t  var context = new Axios(defaultConfig);\n\t  var instance = bind(Axios.prototype.request, context);\n\t\n\t  // Copy axios.prototype to instance\n\t  utils.extend(instance, Axios.prototype, context);\n\t\n\t  // Copy context to instance\n\t  utils.extend(instance, context);\n\t\n\t  return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = createInstance(defaults);\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(instanceConfig) {\n\t  return createInstance(utils.merge(defaults, instanceConfig));\n\t};\n\t\n\t// Expose Cancel & CancelToken\n\taxios.Cancel = __webpack_require__(33);\n\taxios.CancelToken = __webpack_require__(34);\n\taxios.isCancel = __webpack_require__(30);\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t  return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(35);\n\t\n\tmodule.exports = axios;\n\t\n\t// Allow use of default import syntax in TypeScript\n\tmodule.exports.default = axios;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(12);\n\tvar isBuffer = __webpack_require__(13);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t  return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t  return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t  var result;\n\t  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t    result = ArrayBuffer.isView(val);\n\t  } else {\n\t    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t  }\n\t  return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t  return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t  return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t  return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t  return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t  return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t  return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t  return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t  return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t  return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t *  typeof window -> undefined\n\t *  typeof document -> undefined\n\t *\n\t * react-native:\n\t *  navigator.product -> 'ReactNative'\n\t */\n\tfunction isStandardBrowserEnv() {\n\t  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n\t    return false;\n\t  }\n\t  return (\n\t    typeof window !== 'undefined' &&\n\t    typeof document !== 'undefined'\n\t  );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t  // Don't bother if no value provided\n\t  if (obj === null || typeof obj === 'undefined') {\n\t    return;\n\t  }\n\t\n\t  // Force an array if not already something iterable\n\t  if (typeof obj !== 'object') {\n\t    /*eslint no-param-reassign:0*/\n\t    obj = [obj];\n\t  }\n\t\n\t  if (isArray(obj)) {\n\t    // Iterate over array values\n\t    for (var i = 0, l = obj.length; i < l; i++) {\n\t      fn.call(null, obj[i], i, obj);\n\t    }\n\t  } else {\n\t    // Iterate over object keys\n\t    for (var key in obj) {\n\t      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t        fn.call(null, obj[key], key, obj);\n\t      }\n\t    }\n\t  }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t  var result = {};\n\t  function assignValue(val, key) {\n\t    if (typeof result[key] === 'object' && typeof val === 'object') {\n\t      result[key] = merge(result[key], val);\n\t    } else {\n\t      result[key] = val;\n\t    }\n\t  }\n\t\n\t  for (var i = 0, l = arguments.length; i < l; i++) {\n\t    forEach(arguments[i], assignValue);\n\t  }\n\t  return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t  forEach(b, function assignValue(val, key) {\n\t    if (thisArg && typeof val === 'function') {\n\t      a[key] = bind(val, thisArg);\n\t    } else {\n\t      a[key] = val;\n\t    }\n\t  });\n\t  return a;\n\t}\n\t\n\tmodule.exports = {\n\t  isArray: isArray,\n\t  isArrayBuffer: isArrayBuffer,\n\t  isBuffer: isBuffer,\n\t  isFormData: isFormData,\n\t  isArrayBufferView: isArrayBufferView,\n\t  isString: isString,\n\t  isNumber: isNumber,\n\t  isObject: isObject,\n\t  isUndefined: isUndefined,\n\t  isDate: isDate,\n\t  isFile: isFile,\n\t  isBlob: isBlob,\n\t  isFunction: isFunction,\n\t  isStream: isStream,\n\t  isURLSearchParams: isURLSearchParams,\n\t  isStandardBrowserEnv: isStandardBrowserEnv,\n\t  forEach: forEach,\n\t  merge: merge,\n\t  extend: extend,\n\t  trim: trim\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t  return function wrap() {\n\t    var args = new Array(arguments.length);\n\t    for (var i = 0; i < args.length; i++) {\n\t      args[i] = arguments[i];\n\t    }\n\t    return fn.apply(thisArg, args);\n\t  };\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * Determine if an object is a Buffer\n\t *\n\t * @author   Feross Aboukhadijeh <https://feross.org>\n\t * @license  MIT\n\t */\n\t\n\t// The _isBuffer check is for Safari 5-7 support, because it's missing\n\t// Object.prototype.constructor. Remove this eventually\n\tmodule.exports = function (obj) {\n\t  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n\t}\n\t\n\tfunction isBuffer (obj) {\n\t  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n\t}\n\t\n\t// For Node v0.10 support. Remove this eventually.\n\tfunction isSlowBuffer (obj) {\n\t  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n\t}\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(15);\n\tvar utils = __webpack_require__(11);\n\tvar InterceptorManager = __webpack_require__(27);\n\tvar dispatchRequest = __webpack_require__(28);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} instanceConfig The default config for the instance\n\t */\n\tfunction Axios(instanceConfig) {\n\t  this.defaults = instanceConfig;\n\t  this.interceptors = {\n\t    request: new InterceptorManager(),\n\t    response: new InterceptorManager()\n\t  };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t  /*eslint no-param-reassign:0*/\n\t  // Allow for axios('example/url'[, config]) a la fetch API\n\t  if (typeof config === 'string') {\n\t    config = utils.merge({\n\t      url: arguments[0]\n\t    }, arguments[1]);\n\t  }\n\t\n\t  config = utils.merge(defaults, {method: 'get'}, this.defaults, config);\n\t  config.method = config.method.toLowerCase();\n\t\n\t  // Hook up interceptors middleware\n\t  var chain = [dispatchRequest, undefined];\n\t  var promise = Promise.resolve(config);\n\t\n\t  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t  });\n\t\n\t  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t    chain.push(interceptor.fulfilled, interceptor.rejected);\n\t  });\n\t\n\t  while (chain.length) {\n\t    promise = promise.then(chain.shift(), chain.shift());\n\t  }\n\t\n\t  return promise;\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n\t  /*eslint func-names:0*/\n\t  Axios.prototype[method] = function(url, config) {\n\t    return this.request(utils.merge(config || {}, {\n\t      method: method,\n\t      url: url\n\t    }));\n\t  };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t  /*eslint func-names:0*/\n\t  Axios.prototype[method] = function(url, data, config) {\n\t    return this.request(utils.merge(config || {}, {\n\t      method: method,\n\t      url: url,\n\t      data: data\n\t    }));\n\t  };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\tvar normalizeHeaderName = __webpack_require__(17);\n\t\n\tvar DEFAULT_CONTENT_TYPE = {\n\t  'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t    headers['Content-Type'] = value;\n\t  }\n\t}\n\t\n\tfunction getDefaultAdapter() {\n\t  var adapter;\n\t  if (typeof XMLHttpRequest !== 'undefined') {\n\t    // For browsers use XHR adapter\n\t    adapter = __webpack_require__(18);\n\t  } else if (typeof process !== 'undefined') {\n\t    // For node use HTTP adapter\n\t    adapter = __webpack_require__(18);\n\t  }\n\t  return adapter;\n\t}\n\t\n\tvar defaults = {\n\t  adapter: getDefaultAdapter(),\n\t\n\t  transformRequest: [function transformRequest(data, headers) {\n\t    normalizeHeaderName(headers, 'Content-Type');\n\t    if (utils.isFormData(data) ||\n\t      utils.isArrayBuffer(data) ||\n\t      utils.isBuffer(data) ||\n\t      utils.isStream(data) ||\n\t      utils.isFile(data) ||\n\t      utils.isBlob(data)\n\t    ) {\n\t      return data;\n\t    }\n\t    if (utils.isArrayBufferView(data)) {\n\t      return data.buffer;\n\t    }\n\t    if (utils.isURLSearchParams(data)) {\n\t      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t      return data.toString();\n\t    }\n\t    if (utils.isObject(data)) {\n\t      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t      return JSON.stringify(data);\n\t    }\n\t    return data;\n\t  }],\n\t\n\t  transformResponse: [function transformResponse(data) {\n\t    /*eslint no-param-reassign:0*/\n\t    if (typeof data === 'string') {\n\t      try {\n\t        data = JSON.parse(data);\n\t      } catch (e) { /* Ignore */ }\n\t    }\n\t    return data;\n\t  }],\n\t\n\t  /**\n\t   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n\t   * timeout is not created.\n\t   */\n\t  timeout: 0,\n\t\n\t  xsrfCookieName: 'XSRF-TOKEN',\n\t  xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t  maxContentLength: -1,\n\t\n\t  validateStatus: function validateStatus(status) {\n\t    return status >= 200 && status < 300;\n\t  }\n\t};\n\t\n\tdefaults.headers = {\n\t  common: {\n\t    'Accept': 'application/json, text/plain, */*'\n\t  }\n\t};\n\t\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t  defaults.headers[method] = {};\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n\t});\n\t\n\tmodule.exports = defaults;\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(16)))\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things.  But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals.  It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t    throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t    throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t    try {\n\t        if (typeof setTimeout === 'function') {\n\t            cachedSetTimeout = setTimeout;\n\t        } else {\n\t            cachedSetTimeout = defaultSetTimout;\n\t        }\n\t    } catch (e) {\n\t        cachedSetTimeout = defaultSetTimout;\n\t    }\n\t    try {\n\t        if (typeof clearTimeout === 'function') {\n\t            cachedClearTimeout = clearTimeout;\n\t        } else {\n\t            cachedClearTimeout = defaultClearTimeout;\n\t        }\n\t    } catch (e) {\n\t        cachedClearTimeout = defaultClearTimeout;\n\t    }\n\t} ())\n\tfunction runTimeout(fun) {\n\t    if (cachedSetTimeout === setTimeout) {\n\t        //normal enviroments in sane situations\n\t        return setTimeout(fun, 0);\n\t    }\n\t    // if setTimeout wasn't available but was latter defined\n\t    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t        cachedSetTimeout = setTimeout;\n\t        return setTimeout(fun, 0);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedSetTimeout(fun, 0);\n\t    } catch(e){\n\t        try {\n\t            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t            return cachedSetTimeout.call(null, fun, 0);\n\t        } catch(e){\n\t            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t            return cachedSetTimeout.call(this, fun, 0);\n\t        }\n\t    }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t    if (cachedClearTimeout === clearTimeout) {\n\t        //normal enviroments in sane situations\n\t        return clearTimeout(marker);\n\t    }\n\t    // if clearTimeout wasn't available but was latter defined\n\t    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t        cachedClearTimeout = clearTimeout;\n\t        return clearTimeout(marker);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedClearTimeout(marker);\n\t    } catch (e){\n\t        try {\n\t            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n\t            return cachedClearTimeout.call(null, marker);\n\t        } catch (e){\n\t            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t            return cachedClearTimeout.call(this, marker);\n\t        }\n\t    }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t    if (!draining || !currentQueue) {\n\t        return;\n\t    }\n\t    draining = false;\n\t    if (currentQueue.length) {\n\t        queue = currentQueue.concat(queue);\n\t    } else {\n\t        queueIndex = -1;\n\t    }\n\t    if (queue.length) {\n\t        drainQueue();\n\t    }\n\t}\n\t\n\tfunction drainQueue() {\n\t    if (draining) {\n\t        return;\n\t    }\n\t    var timeout = runTimeout(cleanUpNextTick);\n\t    draining = true;\n\t\n\t    var len = queue.length;\n\t    while(len) {\n\t        currentQueue = queue;\n\t        queue = [];\n\t        while (++queueIndex < len) {\n\t            if (currentQueue) {\n\t                currentQueue[queueIndex].run();\n\t            }\n\t        }\n\t        queueIndex = -1;\n\t        len = queue.length;\n\t    }\n\t    currentQueue = null;\n\t    draining = false;\n\t    runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t    var args = new Array(arguments.length - 1);\n\t    if (arguments.length > 1) {\n\t        for (var i = 1; i < arguments.length; i++) {\n\t            args[i - 1] = arguments[i];\n\t        }\n\t    }\n\t    queue.push(new Item(fun, args));\n\t    if (queue.length === 1 && !draining) {\n\t        runTimeout(drainQueue);\n\t    }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t    this.fun = fun;\n\t    this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t    this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\tprocess.prependListener = noop;\n\tprocess.prependOnceListener = noop;\n\t\n\tprocess.listeners = function (name) { return [] }\n\t\n\tprocess.binding = function (name) {\n\t    throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t    throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t  utils.forEach(headers, function processHeader(value, name) {\n\t    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t      headers[normalizedName] = value;\n\t      delete headers[name];\n\t    }\n\t  });\n\t};\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\tvar settle = __webpack_require__(19);\n\tvar buildURL = __webpack_require__(22);\n\tvar parseHeaders = __webpack_require__(23);\n\tvar isURLSameOrigin = __webpack_require__(24);\n\tvar createError = __webpack_require__(20);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__(25);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t  return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t    var requestData = config.data;\n\t    var requestHeaders = config.headers;\n\t\n\t    if (utils.isFormData(requestData)) {\n\t      delete requestHeaders['Content-Type']; // Let the browser set it\n\t    }\n\t\n\t    var request = new XMLHttpRequest();\n\t    var loadEvent = 'onreadystatechange';\n\t    var xDomain = false;\n\t\n\t    // For IE 8/9 CORS support\n\t    // Only supports POST and GET calls and doesn't returns the response headers.\n\t    // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t    if (process.env.NODE_ENV !== 'test' &&\n\t        typeof window !== 'undefined' &&\n\t        window.XDomainRequest && !('withCredentials' in request) &&\n\t        !isURLSameOrigin(config.url)) {\n\t      request = new window.XDomainRequest();\n\t      loadEvent = 'onload';\n\t      xDomain = true;\n\t      request.onprogress = function handleProgress() {};\n\t      request.ontimeout = function handleTimeout() {};\n\t    }\n\t\n\t    // HTTP basic authentication\n\t    if (config.auth) {\n\t      var username = config.auth.username || '';\n\t      var password = config.auth.password || '';\n\t      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t    }\n\t\n\t    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t    // Set the request timeout in MS\n\t    request.timeout = config.timeout;\n\t\n\t    // Listen for ready state\n\t    request[loadEvent] = function handleLoad() {\n\t      if (!request || (request.readyState !== 4 && !xDomain)) {\n\t        return;\n\t      }\n\t\n\t      // The request errored out and we didn't get a response, this will be\n\t      // handled by onerror instead\n\t      // With one exception: request that using file: protocol, most browsers\n\t      // will return status as 0 even though it's a successful request\n\t      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n\t        return;\n\t      }\n\t\n\t      // Prepare the response\n\t      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t      var response = {\n\t        data: responseData,\n\t        // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n\t        status: request.status === 1223 ? 204 : request.status,\n\t        statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t        headers: responseHeaders,\n\t        config: config,\n\t        request: request\n\t      };\n\t\n\t      settle(resolve, reject, response);\n\t\n\t      // Clean up request\n\t      request = null;\n\t    };\n\t\n\t    // Handle low level network errors\n\t    request.onerror = function handleError() {\n\t      // Real errors are hidden from us by the browser\n\t      // onerror should only fire if it's a network error\n\t      reject(createError('Network Error', config, null, request));\n\t\n\t      // Clean up request\n\t      request = null;\n\t    };\n\t\n\t    // Handle timeout\n\t    request.ontimeout = function handleTimeout() {\n\t      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n\t        request));\n\t\n\t      // Clean up request\n\t      request = null;\n\t    };\n\t\n\t    // Add xsrf header\n\t    // This is only done if running in a standard browser environment.\n\t    // Specifically not if we're in a web worker, or react-native.\n\t    if (utils.isStandardBrowserEnv()) {\n\t      var cookies = __webpack_require__(26);\n\t\n\t      // Add xsrf header\n\t      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n\t          cookies.read(config.xsrfCookieName) :\n\t          undefined;\n\t\n\t      if (xsrfValue) {\n\t        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t      }\n\t    }\n\t\n\t    // Add headers to the request\n\t    if ('setRequestHeader' in request) {\n\t      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t          // Remove Content-Type if data is undefined\n\t          delete requestHeaders[key];\n\t        } else {\n\t          // Otherwise add header to the request\n\t          request.setRequestHeader(key, val);\n\t        }\n\t      });\n\t    }\n\t\n\t    // Add withCredentials to request if needed\n\t    if (config.withCredentials) {\n\t      request.withCredentials = true;\n\t    }\n\t\n\t    // Add responseType to request if needed\n\t    if (config.responseType) {\n\t      try {\n\t        request.responseType = config.responseType;\n\t      } catch (e) {\n\t        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n\t        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n\t        if (config.responseType !== 'json') {\n\t          throw e;\n\t        }\n\t      }\n\t    }\n\t\n\t    // Handle progress if needed\n\t    if (typeof config.onDownloadProgress === 'function') {\n\t      request.addEventListener('progress', config.onDownloadProgress);\n\t    }\n\t\n\t    // Not all browsers support upload events\n\t    if (typeof config.onUploadProgress === 'function' && request.upload) {\n\t      request.upload.addEventListener('progress', config.onUploadProgress);\n\t    }\n\t\n\t    if (config.cancelToken) {\n\t      // Handle cancellation\n\t      config.cancelToken.promise.then(function onCanceled(cancel) {\n\t        if (!request) {\n\t          return;\n\t        }\n\t\n\t        request.abort();\n\t        reject(cancel);\n\t        // Clean up request\n\t        request = null;\n\t      });\n\t    }\n\t\n\t    if (requestData === undefined) {\n\t      requestData = null;\n\t    }\n\t\n\t    // Send the request\n\t    request.send(requestData);\n\t  });\n\t};\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(16)))\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(20);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t  var validateStatus = response.config.validateStatus;\n\t  // Note: status is not exposed by XDomainRequest\n\t  if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t    resolve(response);\n\t  } else {\n\t    reject(createError(\n\t      'Request failed with status code ' + response.status,\n\t      response.config,\n\t      null,\n\t      response.request,\n\t      response\n\t    ));\n\t  }\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(21);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, request and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t * @param {Object} [request] The request.\n\t * @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, request, response) {\n\t  var error = new Error(message);\n\t  return enhanceError(error, config, code, request, response);\n\t};\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t * @param {Object} [request] The request.\n\t * @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, request, response) {\n\t  error.config = config;\n\t  if (code) {\n\t    error.code = code;\n\t  }\n\t  error.request = request;\n\t  error.response = response;\n\t  return error;\n\t};\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\tfunction encode(val) {\n\t  return encodeURIComponent(val).\n\t    replace(/%40/gi, '@').\n\t    replace(/%3A/gi, ':').\n\t    replace(/%24/g, '$').\n\t    replace(/%2C/gi, ',').\n\t    replace(/%20/g, '+').\n\t    replace(/%5B/gi, '[').\n\t    replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t  /*eslint no-param-reassign:0*/\n\t  if (!params) {\n\t    return url;\n\t  }\n\t\n\t  var serializedParams;\n\t  if (paramsSerializer) {\n\t    serializedParams = paramsSerializer(params);\n\t  } else if (utils.isURLSearchParams(params)) {\n\t    serializedParams = params.toString();\n\t  } else {\n\t    var parts = [];\n\t\n\t    utils.forEach(params, function serialize(val, key) {\n\t      if (val === null || typeof val === 'undefined') {\n\t        return;\n\t      }\n\t\n\t      if (utils.isArray(val)) {\n\t        key = key + '[]';\n\t      } else {\n\t        val = [val];\n\t      }\n\t\n\t      utils.forEach(val, function parseValue(v) {\n\t        if (utils.isDate(v)) {\n\t          v = v.toISOString();\n\t        } else if (utils.isObject(v)) {\n\t          v = JSON.stringify(v);\n\t        }\n\t        parts.push(encode(key) + '=' + encode(v));\n\t      });\n\t    });\n\t\n\t    serializedParams = parts.join('&');\n\t  }\n\t\n\t  if (serializedParams) {\n\t    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t  }\n\t\n\t  return url;\n\t};\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\t// Headers whose duplicates are ignored by node\n\t// c.f. https://nodejs.org/api/http.html#http_message_headers\n\tvar ignoreDuplicateOf = [\n\t  'age', 'authorization', 'content-length', 'content-type', 'etag',\n\t  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n\t  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n\t  'referer', 'retry-after', 'user-agent'\n\t];\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t  var parsed = {};\n\t  var key;\n\t  var val;\n\t  var i;\n\t\n\t  if (!headers) { return parsed; }\n\t\n\t  utils.forEach(headers.split('\\n'), function parser(line) {\n\t    i = line.indexOf(':');\n\t    key = utils.trim(line.substr(0, i)).toLowerCase();\n\t    val = utils.trim(line.substr(i + 1));\n\t\n\t    if (key) {\n\t      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n\t        return;\n\t      }\n\t      if (key === 'set-cookie') {\n\t        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n\t      } else {\n\t        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t      }\n\t    }\n\t  });\n\t\n\t  return parsed;\n\t};\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\tmodule.exports = (\n\t  utils.isStandardBrowserEnv() ?\n\t\n\t  // Standard browser envs have full support of the APIs needed to test\n\t  // whether the request URL is of the same origin as current location.\n\t  (function standardBrowserEnv() {\n\t    var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t    var urlParsingNode = document.createElement('a');\n\t    var originURL;\n\t\n\t    /**\n\t    * Parse a URL to discover it's components\n\t    *\n\t    * @param {String} url The URL to be parsed\n\t    * @returns {Object}\n\t    */\n\t    function resolveURL(url) {\n\t      var href = url;\n\t\n\t      if (msie) {\n\t        // IE needs attribute set twice to normalize properties\n\t        urlParsingNode.setAttribute('href', href);\n\t        href = urlParsingNode.href;\n\t      }\n\t\n\t      urlParsingNode.setAttribute('href', href);\n\t\n\t      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t      return {\n\t        href: urlParsingNode.href,\n\t        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t        host: urlParsingNode.host,\n\t        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t        hostname: urlParsingNode.hostname,\n\t        port: urlParsingNode.port,\n\t        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t                  urlParsingNode.pathname :\n\t                  '/' + urlParsingNode.pathname\n\t      };\n\t    }\n\t\n\t    originURL = resolveURL(window.location.href);\n\t\n\t    /**\n\t    * Determine if a URL shares the same origin as the current location\n\t    *\n\t    * @param {String} requestURL The URL to test\n\t    * @returns {boolean} True if URL shares the same origin, otherwise false\n\t    */\n\t    return function isURLSameOrigin(requestURL) {\n\t      var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t      return (parsed.protocol === originURL.protocol &&\n\t            parsed.host === originURL.host);\n\t    };\n\t  })() :\n\t\n\t  // Non standard browser envs (web workers, react-native) lack needed support.\n\t  (function nonStandardBrowserEnv() {\n\t    return function isURLSameOrigin() {\n\t      return true;\n\t    };\n\t  })()\n\t);\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t  this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t  var str = String(input);\n\t  var output = '';\n\t  for (\n\t    // initialize result and counter\n\t    var block, charCode, idx = 0, map = chars;\n\t    // if the next str index does not exist:\n\t    //   change the mapping table to \"=\"\n\t    //   check if d has no fractional digits\n\t    str.charAt(idx | 0) || (map = '=', idx % 1);\n\t    // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t    output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t  ) {\n\t    charCode = str.charCodeAt(idx += 3 / 4);\n\t    if (charCode > 0xFF) {\n\t      throw new E();\n\t    }\n\t    block = block << 8 | charCode;\n\t  }\n\t  return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\tmodule.exports = (\n\t  utils.isStandardBrowserEnv() ?\n\t\n\t  // Standard browser envs support document.cookie\n\t  (function standardBrowserEnv() {\n\t    return {\n\t      write: function write(name, value, expires, path, domain, secure) {\n\t        var cookie = [];\n\t        cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t        if (utils.isNumber(expires)) {\n\t          cookie.push('expires=' + new Date(expires).toGMTString());\n\t        }\n\t\n\t        if (utils.isString(path)) {\n\t          cookie.push('path=' + path);\n\t        }\n\t\n\t        if (utils.isString(domain)) {\n\t          cookie.push('domain=' + domain);\n\t        }\n\t\n\t        if (secure === true) {\n\t          cookie.push('secure');\n\t        }\n\t\n\t        document.cookie = cookie.join('; ');\n\t      },\n\t\n\t      read: function read(name) {\n\t        var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t        return (match ? decodeURIComponent(match[3]) : null);\n\t      },\n\t\n\t      remove: function remove(name) {\n\t        this.write(name, '', Date.now() - 86400000);\n\t      }\n\t    };\n\t  })() :\n\t\n\t  // Non standard browser env (web workers, react-native) lack needed support.\n\t  (function nonStandardBrowserEnv() {\n\t    return {\n\t      write: function write() {},\n\t      read: function read() { return null; },\n\t      remove: function remove() {}\n\t    };\n\t  })()\n\t);\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\tfunction InterceptorManager() {\n\t  this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t  this.handlers.push({\n\t    fulfilled: fulfilled,\n\t    rejected: rejected\n\t  });\n\t  return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t  if (this.handlers[id]) {\n\t    this.handlers[id] = null;\n\t  }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t  utils.forEach(this.handlers, function forEachHandler(h) {\n\t    if (h !== null) {\n\t      fn(h);\n\t    }\n\t  });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\tvar transformData = __webpack_require__(29);\n\tvar isCancel = __webpack_require__(30);\n\tvar defaults = __webpack_require__(15);\n\tvar isAbsoluteURL = __webpack_require__(31);\n\tvar combineURLs = __webpack_require__(32);\n\t\n\t/**\n\t * Throws a `Cancel` if cancellation has been requested.\n\t */\n\tfunction throwIfCancellationRequested(config) {\n\t  if (config.cancelToken) {\n\t    config.cancelToken.throwIfRequested();\n\t  }\n\t}\n\t\n\t/**\n\t * Dispatch a request to the server using the configured adapter.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t  throwIfCancellationRequested(config);\n\t\n\t  // Support baseURL config\n\t  if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t    config.url = combineURLs(config.baseURL, config.url);\n\t  }\n\t\n\t  // Ensure headers exist\n\t  config.headers = config.headers || {};\n\t\n\t  // Transform request data\n\t  config.data = transformData(\n\t    config.data,\n\t    config.headers,\n\t    config.transformRequest\n\t  );\n\t\n\t  // Flatten headers\n\t  config.headers = utils.merge(\n\t    config.headers.common || {},\n\t    config.headers[config.method] || {},\n\t    config.headers || {}\n\t  );\n\t\n\t  utils.forEach(\n\t    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t    function cleanHeaderConfig(method) {\n\t      delete config.headers[method];\n\t    }\n\t  );\n\t\n\t  var adapter = config.adapter || defaults.adapter;\n\t\n\t  return adapter(config).then(function onAdapterResolution(response) {\n\t    throwIfCancellationRequested(config);\n\t\n\t    // Transform response data\n\t    response.data = transformData(\n\t      response.data,\n\t      response.headers,\n\t      config.transformResponse\n\t    );\n\t\n\t    return response;\n\t  }, function onAdapterRejection(reason) {\n\t    if (!isCancel(reason)) {\n\t      throwIfCancellationRequested(config);\n\t\n\t      // Transform response data\n\t      if (reason && reason.response) {\n\t        reason.response.data = transformData(\n\t          reason.response.data,\n\t          reason.response.headers,\n\t          config.transformResponse\n\t        );\n\t      }\n\t    }\n\t\n\t    return Promise.reject(reason);\n\t  });\n\t};\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t  /*eslint no-param-reassign:0*/\n\t  utils.forEach(fns, function transform(fn) {\n\t    data = fn(data, headers);\n\t  });\n\t\n\t  return data;\n\t};\n\n\n/***/ },\n/* 30 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function isCancel(value) {\n\t  return !!(value && value.__CANCEL__);\n\t};\n\n\n/***/ },\n/* 31 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n\t  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t  // by any combination of letters, digits, plus, period, or hyphen.\n\t  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 32 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t  return relativeURL\n\t    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n\t    : baseURL;\n\t};\n\n\n/***/ },\n/* 33 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * A `Cancel` is an object that is thrown when an operation is canceled.\n\t *\n\t * @class\n\t * @param {string=} message The message.\n\t */\n\tfunction Cancel(message) {\n\t  this.message = message;\n\t}\n\t\n\tCancel.prototype.toString = function toString() {\n\t  return 'Cancel' + (this.message ? ': ' + this.message : '');\n\t};\n\t\n\tCancel.prototype.__CANCEL__ = true;\n\t\n\tmodule.exports = Cancel;\n\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Cancel = __webpack_require__(33);\n\t\n\t/**\n\t * A `CancelToken` is an object that can be used to request cancellation of an operation.\n\t *\n\t * @class\n\t * @param {Function} executor The executor function.\n\t */\n\tfunction CancelToken(executor) {\n\t  if (typeof executor !== 'function') {\n\t    throw new TypeError('executor must be a function.');\n\t  }\n\t\n\t  var resolvePromise;\n\t  this.promise = new Promise(function promiseExecutor(resolve) {\n\t    resolvePromise = resolve;\n\t  });\n\t\n\t  var token = this;\n\t  executor(function cancel(message) {\n\t    if (token.reason) {\n\t      // Cancellation has already been requested\n\t      return;\n\t    }\n\t\n\t    token.reason = new Cancel(message);\n\t    resolvePromise(token.reason);\n\t  });\n\t}\n\t\n\t/**\n\t * Throws a `Cancel` if cancellation has been requested.\n\t */\n\tCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n\t  if (this.reason) {\n\t    throw this.reason;\n\t  }\n\t};\n\t\n\t/**\n\t * Returns an object that contains a new `CancelToken` and a function that, when called,\n\t * cancels the `CancelToken`.\n\t */\n\tCancelToken.source = function source() {\n\t  var cancel;\n\t  var token = new CancelToken(function executor(c) {\n\t    cancel = c;\n\t  });\n\t  return {\n\t    token: token,\n\t    cancel: cancel\n\t  };\n\t};\n\t\n\tmodule.exports = CancelToken;\n\n\n/***/ },\n/* 35 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t *  ```js\n\t *  function f(x, y, z) {}\n\t *  var args = [1, 2, 3];\n\t *  f.apply(null, args);\n\t *  ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t *  ```js\n\t *  spread(function(x, y, z) {})([1, 2, 3]);\n\t *  ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t  return function wrap(arr) {\n\t    return callback.apply(null, arr);\n\t  };\n\t};\n\n\n/***/ },\n/* 36 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = uuid;\n\tvar REGEXP = /[xy]/g;\n\tvar PATTERN = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n\t\n\tfunction replacement(c) {\n\t  var r = Math.random() * 16 | 0;\n\t  var v = c == 'x' ? r : r & 0x3 | 0x8;\n\t  return v.toString(16);\n\t}\n\t\n\t/**\n\t * Generate a univierally unique identifier\n\t *\n\t * @return {String}\n\t */\n\tfunction uuid() {\n\t  return PATTERN.replace(REGEXP, replacement);\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 37 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\tvar documentUrl = exports.documentUrl = document.getElementById('pdf-data').dataset.filepath;\n\tvar documentId = exports.documentId = document.getElementById('pdf-data').dataset.uuid;\n\tvar readonly = exports.readonly = document.getElementById('pdf-data').dataset.readonly === 'True';\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\texports.renderComments = renderComments;\n\texports.selectComment = selectComment;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _twitterText = __webpack_require__(39);\n\t\n\tvar _twitterText2 = _interopRequireDefault(_twitterText);\n\t\n\tvar _event = __webpack_require__(4);\n\t\n\tvar _edit = __webpack_require__(40);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tvar _initFile = __webpack_require__(37);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar commentList = $('#comment-wrapper .comment-list-container');\n\tvar commentForm = $('#comment-wrapper .comment-list-form');\n\t\n\t// let commentText = commentForm.querySelector('input[type=\"text\"]');\n\t\n\tfunction renderComments(documentId) {\n\t    _PDFJSAnnotate2.default.getStoreAdapter().getComments(documentId).then(function (comments) {\n\t\n\t        commentList.html('');\n\t        commentForm.hide();\n\t        // commentText.focus();\n\t\n\t        // commentForm.onsubmit = function () {\n\t        //     PDFJSAnnotate.getStoreAdapter().addComment(documentId, annotationId, commentText.value.trim())\n\t        //         .then(insertComment)\n\t        //         .then(() => {\n\t        //             commentText.value = '';\n\t        //             commentText.focus();\n\t        //         });\n\t        //\n\t        //     return false;\n\t        // };\n\t\n\t        comments.forEach(insertComment);\n\t    });\n\t}\n\t\n\tfunction supportsComments(target) {\n\t    var type = target.getAttribute('data-pdf-annotate-type');\n\t    return ['point', 'highlight', 'area'].indexOf(type) > -1;\n\t}\n\t\n\tfunction insertComment(comment) {\n\t    var child = $('<div></div>');\n\t    var view = $('<div class=\"view\"></div>');\n\t    child.addClass('comment-list-item');\n\t    child.attr('uuid', comment.annotation);\n\t    view.html(_twitterText2.default.autoLink(_twitterText2.default.htmlEscape(comment.content).replace(/\\n/g, '<br/>')));\n\t    view.bind('click', handleCommentClick);\n\t\n\t    if (!_initFile.readonly) {\n\t        var editBtn = $('<button>Modifier</button>');\n\t        editBtn.bind('click', handleEditClick);\n\t        view.append($('<br/>'));\n\t        view.append(editBtn);\n\t    }\n\t    child.append(view);\n\t\n\t    if (!_initFile.readonly) {\n\t        var textarea = $('<textarea></textarea>');\n\t        textarea.text(comment.content);\n\t        var textareaWrapper = $('<div class=\"edit\" style=\"display:none\">');\n\t        var saveBtn = $('<button>Enregistrer</button>');\n\t        saveBtn.bind('click', saveComment);\n\t        var cancelBtn = $('<button>Annuler</button>');\n\t        cancelBtn.bind('click', cancelCommentEdit);\n\t        textareaWrapper.append(textarea);\n\t        textareaWrapper.append(saveBtn);\n\t        textareaWrapper.append(cancelBtn);\n\t        child.append(textareaWrapper);\n\t    }\n\t    commentList.append(child);\n\t}\n\t\n\tfunction handleCommentClick(e) {\n\t    var comment = $(e.target).closest('.comment-list-item');\n\t    selectComment(comment.attr('uuid'));\n\t}\n\t\n\tfunction saveComment(e) {\n\t    e.preventDefault();\n\t    var button = $(e.target);\n\t    var comment = button.closest('.comment-list-item');\n\t    var uuid = comment.attr('uuid');\n\t    var text = comment.find('textarea').val();\n\t    var documentId = $('#pdf-data').data('uuid');\n\t    _PDFJSAnnotate2.default.getStoreAdapter().updateComment(documentId, uuid, text).then(function (comment) {\n\t        cancelCommentEdit(e);\n\t    });\n\t}\n\t\n\tfunction cancelCommentEdit(e) {\n\t    e.preventDefault();\n\t    var button = $(e.target);\n\t    var comment = button.closest('.comment-list-item');\n\t    var view = comment.find('.view');\n\t    var edit = comment.find('.edit');\n\t    edit.hide();\n\t    view.show();\n\t}\n\t\n\t// replace comment text by textarea to edit the comment\n\tfunction handleEditClick(e) {\n\t    e.preventDefault();\n\t    var button = $(e.target);\n\t    var comment = button.closest('.comment-list-item');\n\t    var view = comment.find('.view');\n\t    var edit = comment.find('.edit');\n\t    edit.show();\n\t    edit.find('textarea').width(view.width() - 10).height(view.height() + 20);\n\t    view.hide();\n\t}\n\t\n\tfunction scrollToView(element) {\n\t    var offset = element.offset().top;\n\t    if (!element.is(\":visible\")) {\n\t        element.css({ \"visibility\": \"hidden\" }).show();\n\t        var offset = element.offset().top;\n\t        element.css({ \"visibility\": \"\", \"display\": \"\" });\n\t    }\n\t\n\t    var visible_area_start = $(window).scrollTop();\n\t    var visible_area_end = visible_area_start + window.innerHeight;\n\t\n\t    if (offset < visible_area_start || offset > visible_area_end) {\n\t        // Not in view so scroll to it\n\t        if (element.hasClass('comment-list-item')) {\n\t            $('.comment-list-container').animate({ scrollTop: offset - window.innerHeight / 3 }, 300);\n\t        } else {\n\t            $('#content-wrapper').animate({ scrollTop: offset - window.innerHeight / 3 }, 300);\n\t        }\n\t        return false;\n\t    }\n\t    return true;\n\t}\n\t\n\tfunction selectComment(uuid) {\n\t    var comment = $(\".comment-list-item[uuid=\" + uuid + \"]\");\n\t    $('.comment-list-item').removeClass('selected');\n\t    comment.addClass('selected');\n\t    var annotation = $(\"[data-pdf-annotate-id=\" + uuid + \"]\")[0];\n\t    (0, _edit.createEditOverlay)(annotation);\n\t    scrollToView($(annotation));\n\t    scrollToView(comment);\n\t}\n\t\n\t// function handleAnnotationClick(target) {\n\t//   if (supportsComments(target)) {\n\t//     let documentId = target.parentNode.getAttribute('data-pdf-annotate-document');\n\t//     let annotationId = target.getAttribute('data-pdf-annotate-id');\n\t//\n\t//     PDFJSAnnotate.getStoreAdapter().getComments(documentId, annotationId).then((comments) => {\n\t//       commentList.innerHTML = '';\n\t//       commentForm.style.display = '';\n\t//       commentText.focus();\n\t//\n\t//       commentForm.onsubmit = function () {\n\t//         PDFJSAnnotate.getStoreAdapter().addComment(documentId, annotationId, commentText.value.trim())\n\t//           .then(insertComment)\n\t//           .then(() => {\n\t//             commentText.value = '';\n\t//             commentText.focus();\n\t//           });\n\t//\n\t//         return false;\n\t//       };\n\t//\n\t//       comments.forEach(insertComment);\n\t//     });\n\t//   }\n\t// }\n\t//\n\t// function handleAnnotationBlur(target) {\n\t//   if (supportsComments(target)) {\n\t//     commentList.innerHTML = '';\n\t//     commentForm.style.display = 'none';\n\t//     commentForm.onsubmit = null;\n\t//\n\t//     insertComment({content: 'No comments'});\n\t//   }\n\t// }\n\t\n\t\n\t// UI.addEventListener('annotation:click', handleAnnotationClick);\n\t// UI.addEventListener('annotation:blur', handleAnnotationBlur);\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function() {\n\t  if (typeof twttr === \"undefined\" || twttr === null) {\n\t    var twttr = {};\n\t  }\n\t\n\t  twttr.txt = {};\n\t  twttr.txt.regexen = {};\n\t\n\t  var HTML_ENTITIES = {\n\t    '&': '&amp;',\n\t    '>': '&gt;',\n\t    '<': '&lt;',\n\t    '\"': '&quot;',\n\t    \"'\": '&#39;'\n\t  };\n\t\n\t  // HTML escaping\n\t  twttr.txt.htmlEscape = function(text) {\n\t    return text && text.replace(/[&\"'><]/g, function(character) {\n\t      return HTML_ENTITIES[character];\n\t    });\n\t  };\n\t\n\t  // Builds a RegExp\n\t  function regexSupplant(regex, flags) {\n\t    flags = flags || \"\";\n\t    if (typeof regex !== \"string\") {\n\t      if (regex.global && flags.indexOf(\"g\") < 0) {\n\t        flags += \"g\";\n\t      }\n\t      if (regex.ignoreCase && flags.indexOf(\"i\") < 0) {\n\t        flags += \"i\";\n\t      }\n\t      if (regex.multiline && flags.indexOf(\"m\") < 0) {\n\t        flags += \"m\";\n\t      }\n\t\n\t      regex = regex.source;\n\t    }\n\t\n\t    return new RegExp(regex.replace(/#\\{(\\w+)\\}/g, function(match, name) {\n\t      var newRegex = twttr.txt.regexen[name] || \"\";\n\t      if (typeof newRegex !== \"string\") {\n\t        newRegex = newRegex.source;\n\t      }\n\t      return newRegex;\n\t    }), flags);\n\t  }\n\t\n\t  twttr.txt.regexSupplant = regexSupplant;\n\t\n\t  // simple string interpolation\n\t  function stringSupplant(str, values) {\n\t    return str.replace(/#\\{(\\w+)\\}/g, function(match, name) {\n\t      return values[name] || \"\";\n\t    });\n\t  }\n\t\n\t  twttr.txt.stringSupplant = stringSupplant;\n\t\n\t  twttr.txt.regexen.spaces_group = /\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000/;\n\t  twttr.txt.regexen.spaces = regexSupplant(/[#{spaces_group}]/);\n\t  twttr.txt.regexen.invalid_chars_group = /\\uFFFE\\uFEFF\\uFFFF\\u202A-\\u202E/;\n\t  twttr.txt.regexen.invalid_chars = regexSupplant(/[#{invalid_chars_group}]/);\n\t  twttr.txt.regexen.punct = /\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$/;\n\t  twttr.txt.regexen.rtl_chars = /[\\u0600-\\u06FF]|[\\u0750-\\u077F]|[\\u0590-\\u05FF]|[\\uFE70-\\uFEFF]/mg;\n\t  twttr.txt.regexen.non_bmp_code_pairs = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/mg;\n\t\n\t  twttr.txt.regexen.latinAccentChars = /\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF/;\n\t\n\t  // Generated from unicode_regex/unicode_regex_groups.scala, same as objective c's \\p{L}\\p{M}\n\t  twttr.txt.regexen.bmpLetterAndMarks = /A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07ca-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0-\\u08b2\\u08e4-\\u0963\\u0971-\\u0983\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc\\u09dd\\u09df-\\u09e3\\u09f0\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a70-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5c\\u0b5d\\u0b5f-\\u0b63\\u0b71\\u0b82\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0c00-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c58\\u0c59\\u0c60-\\u0c63\\u0c81-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0cf1\\u0cf2\\u0d01-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d7a-\\u0d7f\\u0d82\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0edc-\\u0edf\\u0f00\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u103f\\u1050-\\u108f\\u109a-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16f1-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772\\u1773\\u1780-\\u17d3\\u17d7\\u17dc\\u17dd\\u180b-\\u180d\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1aa7\\u1ab0-\\u1abe\\u1b00-\\u1b4b\\u1b6b-\\u1b73\\u1b80-\\u1baf\\u1bba-\\u1bf3\\u1c00-\\u1c37\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1cf8\\u1cf9\\u1d00-\\u1df5\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2183\\u2184\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005\\u3006\\u302a-\\u302f\\u3031-\\u3035\\u303b\\u303c\\u3041-\\u3096\\u3099\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua672\\ua674-\\ua67d\\ua67f-\\ua69d\\ua69f-\\ua6e5\\ua6f0\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0\\ua7b1\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8e0-\\ua8f7\\ua8fb\\ua90a-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf\\ua9e0-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64\\uab65\\uabc0-\\uabea\\uabec\\uabed\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf870-\\uf87f\\uf882\\uf884-\\uf89f\\uf8b8\\uf8c1-\\uf8d6\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2d\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc/;\n\t  twttr.txt.regexen.astralLetterAndMarks = /\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\uddfd\\ude80-\\ude9c\\udea0-\\uded0\\udee0\\udf00-\\udf1f\\udf30-\\udf40\\udf42-\\udf49\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf]|\\ud801[\\udc00-\\udc9d\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe\\uddbf\\ude00-\\ude03\\ude05\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude33\\ude38-\\ude3a\\ude3f\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee6\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48]|\\ud804[\\udc00-\\udc46\\udc7f-\\udcba\\udcd0-\\udce8\\udd00-\\udd34\\udd50-\\udd73\\udd76\\udd80-\\uddc4\\uddda\\ude00-\\ude11\\ude13-\\ude37\\udeb0-\\udeea\\udf01-\\udf03\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3c-\\udf44\\udf47\\udf48\\udf4b-\\udf4d\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc80-\\udcc5\\udcc7\\udd80-\\uddb5\\uddb8-\\uddc0\\ude00-\\ude40\\ude44\\ude80-\\udeb7]|\\ud806[\\udca0-\\udcdf\\udcff\\udec0-\\udef8]|\\ud808[\\udc00-\\udf98]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udef0-\\udef4\\udf00-\\udf36\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\udf00-\\udf44\\udf50-\\udf7e\\udf8f-\\udf9f]|\\ud82c[\\udc00\\udc01]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9d\\udc9e]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud83a[\\udc00-\\udcc4\\udcd0-\\udcd6]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d]|\\ud87e[\\udc00-\\ude1d]|\\udb40[\\udd00-\\uddef]/;\n\t\n\t  // Generated from unicode_regex/unicode_regex_groups.scala, same as objective c's \\p{Nd}\n\t  twttr.txt.regexen.bmpNumerals = /0-9\\u0660-\\u0669\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0de6-\\u0def\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\ua9f0-\\ua9f9\\uaa50-\\uaa59\\uabf0-\\uabf9\\uff10-\\uff19/;\n\t  twttr.txt.regexen.astralNumerals = /\\ud801[\\udca0-\\udca9]|\\ud804[\\udc66-\\udc6f\\udcf0-\\udcf9\\udd36-\\udd3f\\uddd0-\\uddd9\\udef0-\\udef9]|\\ud805[\\udcd0-\\udcd9\\ude50-\\ude59\\udec0-\\udec9]|\\ud806[\\udce0-\\udce9]|\\ud81a[\\ude60-\\ude69\\udf50-\\udf59]|\\ud835[\\udfce-\\udfff]/;\n\t\n\t  twttr.txt.regexen.hashtagSpecialChars = /_\\u200c\\u200d\\ua67e\\u05be\\u05f3\\u05f4\\uff5e\\u301c\\u309b\\u309c\\u30a0\\u30fb\\u3003\\u0f0b\\u0f0c\\xb7/;\n\t\n\t  // A hashtag must contain at least one unicode letter or mark, as well as numbers, underscores, and select special characters.\n\t  twttr.txt.regexen.hashSigns = /[##]/;\n\t  twttr.txt.regexen.hashtagAlpha = regexSupplant(/(?:[#{bmpLetterAndMarks}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}))/);\n\t  twttr.txt.regexen.hashtagAlphaNumeric = regexSupplant(/(?:[#{bmpLetterAndMarks}#{bmpNumerals}#{hashtagSpecialChars}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}|#{astralNumerals}))/);\n\t  twttr.txt.regexen.endHashtagMatch = regexSupplant(/^(?:#{hashSigns}|:\\/\\/)/);\n\t  twttr.txt.regexen.codePoint = /(?:[^\\uD800-\\uDFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/;\n\t  twttr.txt.regexen.hashtagBoundary = regexSupplant(/(?:^|\\uFE0E|\\uFE0F|$|(?!#{hashtagAlphaNumeric}|&)#{codePoint})/);\n\t  twttr.txt.regexen.validHashtag = regexSupplant(/(#{hashtagBoundary})(#{hashSigns})(?!\\uFE0F|\\u20E3)(#{hashtagAlphaNumeric}*#{hashtagAlpha}#{hashtagAlphaNumeric}*)/gi);\n\t\n\t  // Mention related regex collection\n\t  twttr.txt.regexen.validMentionPrecedingChars = /(?:^|[^a-zA-Z0-9_!#$%&*@@]|(?:^|[^a-zA-Z0-9_+~.-])(?:rt|RT|rT|Rt):?)/;\n\t  twttr.txt.regexen.atSigns = /[@@]/;\n\t  twttr.txt.regexen.validMentionOrList = regexSupplant(\n\t    '(#{validMentionPrecedingChars})' +  // $1: Preceding character\n\t    '(#{atSigns})' +                     // $2: At mark\n\t    '([a-zA-Z0-9_]{1,20})' +             // $3: Screen name\n\t    '(\\/[a-zA-Z][a-zA-Z0-9_\\-]{0,24})?'  // $4: List (optional)\n\t  , 'g');\n\t  twttr.txt.regexen.validReply = regexSupplant(/^(?:#{spaces})*#{atSigns}([a-zA-Z0-9_]{1,20})/);\n\t  twttr.txt.regexen.endMentionMatch = regexSupplant(/^(?:#{atSigns}|[#{latinAccentChars}]|:\\/\\/)/);\n\t\n\t  // URL related regex collection\n\t  twttr.txt.regexen.validUrlPrecedingChars = regexSupplant(/(?:[^A-Za-z0-9@@$###{invalid_chars_group}]|^)/);\n\t  twttr.txt.regexen.invalidUrlWithoutProtocolPrecedingChars = /[-_.\\/]$/;\n\t  twttr.txt.regexen.invalidDomainChars = stringSupplant(\"#{punct}#{spaces_group}#{invalid_chars_group}\", twttr.txt.regexen);\n\t  twttr.txt.regexen.validDomainChars = regexSupplant(/[^#{invalidDomainChars}]/);\n\t  twttr.txt.regexen.validSubdomain = regexSupplant(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\\.)/);\n\t  twttr.txt.regexen.validDomainName = regexSupplant(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\\.)/);\n\t  twttr.txt.regexen.validGTLD = regexSupplant(RegExp(\n\t'(?:(?:' +\n\t    '삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|' +\n\t    '政务|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|' +\n\t    'ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|' +\n\t    'بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|' +\n\t    'zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|' +\n\t    'yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|' +\n\t    'wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|' +\n\t    'website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|' +\n\t    'wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|' +\n\t    'vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|' +\n\t    'vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|' +\n\t    'university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|' +\n\t    'travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|' +\n\t    'toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|' +\n\t    'tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|' +\n\t    'tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|' +\n\t    'swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|' +\n\t    'stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|' +\n\t    'stada|srt|srl|spreadbetting|spot|spiegel|space|soy|sony|song|solutions|solar|sohu|software|' +\n\t    'softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|' +\n\t    'showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|' +\n\t    'sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|' +\n\t    'science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|' +\n\t    'sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|' +\n\t    'saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|' +\n\t    'rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|' +\n\t    'repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|' +\n\t    'realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|' +\n\t    'protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|' +\n\t    'pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|' +\n\t    'pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|' +\n\t    'pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|' +\n\t    'pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|' +\n\t    'onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|' +\n\t    'obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|' +\n\t    'nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|' +\n\t    'net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|' +\n\t    'msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|' +\n\t    'monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|' +\n\t    'miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|' +\n\t    'mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|' +\n\t    'makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|' +\n\t    'lotte|london|lol|loft|locus|locker|loans|loan|lixil|living|live|lipsy|link|linde|lincoln|limo|' +\n\t    'limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|' +\n\t    'lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|' +\n\t    'lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|' +\n\t    'komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|' +\n\t    'kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|' +\n\t    'jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|' +\n\t    'investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|' +\n\t    'industries|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|' +\n\t    'hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|' +\n\t    'honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|' +\n\t    'hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|' +\n\t    'hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|' +\n\t    'gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|' +\n\t    'globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|' +\n\t    'garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|' +\n\t    'ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|' +\n\t    'football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|' +\n\t    'fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|' +\n\t    'ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|' +\n\t    'extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|' +\n\t    'estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|' +\n\t    'email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|' +\n\t    'download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|' +\n\t    'direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|' +\n\t    'delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|' +\n\t    'cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|courses|' +\n\t    'coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|' +\n\t    'construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|' +\n\t    'college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|' +\n\t    'cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|' +\n\t    'chintai|cheap|chat|chase|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|' +\n\t    'catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|' +\n\t    'capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|' +\n\t    'bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|' +\n\t    'bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|' +\n\t    'boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|' +\n\t    'black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|' +\n\t    'beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|' +\n\t    'barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|' +\n\t    'autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|' +\n\t    'art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|' +\n\t    'amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|' +\n\t    'alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|' +\n\t    'afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|' +\n\t    'academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion' +\n\t')(?=[^0-9a-zA-Z@]|$))'));\n\t  twttr.txt.regexen.validCCTLD = regexSupplant(RegExp(\n\t'(?:(?:' +\n\t    '한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|' +\n\t    'ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|' +\n\t    'بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ελ|' +\n\t    'zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|' +\n\t    'tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|' +\n\t    're|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|' +\n\t    'mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|' +\n\t    'ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|' +\n\t    'gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|' +\n\t    'do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|' +\n\t    'bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac' +\n\t')(?=[^0-9a-zA-Z@]|$))'));\n\t  twttr.txt.regexen.validPunycode = /(?:xn--[0-9a-z]+)/;\n\t  twttr.txt.regexen.validSpecialCCTLD = /(?:(?:co|tv)(?=[^0-9a-zA-Z@]|$))/;\n\t  twttr.txt.regexen.validDomain = regexSupplant(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/);\n\t  twttr.txt.regexen.validAsciiDomain = regexSupplant(/(?:(?:[\\-a-z0-9#{latinAccentChars}]+)\\.)+(?:#{validGTLD}|#{validCCTLD}|#{validPunycode})/gi);\n\t  twttr.txt.regexen.invalidShortDomain = regexSupplant(/^#{validDomainName}#{validCCTLD}$/i);\n\t  twttr.txt.regexen.validSpecialShortDomain = regexSupplant(/^#{validDomainName}#{validSpecialCCTLD}$/i);\n\t  twttr.txt.regexen.validPortNumber = /[0-9]+/;\n\t  twttr.txt.regexen.cyrillicLettersAndMarks = /\\u0400-\\u04FF/;\n\t  twttr.txt.regexen.validGeneralUrlPathChars = regexSupplant(/[a-z#{cyrillicLettersAndMarks}0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-_~@\\|&#{latinAccentChars}]/i);\n\t  // Allow URL paths to contain up to two nested levels of balanced parens\n\t  //  1. Used in Wikipedia URLs like /Primer_(film)\n\t  //  2. Used in IIS sessions like /S(dfd346)/\n\t  //  3. Used in Rdio URLs like /track/We_Up_(Album_Version_(Edited))/\n\t  twttr.txt.regexen.validUrlBalancedParens = regexSupplant(\n\t    '\\\\('                                   +\n\t      '(?:'                                 +\n\t        '#{validGeneralUrlPathChars}+'      +\n\t        '|'                                 +\n\t        // allow one nested level of balanced parentheses\n\t        '(?:'                               +\n\t          '#{validGeneralUrlPathChars}*'    +\n\t          '\\\\('                             +\n\t            '#{validGeneralUrlPathChars}+'  +\n\t          '\\\\)'                             +\n\t          '#{validGeneralUrlPathChars}*'    +\n\t        ')'                                 +\n\t      ')'                                   +\n\t    '\\\\)'\n\t  , 'i');\n\t  // Valid end-of-path chracters (so /foo. does not gobble the period).\n\t  // 1. Allow =&# for empty URL parameters and other URL-join artifacts\n\t  twttr.txt.regexen.validUrlPathEndingChars = regexSupplant(/[\\+\\-a-z#{cyrillicLettersAndMarks}0-9=_#\\/#{latinAccentChars}]|(?:#{validUrlBalancedParens})/i);\n\t  // Allow @ in a url, but only in the middle. Catch things like http://example.com/@user/\n\t  twttr.txt.regexen.validUrlPath = regexSupplant('(?:' +\n\t    '(?:' +\n\t      '#{validGeneralUrlPathChars}*' +\n\t        '(?:#{validUrlBalancedParens}#{validGeneralUrlPathChars}*)*' +\n\t        '#{validUrlPathEndingChars}'+\n\t      ')|(?:@#{validGeneralUrlPathChars}+\\/)'+\n\t    ')', 'i');\n\t\n\t  twttr.txt.regexen.validUrlQueryChars = /[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]/i;\n\t  twttr.txt.regexen.validUrlQueryEndingChars = /[a-z0-9_&=#\\/]/i;\n\t  twttr.txt.regexen.extractUrl = regexSupplant(\n\t    '('                                                            + // $1 total match\n\t      '(#{validUrlPrecedingChars})'                                + // $2 Preceeding chracter\n\t      '('                                                          + // $3 URL\n\t        '(https?:\\\\/\\\\/)?'                                         + // $4 Protocol (optional)\n\t        '(#{validDomain})'                                         + // $5 Domain(s)\n\t        '(?::(#{validPortNumber}))?'                               + // $6 Port number (optional)\n\t        '(\\\\/#{validUrlPath}*)?'                                   + // $7 URL Path\n\t        '(\\\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?'  + // $8 Query String\n\t      ')'                                                          +\n\t    ')'\n\t  , 'gi');\n\t\n\t  twttr.txt.regexen.validTcoUrl = /^https?:\\/\\/t\\.co\\/[a-z0-9]+/i;\n\t  twttr.txt.regexen.urlHasProtocol = /^https?:\\/\\//i;\n\t  twttr.txt.regexen.urlHasHttps = /^https:\\/\\//i;\n\t\n\t  // cashtag related regex\n\t  twttr.txt.regexen.cashtag = /[a-z]{1,6}(?:[._][a-z]{1,2})?/i;\n\t  twttr.txt.regexen.validCashtag = regexSupplant('(^|#{spaces})(\\\\$)(#{cashtag})(?=$|\\\\s|[#{punct}])', 'gi');\n\t\n\t  // These URL validation pattern strings are based on the ABNF from RFC 3986\n\t  twttr.txt.regexen.validateUrlUnreserved = /[a-z\\u0400-\\u04FF0-9\\-._~]/i;\n\t  twttr.txt.regexen.validateUrlPctEncoded = /(?:%[0-9a-f]{2})/i;\n\t  twttr.txt.regexen.validateUrlSubDelims = /[!$&'()*+,;=]/i;\n\t  twttr.txt.regexen.validateUrlPchar = regexSupplant('(?:' +\n\t    '#{validateUrlUnreserved}|' +\n\t    '#{validateUrlPctEncoded}|' +\n\t    '#{validateUrlSubDelims}|' +\n\t    '[:|@]' +\n\t  ')', 'i');\n\t\n\t  twttr.txt.regexen.validateUrlScheme = /(?:[a-z][a-z0-9+\\-.]*)/i;\n\t  twttr.txt.regexen.validateUrlUserinfo = regexSupplant('(?:' +\n\t    '#{validateUrlUnreserved}|' +\n\t    '#{validateUrlPctEncoded}|' +\n\t    '#{validateUrlSubDelims}|' +\n\t    ':' +\n\t  ')*', 'i');\n\t\n\t  twttr.txt.regexen.validateUrlDecOctet = /(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))/i;\n\t  twttr.txt.regexen.validateUrlIpv4 = regexSupplant(/(?:#{validateUrlDecOctet}(?:\\.#{validateUrlDecOctet}){3})/i);\n\t\n\t  // Punting on real IPv6 validation for now\n\t  twttr.txt.regexen.validateUrlIpv6 = /(?:\\[[a-f0-9:\\.]+\\])/i;\n\t\n\t  // Also punting on IPvFuture for now\n\t  twttr.txt.regexen.validateUrlIp = regexSupplant('(?:' +\n\t    '#{validateUrlIpv4}|' +\n\t    '#{validateUrlIpv6}' +\n\t  ')', 'i');\n\t\n\t  // This is more strict than the rfc specifies\n\t  twttr.txt.regexen.validateUrlSubDomainSegment = /(?:[a-z0-9](?:[a-z0-9_\\-]*[a-z0-9])?)/i;\n\t  twttr.txt.regexen.validateUrlDomainSegment = /(?:[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?)/i;\n\t  twttr.txt.regexen.validateUrlDomainTld = /(?:[a-z](?:[a-z0-9\\-]*[a-z0-9])?)/i;\n\t  twttr.txt.regexen.validateUrlDomain = regexSupplant(/(?:(?:#{validateUrlSubDomainSegment}\\.)*(?:#{validateUrlDomainSegment}\\.)#{validateUrlDomainTld})/i);\n\t\n\t  twttr.txt.regexen.validateUrlHost = regexSupplant('(?:' +\n\t    '#{validateUrlIp}|' +\n\t    '#{validateUrlDomain}' +\n\t  ')', 'i');\n\t\n\t  // Unencoded internationalized domains - this doesn't check for invalid UTF-8 sequences\n\t  twttr.txt.regexen.validateUrlUnicodeSubDomainSegment = /(?:(?:[a-z0-9]|[^\\u0000-\\u007f])(?:(?:[a-z0-9_\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n\t  twttr.txt.regexen.validateUrlUnicodeDomainSegment = /(?:(?:[a-z0-9]|[^\\u0000-\\u007f])(?:(?:[a-z0-9\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n\t  twttr.txt.regexen.validateUrlUnicodeDomainTld = /(?:(?:[a-z]|[^\\u0000-\\u007f])(?:(?:[a-z0-9\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n\t  twttr.txt.regexen.validateUrlUnicodeDomain = regexSupplant(/(?:(?:#{validateUrlUnicodeSubDomainSegment}\\.)*(?:#{validateUrlUnicodeDomainSegment}\\.)#{validateUrlUnicodeDomainTld})/i);\n\t\n\t  twttr.txt.regexen.validateUrlUnicodeHost = regexSupplant('(?:' +\n\t    '#{validateUrlIp}|' +\n\t    '#{validateUrlUnicodeDomain}' +\n\t  ')', 'i');\n\t\n\t  twttr.txt.regexen.validateUrlPort = /[0-9]{1,5}/;\n\t\n\t  twttr.txt.regexen.validateUrlUnicodeAuthority = regexSupplant(\n\t    '(?:(#{validateUrlUserinfo})@)?'  + // $1 userinfo\n\t    '(#{validateUrlUnicodeHost})'     + // $2 host\n\t    '(?::(#{validateUrlPort}))?'        //$3 port\n\t  , \"i\");\n\t\n\t  twttr.txt.regexen.validateUrlAuthority = regexSupplant(\n\t    '(?:(#{validateUrlUserinfo})@)?' + // $1 userinfo\n\t    '(#{validateUrlHost})'           + // $2 host\n\t    '(?::(#{validateUrlPort}))?'       // $3 port\n\t  , \"i\");\n\t\n\t  twttr.txt.regexen.validateUrlPath = regexSupplant(/(\\/#{validateUrlPchar}*)*/i);\n\t  twttr.txt.regexen.validateUrlQuery = regexSupplant(/(#{validateUrlPchar}|\\/|\\?)*/i);\n\t  twttr.txt.regexen.validateUrlFragment = regexSupplant(/(#{validateUrlPchar}|\\/|\\?)*/i);\n\t\n\t  // Modified version of RFC 3986 Appendix B\n\t  twttr.txt.regexen.validateUrlUnencoded = regexSupplant(\n\t    '^'                               + // Full URL\n\t    '(?:'                             +\n\t      '([^:/?#]+):\\\\/\\\\/'             + // $1 Scheme\n\t    ')?'                              +\n\t    '([^/?#]*)'                       + // $2 Authority\n\t    '([^?#]*)'                        + // $3 Path\n\t    '(?:'                             +\n\t      '\\\\?([^#]*)'                    + // $4 Query\n\t    ')?'                              +\n\t    '(?:'                             +\n\t      '#(.*)'                         + // $5 Fragment\n\t    ')?$'\n\t  , \"i\");\n\t\n\t\n\t  // Default CSS class for auto-linked lists (along with the url class)\n\t  var DEFAULT_LIST_CLASS = \"tweet-url list-slug\";\n\t  // Default CSS class for auto-linked usernames (along with the url class)\n\t  var DEFAULT_USERNAME_CLASS = \"tweet-url username\";\n\t  // Default CSS class for auto-linked hashtags (along with the url class)\n\t  var DEFAULT_HASHTAG_CLASS = \"tweet-url hashtag\";\n\t  // Default CSS class for auto-linked cashtags (along with the url class)\n\t  var DEFAULT_CASHTAG_CLASS = \"tweet-url cashtag\";\n\t  // Options which should not be passed as HTML attributes\n\t  var OPTIONS_NOT_ATTRIBUTES = {'urlClass':true, 'listClass':true, 'usernameClass':true, 'hashtagClass':true, 'cashtagClass':true,\n\t                            'usernameUrlBase':true, 'listUrlBase':true, 'hashtagUrlBase':true, 'cashtagUrlBase':true,\n\t                            'usernameUrlBlock':true, 'listUrlBlock':true, 'hashtagUrlBlock':true, 'linkUrlBlock':true,\n\t                            'usernameIncludeSymbol':true, 'suppressLists':true, 'suppressNoFollow':true, 'targetBlank':true,\n\t                            'suppressDataScreenName':true, 'urlEntities':true, 'symbolTag':true, 'textWithSymbolTag':true, 'urlTarget':true,\n\t                            'invisibleTagAttrs':true, 'linkAttributeBlock':true, 'linkTextBlock': true, 'htmlEscapeNonEntities': true\n\t                            };\n\t\n\t  var BOOLEAN_ATTRIBUTES = {'disabled':true, 'readonly':true, 'multiple':true, 'checked':true};\n\t\n\t  // Simple object cloning function for simple objects\n\t  function clone(o) {\n\t    var r = {};\n\t    for (var k in o) {\n\t      if (o.hasOwnProperty(k)) {\n\t        r[k] = o[k];\n\t      }\n\t    }\n\t\n\t    return r;\n\t  }\n\t\n\t  twttr.txt.tagAttrs = function(attributes) {\n\t    var htmlAttrs = \"\";\n\t    for (var k in attributes) {\n\t      var v = attributes[k];\n\t      if (BOOLEAN_ATTRIBUTES[k]) {\n\t        v = v ? k : null;\n\t      }\n\t      if (v == null) continue;\n\t      htmlAttrs += \" \" + twttr.txt.htmlEscape(k) + \"=\\\"\" + twttr.txt.htmlEscape(v.toString()) + \"\\\"\";\n\t    }\n\t    return htmlAttrs;\n\t  };\n\t\n\t  twttr.txt.linkToText = function(entity, text, attributes, options) {\n\t    if (!options.suppressNoFollow) {\n\t      attributes.rel = \"nofollow\";\n\t    }\n\t    // if linkAttributeBlock is specified, call it to modify the attributes\n\t    if (options.linkAttributeBlock) {\n\t      options.linkAttributeBlock(entity, attributes);\n\t    }\n\t    // if linkTextBlock is specified, call it to get a new/modified link text\n\t    if (options.linkTextBlock) {\n\t      text = options.linkTextBlock(entity, text);\n\t    }\n\t    var d = {\n\t      text: text,\n\t      attr: twttr.txt.tagAttrs(attributes)\n\t    };\n\t    return stringSupplant(\"<a#{attr}>#{text}</a>\", d);\n\t  };\n\t\n\t  twttr.txt.linkToTextWithSymbol = function(entity, symbol, text, attributes, options) {\n\t    var taggedSymbol = options.symbolTag ? \"<\" + options.symbolTag + \">\" + symbol + \"</\"+ options.symbolTag + \">\" : symbol;\n\t    text = twttr.txt.htmlEscape(text);\n\t    var taggedText = options.textWithSymbolTag ? \"<\" + options.textWithSymbolTag + \">\" + text + \"</\"+ options.textWithSymbolTag + \">\" : text;\n\t\n\t    if (options.usernameIncludeSymbol || !symbol.match(twttr.txt.regexen.atSigns)) {\n\t      return twttr.txt.linkToText(entity, taggedSymbol + taggedText, attributes, options);\n\t    } else {\n\t      return taggedSymbol + twttr.txt.linkToText(entity, taggedText, attributes, options);\n\t    }\n\t  };\n\t\n\t  twttr.txt.linkToHashtag = function(entity, text, options) {\n\t    var hash = text.substring(entity.indices[0], entity.indices[0] + 1);\n\t    var hashtag = twttr.txt.htmlEscape(entity.hashtag);\n\t    var attrs = clone(options.htmlAttrs || {});\n\t    attrs.href = options.hashtagUrlBase + hashtag;\n\t    attrs.title = \"#\" + hashtag;\n\t    attrs[\"class\"] = options.hashtagClass;\n\t    if (hashtag.charAt(0).match(twttr.txt.regexen.rtl_chars)){\n\t      attrs[\"class\"] += \" rtl\";\n\t    }\n\t    if (options.targetBlank) {\n\t      attrs.target = '_blank';\n\t    }\n\t\n\t    return twttr.txt.linkToTextWithSymbol(entity, hash, hashtag, attrs, options);\n\t  };\n\t\n\t  twttr.txt.linkToCashtag = function(entity, text, options) {\n\t    var cashtag = twttr.txt.htmlEscape(entity.cashtag);\n\t    var attrs = clone(options.htmlAttrs || {});\n\t    attrs.href = options.cashtagUrlBase + cashtag;\n\t    attrs.title = \"$\" + cashtag;\n\t    attrs[\"class\"] =  options.cashtagClass;\n\t    if (options.targetBlank) {\n\t      attrs.target = '_blank';\n\t    }\n\t\n\t    return twttr.txt.linkToTextWithSymbol(entity, \"$\", cashtag, attrs, options);\n\t  };\n\t\n\t  twttr.txt.linkToMentionAndList = function(entity, text, options) {\n\t    var at = text.substring(entity.indices[0], entity.indices[0] + 1);\n\t    var user = twttr.txt.htmlEscape(entity.screenName);\n\t    var slashListname = twttr.txt.htmlEscape(entity.listSlug);\n\t    var isList = entity.listSlug && !options.suppressLists;\n\t    var attrs = clone(options.htmlAttrs || {});\n\t    attrs[\"class\"] = (isList ? options.listClass : options.usernameClass);\n\t    attrs.href = isList ? options.listUrlBase + user + slashListname : options.usernameUrlBase + user;\n\t    if (!isList && !options.suppressDataScreenName) {\n\t      attrs['data-screen-name'] = user;\n\t    }\n\t    if (options.targetBlank) {\n\t      attrs.target = '_blank';\n\t    }\n\t\n\t    return twttr.txt.linkToTextWithSymbol(entity, at, isList ? user + slashListname : user, attrs, options);\n\t  };\n\t\n\t  twttr.txt.linkToUrl = function(entity, text, options) {\n\t    var url = entity.url;\n\t    var displayUrl = url;\n\t    var linkText = twttr.txt.htmlEscape(displayUrl);\n\t\n\t    // If the caller passed a urlEntities object (provided by a Twitter API\n\t    // response with include_entities=true), we use that to render the display_url\n\t    // for each URL instead of it's underlying t.co URL.\n\t    var urlEntity = (options.urlEntities && options.urlEntities[url]) || entity;\n\t    if (urlEntity.display_url) {\n\t      linkText = twttr.txt.linkTextWithEntity(urlEntity, options);\n\t    }\n\t\n\t    var attrs = clone(options.htmlAttrs || {});\n\t\n\t    if (!url.match(twttr.txt.regexen.urlHasProtocol)) {\n\t      url = \"http://\" + url;\n\t    }\n\t    attrs.href = url;\n\t\n\t    if (options.targetBlank) {\n\t      attrs.target = '_blank';\n\t    }\n\t\n\t    // set class only if urlClass is specified.\n\t    if (options.urlClass) {\n\t      attrs[\"class\"] = options.urlClass;\n\t    }\n\t\n\t    // set target only if urlTarget is specified.\n\t    if (options.urlTarget) {\n\t      attrs.target = options.urlTarget;\n\t    }\n\t\n\t    if (!options.title && urlEntity.display_url) {\n\t      attrs.title = urlEntity.expanded_url;\n\t    }\n\t\n\t    return twttr.txt.linkToText(entity, linkText, attrs, options);\n\t  };\n\t\n\t  twttr.txt.linkTextWithEntity = function (entity, options) {\n\t    var displayUrl = entity.display_url;\n\t    var expandedUrl = entity.expanded_url;\n\t\n\t    // Goal: If a user copies and pastes a tweet containing t.co'ed link, the resulting paste\n\t    // should contain the full original URL (expanded_url), not the display URL.\n\t    //\n\t    // Method: Whenever possible, we actually emit HTML that contains expanded_url, and use\n\t    // font-size:0 to hide those parts that should not be displayed (because they are not part of display_url).\n\t    // Elements with font-size:0 get copied even though they are not visible.\n\t    // Note that display:none doesn't work here. Elements with display:none don't get copied.\n\t    //\n\t    // Additionally, we want to *display* ellipses, but we don't want them copied.  To make this happen we\n\t    // wrap the ellipses in a tco-ellipsis class and provide an onCopy handler that sets display:none on\n\t    // everything with the tco-ellipsis class.\n\t    //\n\t    // Exception: pic.twitter.com images, for which expandedUrl = \"https://twitter.com/#!/username/status/1234/photo/1\n\t    // For those URLs, display_url is not a substring of expanded_url, so we don't do anything special to render the elided parts.\n\t    // For a pic.twitter.com URL, the only elided part will be the \"https://\", so this is fine.\n\t\n\t    var displayUrlSansEllipses = displayUrl.replace(/…/g, \"\"); // We have to disregard ellipses for matching\n\t    // Note: we currently only support eliding parts of the URL at the beginning or the end.\n\t    // Eventually we may want to elide parts of the URL in the *middle*.  If so, this code will\n\t    // become more complicated.  We will probably want to create a regexp out of display URL,\n\t    // replacing every ellipsis with a \".*\".\n\t    if (expandedUrl.indexOf(displayUrlSansEllipses) != -1) {\n\t      var displayUrlIndex = expandedUrl.indexOf(displayUrlSansEllipses);\n\t      var v = {\n\t        displayUrlSansEllipses: displayUrlSansEllipses,\n\t        // Portion of expandedUrl that precedes the displayUrl substring\n\t        beforeDisplayUrl: expandedUrl.substr(0, displayUrlIndex),\n\t        // Portion of expandedUrl that comes after displayUrl\n\t        afterDisplayUrl: expandedUrl.substr(displayUrlIndex + displayUrlSansEllipses.length),\n\t        precedingEllipsis: displayUrl.match(/^…/) ? \"…\" : \"\",\n\t        followingEllipsis: displayUrl.match(/…$/) ? \"…\" : \"\"\n\t      };\n\t      for (var k in v) {\n\t        if (v.hasOwnProperty(k)) {\n\t          v[k] = twttr.txt.htmlEscape(v[k]);\n\t        }\n\t      }\n\t      // As an example: The user tweets \"hi http://longdomainname.com/foo\"\n\t      // This gets shortened to \"hi http://t.co/xyzabc\", with display_url = \"…nname.com/foo\"\n\t      // This will get rendered as:\n\t      // <span class='tco-ellipsis'> <!-- This stuff should get displayed but not copied -->\n\t      //   …\n\t      //   <!-- There's a chance the onCopy event handler might not fire. In case that happens,\n\t      //        we include an &nbsp; here so that the … doesn't bump up against the URL and ruin it.\n\t      //        The &nbsp; is inside the tco-ellipsis span so that when the onCopy handler *does*\n\t      //        fire, it doesn't get copied.  Otherwise the copied text would have two spaces in a row,\n\t      //        e.g. \"hi  http://longdomainname.com/foo\".\n\t      //   <span style='font-size:0'>&nbsp;</span>\n\t      // </span>\n\t      // <span style='font-size:0'>  <!-- This stuff should get copied but not displayed -->\n\t      //   http://longdomai\n\t      // </span>\n\t      // <span class='js-display-url'> <!-- This stuff should get displayed *and* copied -->\n\t      //   nname.com/foo\n\t      // </span>\n\t      // <span class='tco-ellipsis'> <!-- This stuff should get displayed but not copied -->\n\t      //   <span style='font-size:0'>&nbsp;</span>\n\t      //   …\n\t      // </span>\n\t      v['invisible'] = options.invisibleTagAttrs;\n\t      return stringSupplant(\"<span class='tco-ellipsis'>#{precedingEllipsis}<span #{invisible}>&nbsp;</span></span><span #{invisible}>#{beforeDisplayUrl}</span><span class='js-display-url'>#{displayUrlSansEllipses}</span><span #{invisible}>#{afterDisplayUrl}</span><span class='tco-ellipsis'><span #{invisible}>&nbsp;</span>#{followingEllipsis}</span>\", v);\n\t    }\n\t    return displayUrl;\n\t  };\n\t\n\t  twttr.txt.autoLinkEntities = function(text, entities, options) {\n\t    options = clone(options || {});\n\t\n\t    options.hashtagClass = options.hashtagClass || DEFAULT_HASHTAG_CLASS;\n\t    options.hashtagUrlBase = options.hashtagUrlBase || \"https://twitter.com/#!/search?q=%23\";\n\t    options.cashtagClass = options.cashtagClass || DEFAULT_CASHTAG_CLASS;\n\t    options.cashtagUrlBase = options.cashtagUrlBase || \"https://twitter.com/#!/search?q=%24\";\n\t    options.listClass = options.listClass || DEFAULT_LIST_CLASS;\n\t    options.usernameClass = options.usernameClass || DEFAULT_USERNAME_CLASS;\n\t    options.usernameUrlBase = options.usernameUrlBase || \"https://twitter.com/\";\n\t    options.listUrlBase = options.listUrlBase || \"https://twitter.com/\";\n\t    options.htmlAttrs = twttr.txt.extractHtmlAttrsFromOptions(options);\n\t    options.invisibleTagAttrs = options.invisibleTagAttrs || \"style='position:absolute;left:-9999px;'\";\n\t\n\t    // remap url entities to hash\n\t    var urlEntities, i, len;\n\t    if(options.urlEntities) {\n\t      urlEntities = {};\n\t      for(i = 0, len = options.urlEntities.length; i < len; i++) {\n\t        urlEntities[options.urlEntities[i].url] = options.urlEntities[i];\n\t      }\n\t      options.urlEntities = urlEntities;\n\t    }\n\t\n\t    var result = \"\";\n\t    var beginIndex = 0;\n\t\n\t    // sort entities by start index\n\t    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n\t\n\t    var nonEntity = options.htmlEscapeNonEntities ? twttr.txt.htmlEscape : function(text) {\n\t      return text;\n\t    };\n\t\n\t    for (var i = 0; i < entities.length; i++) {\n\t      var entity = entities[i];\n\t      result += nonEntity(text.substring(beginIndex, entity.indices[0]));\n\t\n\t      if (entity.url) {\n\t        result += twttr.txt.linkToUrl(entity, text, options);\n\t      } else if (entity.hashtag) {\n\t        result += twttr.txt.linkToHashtag(entity, text, options);\n\t      } else if (entity.screenName) {\n\t        result += twttr.txt.linkToMentionAndList(entity, text, options);\n\t      } else if (entity.cashtag) {\n\t        result += twttr.txt.linkToCashtag(entity, text, options);\n\t      }\n\t      beginIndex = entity.indices[1];\n\t    }\n\t    result += nonEntity(text.substring(beginIndex, text.length));\n\t    return result;\n\t  };\n\t\n\t  twttr.txt.autoLinkWithJSON = function(text, json, options) {\n\t    // map JSON entity to twitter-text entity\n\t    if (json.user_mentions) {\n\t      for (var i = 0; i < json.user_mentions.length; i++) {\n\t        // this is a @mention\n\t        json.user_mentions[i].screenName = json.user_mentions[i].screen_name;\n\t      }\n\t    }\n\t\n\t    if (json.hashtags) {\n\t      for (var i = 0; i < json.hashtags.length; i++) {\n\t        // this is a #hashtag\n\t        json.hashtags[i].hashtag = json.hashtags[i].text;\n\t      }\n\t    }\n\t\n\t    if (json.symbols) {\n\t      for (var i = 0; i < json.symbols.length; i++) {\n\t        // this is a $CASH tag\n\t        json.symbols[i].cashtag = json.symbols[i].text;\n\t      }\n\t    }\n\t\n\t    // concatenate all entities\n\t    var entities = [];\n\t    for (var key in json) {\n\t      entities = entities.concat(json[key]);\n\t    }\n\t\n\t    // modify indices to UTF-16\n\t    twttr.txt.modifyIndicesFromUnicodeToUTF16(text, entities);\n\t\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.extractHtmlAttrsFromOptions = function(options) {\n\t    var htmlAttrs = {};\n\t    for (var k in options) {\n\t      var v = options[k];\n\t      if (OPTIONS_NOT_ATTRIBUTES[k]) continue;\n\t      if (BOOLEAN_ATTRIBUTES[k]) {\n\t        v = v ? k : null;\n\t      }\n\t      if (v == null) continue;\n\t      htmlAttrs[k] = v;\n\t    }\n\t    return htmlAttrs;\n\t  };\n\t\n\t  twttr.txt.autoLink = function(text, options) {\n\t    var entities = twttr.txt.extractEntitiesWithIndices(text, {extractUrlsWithoutProtocol: false});\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.autoLinkUsernamesOrLists = function(text, options) {\n\t    var entities = twttr.txt.extractMentionsOrListsWithIndices(text);\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.autoLinkHashtags = function(text, options) {\n\t    var entities = twttr.txt.extractHashtagsWithIndices(text);\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.autoLinkCashtags = function(text, options) {\n\t    var entities = twttr.txt.extractCashtagsWithIndices(text);\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.autoLinkUrlsCustom = function(text, options) {\n\t    var entities = twttr.txt.extractUrlsWithIndices(text, {extractUrlsWithoutProtocol: false});\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.removeOverlappingEntities = function(entities) {\n\t    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n\t\n\t    var prev = entities[0];\n\t    for (var i = 1; i < entities.length; i++) {\n\t      if (prev.indices[1] > entities[i].indices[0]) {\n\t        entities.splice(i, 1);\n\t        i--;\n\t      } else {\n\t        prev = entities[i];\n\t      }\n\t    }\n\t  };\n\t\n\t  twttr.txt.extractEntitiesWithIndices = function(text, options) {\n\t    var entities = twttr.txt.extractUrlsWithIndices(text, options)\n\t                    .concat(twttr.txt.extractMentionsOrListsWithIndices(text))\n\t                    .concat(twttr.txt.extractHashtagsWithIndices(text, {checkUrlOverlap: false}))\n\t                    .concat(twttr.txt.extractCashtagsWithIndices(text));\n\t\n\t    if (entities.length == 0) {\n\t      return [];\n\t    }\n\t\n\t    twttr.txt.removeOverlappingEntities(entities);\n\t    return entities;\n\t  };\n\t\n\t  twttr.txt.extractMentions = function(text) {\n\t    var screenNamesOnly = [],\n\t        screenNamesWithIndices = twttr.txt.extractMentionsWithIndices(text);\n\t\n\t    for (var i = 0; i < screenNamesWithIndices.length; i++) {\n\t      var screenName = screenNamesWithIndices[i].screenName;\n\t      screenNamesOnly.push(screenName);\n\t    }\n\t\n\t    return screenNamesOnly;\n\t  };\n\t\n\t  twttr.txt.extractMentionsWithIndices = function(text) {\n\t    var mentions = [],\n\t        mentionOrList,\n\t        mentionsOrLists = twttr.txt.extractMentionsOrListsWithIndices(text);\n\t\n\t    for (var i = 0 ; i < mentionsOrLists.length; i++) {\n\t      mentionOrList = mentionsOrLists[i];\n\t      if (mentionOrList.listSlug == '') {\n\t        mentions.push({\n\t          screenName: mentionOrList.screenName,\n\t          indices: mentionOrList.indices\n\t        });\n\t      }\n\t    }\n\t\n\t    return mentions;\n\t  };\n\t\n\t  /**\n\t   * Extract list or user mentions.\n\t   * (Presence of listSlug indicates a list)\n\t   */\n\t  twttr.txt.extractMentionsOrListsWithIndices = function(text) {\n\t    if (!text || !text.match(twttr.txt.regexen.atSigns)) {\n\t      return [];\n\t    }\n\t\n\t    var possibleNames = [],\n\t        slashListname;\n\t\n\t    text.replace(twttr.txt.regexen.validMentionOrList, function(match, before, atSign, screenName, slashListname, offset, chunk) {\n\t      var after = chunk.slice(offset + match.length);\n\t      if (!after.match(twttr.txt.regexen.endMentionMatch)) {\n\t        slashListname = slashListname || '';\n\t        var startPosition = offset + before.length;\n\t        var endPosition = startPosition + screenName.length + slashListname.length + 1;\n\t        possibleNames.push({\n\t          screenName: screenName,\n\t          listSlug: slashListname,\n\t          indices: [startPosition, endPosition]\n\t        });\n\t      }\n\t    });\n\t\n\t    return possibleNames;\n\t  };\n\t\n\t\n\t  twttr.txt.extractReplies = function(text) {\n\t    if (!text) {\n\t      return null;\n\t    }\n\t\n\t    var possibleScreenName = text.match(twttr.txt.regexen.validReply);\n\t    if (!possibleScreenName ||\n\t        RegExp.rightContext.match(twttr.txt.regexen.endMentionMatch)) {\n\t      return null;\n\t    }\n\t\n\t    return possibleScreenName[1];\n\t  };\n\t\n\t  twttr.txt.extractUrls = function(text, options) {\n\t    var urlsOnly = [],\n\t        urlsWithIndices = twttr.txt.extractUrlsWithIndices(text, options);\n\t\n\t    for (var i = 0; i < urlsWithIndices.length; i++) {\n\t      urlsOnly.push(urlsWithIndices[i].url);\n\t    }\n\t\n\t    return urlsOnly;\n\t  };\n\t\n\t  twttr.txt.extractUrlsWithIndices = function(text, options) {\n\t    if (!options) {\n\t      options = {extractUrlsWithoutProtocol: true};\n\t    }\n\t    if (!text || (options.extractUrlsWithoutProtocol ? !text.match(/\\./) : !text.match(/:/))) {\n\t      return [];\n\t    }\n\t\n\t    var urls = [];\n\t\n\t    while (twttr.txt.regexen.extractUrl.exec(text)) {\n\t      var before = RegExp.$2, url = RegExp.$3, protocol = RegExp.$4, domain = RegExp.$5, path = RegExp.$7;\n\t      var endPosition = twttr.txt.regexen.extractUrl.lastIndex,\n\t          startPosition = endPosition - url.length;\n\t\n\t      // if protocol is missing and domain contains non-ASCII characters,\n\t      // extract ASCII-only domains.\n\t      if (!protocol) {\n\t        if (!options.extractUrlsWithoutProtocol\n\t            || before.match(twttr.txt.regexen.invalidUrlWithoutProtocolPrecedingChars)) {\n\t          continue;\n\t        }\n\t        var lastUrl = null,\n\t            asciiEndPosition = 0;\n\t        domain.replace(twttr.txt.regexen.validAsciiDomain, function(asciiDomain) {\n\t          var asciiStartPosition = domain.indexOf(asciiDomain, asciiEndPosition);\n\t          asciiEndPosition = asciiStartPosition + asciiDomain.length;\n\t          lastUrl = {\n\t            url: asciiDomain,\n\t            indices: [startPosition + asciiStartPosition, startPosition + asciiEndPosition]\n\t          };\n\t          if (path\n\t              || asciiDomain.match(twttr.txt.regexen.validSpecialShortDomain)\n\t              || !asciiDomain.match(twttr.txt.regexen.invalidShortDomain)) {\n\t            urls.push(lastUrl);\n\t          }\n\t        });\n\t\n\t        // no ASCII-only domain found. Skip the entire URL.\n\t        if (lastUrl == null) {\n\t          continue;\n\t        }\n\t\n\t        // lastUrl only contains domain. Need to add path and query if they exist.\n\t        if (path) {\n\t          lastUrl.url = url.replace(domain, lastUrl.url);\n\t          lastUrl.indices[1] = endPosition;\n\t        }\n\t      } else {\n\t        // In the case of t.co URLs, don't allow additional path characters.\n\t        if (url.match(twttr.txt.regexen.validTcoUrl)) {\n\t          url = RegExp.lastMatch;\n\t          endPosition = startPosition + url.length;\n\t        }\n\t        urls.push({\n\t          url: url,\n\t          indices: [startPosition, endPosition]\n\t        });\n\t      }\n\t    }\n\t\n\t    return urls;\n\t  };\n\t\n\t  twttr.txt.extractHashtags = function(text) {\n\t    var hashtagsOnly = [],\n\t        hashtagsWithIndices = twttr.txt.extractHashtagsWithIndices(text);\n\t\n\t    for (var i = 0; i < hashtagsWithIndices.length; i++) {\n\t      hashtagsOnly.push(hashtagsWithIndices[i].hashtag);\n\t    }\n\t\n\t    return hashtagsOnly;\n\t  };\n\t\n\t  twttr.txt.extractHashtagsWithIndices = function(text, options) {\n\t    if (!options) {\n\t      options = {checkUrlOverlap: true};\n\t    }\n\t\n\t    if (!text || !text.match(twttr.txt.regexen.hashSigns)) {\n\t      return [];\n\t    }\n\t\n\t    var tags = [];\n\t\n\t    text.replace(twttr.txt.regexen.validHashtag, function(match, before, hash, hashText, offset, chunk) {\n\t      var after = chunk.slice(offset + match.length);\n\t      if (after.match(twttr.txt.regexen.endHashtagMatch))\n\t        return;\n\t      var startPosition = offset + before.length;\n\t      var endPosition = startPosition + hashText.length + 1;\n\t      tags.push({\n\t        hashtag: hashText,\n\t        indices: [startPosition, endPosition]\n\t      });\n\t    });\n\t\n\t    if (options.checkUrlOverlap) {\n\t      // also extract URL entities\n\t      var urls = twttr.txt.extractUrlsWithIndices(text);\n\t      if (urls.length > 0) {\n\t        var entities = tags.concat(urls);\n\t        // remove overlap\n\t        twttr.txt.removeOverlappingEntities(entities);\n\t        // only push back hashtags\n\t        tags = [];\n\t        for (var i = 0; i < entities.length; i++) {\n\t          if (entities[i].hashtag) {\n\t            tags.push(entities[i]);\n\t          }\n\t        }\n\t      }\n\t    }\n\t\n\t    return tags;\n\t  };\n\t\n\t  twttr.txt.extractCashtags = function(text) {\n\t    var cashtagsOnly = [],\n\t        cashtagsWithIndices = twttr.txt.extractCashtagsWithIndices(text);\n\t\n\t    for (var i = 0; i < cashtagsWithIndices.length; i++) {\n\t      cashtagsOnly.push(cashtagsWithIndices[i].cashtag);\n\t    }\n\t\n\t    return cashtagsOnly;\n\t  };\n\t\n\t  twttr.txt.extractCashtagsWithIndices = function(text) {\n\t    if (!text || text.indexOf(\"$\") == -1) {\n\t      return [];\n\t    }\n\t\n\t    var tags = [];\n\t\n\t    text.replace(twttr.txt.regexen.validCashtag, function(match, before, dollar, cashtag, offset, chunk) {\n\t      var startPosition = offset + before.length;\n\t      var endPosition = startPosition + cashtag.length + 1;\n\t      tags.push({\n\t        cashtag: cashtag,\n\t        indices: [startPosition, endPosition]\n\t      });\n\t    });\n\t\n\t    return tags;\n\t  };\n\t\n\t  twttr.txt.modifyIndicesFromUnicodeToUTF16 = function(text, entities) {\n\t    twttr.txt.convertUnicodeIndices(text, entities, false);\n\t  };\n\t\n\t  twttr.txt.modifyIndicesFromUTF16ToUnicode = function(text, entities) {\n\t    twttr.txt.convertUnicodeIndices(text, entities, true);\n\t  };\n\t\n\t  twttr.txt.getUnicodeTextLength = function(text) {\n\t    return text.replace(twttr.txt.regexen.non_bmp_code_pairs, ' ').length;\n\t  };\n\t\n\t  twttr.txt.convertUnicodeIndices = function(text, entities, indicesInUTF16) {\n\t    if (entities.length == 0) {\n\t      return;\n\t    }\n\t\n\t    var charIndex = 0;\n\t    var codePointIndex = 0;\n\t\n\t    // sort entities by start index\n\t    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n\t    var entityIndex = 0;\n\t    var entity = entities[0];\n\t\n\t    while (charIndex < text.length) {\n\t      if (entity.indices[0] == (indicesInUTF16 ? charIndex : codePointIndex)) {\n\t        var len = entity.indices[1] - entity.indices[0];\n\t        entity.indices[0] = indicesInUTF16 ? codePointIndex : charIndex;\n\t        entity.indices[1] = entity.indices[0] + len;\n\t\n\t        entityIndex++;\n\t        if (entityIndex == entities.length) {\n\t          // no more entity\n\t          break;\n\t        }\n\t        entity = entities[entityIndex];\n\t      }\n\t\n\t      var c = text.charCodeAt(charIndex);\n\t      if (0xD800 <= c && c <= 0xDBFF && charIndex < text.length - 1) {\n\t        // Found high surrogate char\n\t        c = text.charCodeAt(charIndex + 1);\n\t        if (0xDC00 <= c && c <= 0xDFFF) {\n\t          // Found surrogate pair\n\t          charIndex++;\n\t        }\n\t      }\n\t      codePointIndex++;\n\t      charIndex++;\n\t    }\n\t  };\n\t\n\t  // this essentially does text.split(/<|>/)\n\t  // except that won't work in IE, where empty strings are ommitted\n\t  // so \"<>\".split(/<|>/) => [] in IE, but is [\"\", \"\", \"\"] in all others\n\t  // but \"<<\".split(\"<\") => [\"\", \"\", \"\"]\n\t  twttr.txt.splitTags = function(text) {\n\t    var firstSplits = text.split(\"<\"),\n\t        secondSplits,\n\t        allSplits = [],\n\t        split;\n\t\n\t    for (var i = 0; i < firstSplits.length; i += 1) {\n\t      split = firstSplits[i];\n\t      if (!split) {\n\t        allSplits.push(\"\");\n\t      } else {\n\t        secondSplits = split.split(\">\");\n\t        for (var j = 0; j < secondSplits.length; j += 1) {\n\t          allSplits.push(secondSplits[j]);\n\t        }\n\t      }\n\t    }\n\t\n\t    return allSplits;\n\t  };\n\t\n\t  twttr.txt.hitHighlight = function(text, hits, options) {\n\t    var defaultHighlightTag = \"em\";\n\t\n\t    hits = hits || [];\n\t    options = options || {};\n\t\n\t    if (hits.length === 0) {\n\t      return text;\n\t    }\n\t\n\t    var tagName = options.tag || defaultHighlightTag,\n\t        tags = [\"<\" + tagName + \">\", \"</\" + tagName + \">\"],\n\t        chunks = twttr.txt.splitTags(text),\n\t        i,\n\t        j,\n\t        result = \"\",\n\t        chunkIndex = 0,\n\t        chunk = chunks[0],\n\t        prevChunksLen = 0,\n\t        chunkCursor = 0,\n\t        startInChunk = false,\n\t        chunkChars = chunk,\n\t        flatHits = [],\n\t        index,\n\t        hit,\n\t        tag,\n\t        placed,\n\t        hitSpot;\n\t\n\t    for (i = 0; i < hits.length; i += 1) {\n\t      for (j = 0; j < hits[i].length; j += 1) {\n\t        flatHits.push(hits[i][j]);\n\t      }\n\t    }\n\t\n\t    for (index = 0; index < flatHits.length; index += 1) {\n\t      hit = flatHits[index];\n\t      tag = tags[index % 2];\n\t      placed = false;\n\t\n\t      while (chunk != null && hit >= prevChunksLen + chunk.length) {\n\t        result += chunkChars.slice(chunkCursor);\n\t        if (startInChunk && hit === prevChunksLen + chunkChars.length) {\n\t          result += tag;\n\t          placed = true;\n\t        }\n\t\n\t        if (chunks[chunkIndex + 1]) {\n\t          result += \"<\" + chunks[chunkIndex + 1] + \">\";\n\t        }\n\t\n\t        prevChunksLen += chunkChars.length;\n\t        chunkCursor = 0;\n\t        chunkIndex += 2;\n\t        chunk = chunks[chunkIndex];\n\t        chunkChars = chunk;\n\t        startInChunk = false;\n\t      }\n\t\n\t      if (!placed && chunk != null) {\n\t        hitSpot = hit - prevChunksLen;\n\t        result += chunkChars.slice(chunkCursor, hitSpot) + tag;\n\t        chunkCursor = hitSpot;\n\t        if (index % 2 === 0) {\n\t          startInChunk = true;\n\t        } else {\n\t          startInChunk = false;\n\t        }\n\t      } else if(!placed) {\n\t        placed = true;\n\t        result += tag;\n\t      }\n\t    }\n\t\n\t    if (chunk != null) {\n\t      if (chunkCursor < chunkChars.length) {\n\t        result += chunkChars.slice(chunkCursor);\n\t      }\n\t      for (index = chunkIndex + 1; index < chunks.length; index += 1) {\n\t        result += (index % 2 === 0 ? chunks[index] : \"<\" + chunks[index] + \">\");\n\t      }\n\t    }\n\t\n\t    return result;\n\t  };\n\t\n\t  var MAX_LENGTH = 140;\n\t\n\t  // Returns the length of Tweet text with consideration to t.co URL replacement\n\t  // and chars outside the basic multilingual plane that use 2 UTF16 code points\n\t  twttr.txt.getTweetLength = function(text, options) {\n\t    if (!options) {\n\t      options = {\n\t          // These come from https://api.twitter.com/1.1/help/configuration.json\n\t          // described by https://dev.twitter.com/rest/reference/get/help/configuration\n\t          short_url_length: 23,\n\t          short_url_length_https: 23\n\t      };\n\t    }\n\t    var textLength = twttr.txt.getUnicodeTextLength(text),\n\t        urlsWithIndices = twttr.txt.extractUrlsWithIndices(text);\n\t    twttr.txt.modifyIndicesFromUTF16ToUnicode(text, urlsWithIndices);\n\t\n\t    for (var i = 0; i < urlsWithIndices.length; i++) {\n\t      // Subtract the length of the original URL\n\t      textLength += urlsWithIndices[i].indices[0] - urlsWithIndices[i].indices[1];\n\t\n\t      // Add 23 characters for URL starting with https://\n\t      // http:// URLs still use https://t.co so they are 23 characters as well\n\t      if (urlsWithIndices[i].url.toLowerCase().match(twttr.txt.regexen.urlHasHttps)) {\n\t         textLength += options.short_url_length_https;\n\t      } else {\n\t        textLength += options.short_url_length;\n\t      }\n\t    }\n\t\n\t    return textLength;\n\t  };\n\t\n\t  // Check the text for any reason that it may not be valid as a Tweet. This is meant as a pre-validation\n\t  // before posting to api.twitter.com. There are several server-side reasons for Tweets to fail but this pre-validation\n\t  // will allow quicker feedback.\n\t  //\n\t  // Returns false if this text is valid. Otherwise one of the following strings will be returned:\n\t  //\n\t  //   \"too_long\": if the text is too long\n\t  //   \"empty\": if the text is nil or empty\n\t  //   \"invalid_characters\": if the text contains non-Unicode or any of the disallowed Unicode characters\n\t  twttr.txt.isInvalidTweet = function(text) {\n\t    if (!text) {\n\t      return \"empty\";\n\t    }\n\t\n\t    // Determine max length independent of URL length\n\t    if (twttr.txt.getTweetLength(text) > MAX_LENGTH) {\n\t      return \"too_long\";\n\t    }\n\t\n\t    if (twttr.txt.hasInvalidCharacters(text)) {\n\t      return \"invalid_characters\";\n\t    }\n\t\n\t    return false;\n\t  };\n\t\n\t  twttr.txt.hasInvalidCharacters = function(text) {\n\t    return twttr.txt.regexen.invalid_chars.test(text);\n\t  };\n\t\n\t  twttr.txt.isValidTweetText = function(text) {\n\t    return !twttr.txt.isInvalidTweet(text);\n\t  };\n\t\n\t  twttr.txt.isValidUsername = function(username) {\n\t    if (!username) {\n\t      return false;\n\t    }\n\t\n\t    var extracted = twttr.txt.extractMentions(username);\n\t\n\t    // Should extract the username minus the @ sign, hence the .slice(1)\n\t    return extracted.length === 1 && extracted[0] === username.slice(1);\n\t  };\n\t\n\t  var VALID_LIST_RE = regexSupplant(/^#{validMentionOrList}$/);\n\t\n\t  twttr.txt.isValidList = function(usernameList) {\n\t    var match = usernameList.match(VALID_LIST_RE);\n\t\n\t    // Must have matched and had nothing before or after\n\t    return !!(match && match[1] == \"\" && match[4]);\n\t  };\n\t\n\t  twttr.txt.isValidHashtag = function(hashtag) {\n\t    if (!hashtag) {\n\t      return false;\n\t    }\n\t\n\t    var extracted = twttr.txt.extractHashtags(hashtag);\n\t\n\t    // Should extract the hashtag minus the # sign, hence the .slice(1)\n\t    return extracted.length === 1 && extracted[0] === hashtag.slice(1);\n\t  };\n\t\n\t  twttr.txt.isValidUrl = function(url, unicodeDomains, requireProtocol) {\n\t    if (unicodeDomains == null) {\n\t      unicodeDomains = true;\n\t    }\n\t\n\t    if (requireProtocol == null) {\n\t      requireProtocol = true;\n\t    }\n\t\n\t    if (!url) {\n\t      return false;\n\t    }\n\t\n\t    var urlParts = url.match(twttr.txt.regexen.validateUrlUnencoded);\n\t\n\t    if (!urlParts || urlParts[0] !== url) {\n\t      return false;\n\t    }\n\t\n\t    var scheme = urlParts[1],\n\t        authority = urlParts[2],\n\t        path = urlParts[3],\n\t        query = urlParts[4],\n\t        fragment = urlParts[5];\n\t\n\t    if (!(\n\t      (!requireProtocol || (isValidMatch(scheme, twttr.txt.regexen.validateUrlScheme) && scheme.match(/^https?$/i))) &&\n\t      isValidMatch(path, twttr.txt.regexen.validateUrlPath) &&\n\t      isValidMatch(query, twttr.txt.regexen.validateUrlQuery, true) &&\n\t      isValidMatch(fragment, twttr.txt.regexen.validateUrlFragment, true)\n\t    )) {\n\t      return false;\n\t    }\n\t\n\t    return (unicodeDomains && isValidMatch(authority, twttr.txt.regexen.validateUrlUnicodeAuthority)) ||\n\t           (!unicodeDomains && isValidMatch(authority, twttr.txt.regexen.validateUrlAuthority));\n\t  };\n\t\n\t  function isValidMatch(string, regex, optional) {\n\t    if (!optional) {\n\t      // RegExp[\"$&\"] is the text of the last match\n\t      // blank strings are ok, but are falsy, so we check stringiness instead of truthiness\n\t      return ((typeof string === \"string\") && string.match(regex) && RegExp[\"$&\"] === string);\n\t    }\n\t\n\t    // RegExp[\"$&\"] is the text of the last match\n\t    return (!string || (string.match(regex) && RegExp[\"$&\"] === string));\n\t  }\n\t\n\t  if (typeof module != 'undefined' && module.exports) {\n\t    module.exports = twttr.txt;\n\t  }\n\t\n\t  if (true) {\n\t    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (twttr.txt), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t  }\n\t\n\t  if (typeof window != 'undefined') {\n\t    if (window.twttr) {\n\t      for (var prop in twttr) {\n\t        window.twttr[prop] = twttr[prop];\n\t      }\n\t    } else {\n\t      window.twttr = twttr;\n\t    }\n\t  }\n\t})();\n\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\texports.createEditOverlay = createEditOverlay;\n\texports.enableEdit = enableEdit;\n\texports.disableEdit = disableEdit;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _event = __webpack_require__(4);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tvar _comments = __webpack_require__(38);\n\t\n\tvar _initFile = __webpack_require__(37);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\tvar _enabled = false;\n\tvar isDragging = false,\n\t    overlay = void 0;\n\tvar dragOffsetX = void 0,\n\t    dragOffsetY = void 0,\n\t    dragStartX = void 0,\n\t    dragStartY = void 0;\n\tvar OVERLAY_BORDER_SIZE = 3;\n\t\n\t/**\n\t * Create an overlay for editing an annotation.\n\t *\n\t * @param {Element} target The annotation element to apply overlay for\n\t */\n\tfunction createEditOverlay(target) {\n\t  destroyEditOverlay();\n\t\n\t  overlay = document.createElement('div');\n\t  var anchor = document.createElement('a');\n\t  var parentNode = (0, _utils.findSVGContainer)(target).parentNode;\n\t  var id = target.getAttribute('data-pdf-annotate-id');\n\t  var rect = (0, _utils.getAnnotationRect)(target);\n\t  var styleLeft = rect.left - OVERLAY_BORDER_SIZE;\n\t  var styleTop = rect.top - OVERLAY_BORDER_SIZE;\n\t\n\t  overlay.setAttribute('id', 'pdf-annotate-edit-overlay');\n\t  overlay.setAttribute('data-target-id', id);\n\t  overlay.style.boxSizing = 'content-box';\n\t  overlay.style.position = 'absolute';\n\t  overlay.style.top = styleTop + 'px';\n\t  overlay.style.left = styleLeft + 'px';\n\t  overlay.style.width = rect.width + 'px';\n\t  overlay.style.height = rect.height + 'px';\n\t  overlay.style.border = OVERLAY_BORDER_SIZE + 'px solid ' + _utils.BORDER_COLOR;\n\t  overlay.style.borderRadius = OVERLAY_BORDER_SIZE + 'px';\n\t\n\t  anchor.innerHTML = '×';\n\t  anchor.setAttribute('href', 'javascript://');\n\t  anchor.style.background = '#fff';\n\t  anchor.style.borderRadius = '20px';\n\t  anchor.style.border = '1px solid #bbb';\n\t  anchor.style.color = '#bbb';\n\t  anchor.style.fontSize = '16px';\n\t  anchor.style.padding = '2px';\n\t  anchor.style.textAlign = 'center';\n\t  anchor.style.textDecoration = 'none';\n\t  anchor.style.position = 'absolute';\n\t  anchor.style.top = '-13px';\n\t  anchor.style.right = '-13px';\n\t  anchor.style.width = '25px';\n\t  anchor.style.height = '25px';\n\t\n\t  if (_initFile.readonly) anchor.style.display = 'none';\n\t  overlay.appendChild(anchor);\n\t  parentNode.appendChild(overlay);\n\t  document.addEventListener('click', handleDocumentClick);\n\t  document.addEventListener('keyup', handleDocumentKeyup);\n\t  document.addEventListener('mousedown', handleDocumentMousedown);\n\t  anchor.addEventListener('click', deleteAnnotation);\n\t  anchor.addEventListener('mouseover', function () {\n\t    anchor.style.color = '#35A4DC';\n\t    anchor.style.borderColor = '#999';\n\t    anchor.style.boxShadow = '0 1px 1px #ccc';\n\t  });\n\t  anchor.addEventListener('mouseout', function () {\n\t    anchor.style.color = '#bbb';\n\t    anchor.style.borderColor = '#bbb';\n\t    anchor.style.boxShadow = '';\n\t  });\n\t  overlay.addEventListener('mouseover', function () {\n\t    if (!isDragging && !_initFile.readonly) {\n\t      anchor.style.display = '';\n\t    }\n\t  });\n\t  overlay.addEventListener('mouseout', function () {\n\t    anchor.style.display = 'none';\n\t  });\n\t}\n\t\n\t/**\n\t * Destroy the edit overlay if it exists.\n\t */\n\tfunction destroyEditOverlay() {\n\t  if (overlay && overlay.parentNode) {\n\t    overlay.parentNode.removeChild(overlay);\n\t    overlay = null;\n\t  }\n\t  document.removeEventListener('click', handleDocumentClick);\n\t  document.removeEventListener('keyup', handleDocumentKeyup);\n\t  document.removeEventListener('mousedown', handleDocumentMousedown);\n\t  document.removeEventListener('mousemove', handleDocumentMousemove);\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t  (0, _utils.enableUserSelect)();\n\t}\n\t\n\t/**\n\t * Delete currently selected annotation\n\t */\n\tfunction deleteAnnotation() {\n\t  if (!overlay) {\n\t    return;\n\t  }\n\t\n\t  var annotationId = overlay.getAttribute('data-target-id');\n\t  var nodes = document.querySelectorAll('[data-pdf-annotate-id=\"' + annotationId + '\"]');\n\t  var svg = overlay.parentNode.querySelector('svg.annotationLayer');\n\t\n\t  var _getMetadata = (0, _utils.getMetadata)(svg),\n\t      documentId = _getMetadata.documentId;\n\t\n\t  [].concat(_toConsumableArray(nodes)).forEach(function (n) {\n\t    n.parentNode.removeChild(n);\n\t  });\n\t\n\t  _PDFJSAnnotate2.default.getStoreAdapter().deleteAnnotation(documentId, annotationId);\n\t\n\t  destroyEditOverlay();\n\t}\n\t\n\t/**\n\t * Handle document.click event\n\t *\n\t * @param {Event} e The DOM event that needs to be handled\n\t */\n\tfunction handleDocumentClick(e) {\n\t  if (!(0, _utils.findSVGAtPoint)(e.clientX, e.clientY)) {\n\t    return;\n\t  }\n\t\n\t  // Remove current overlay\n\t  var overlay = document.getElementById('pdf-annotate-edit-overlay');\n\t  if (overlay) {\n\t    if (isDragging || e.target === overlay) {\n\t      return;\n\t    }\n\t    destroyEditOverlay();\n\t  }\n\t}\n\t\n\t/**\n\t * Handle document.keyup event\n\t *\n\t * @param {Event} e The DOM event that needs to be handled\n\t */\n\tfunction handleDocumentKeyup(e) {\n\t  if (overlay && e.keyCode === 46 && e.target.nodeName.toLowerCase() !== 'textarea' && e.target.nodeName.toLowerCase() !== 'input') {\n\t    if (!_initFile.readonly) deleteAnnotation();\n\t  }\n\t}\n\t\n\t/**\n\t * Handle document.mousedown event\n\t *\n\t * @param {Event} e The DOM event that needs to be handled\n\t */\n\tfunction handleDocumentMousedown(e) {\n\t  if (e.target !== overlay) {\n\t    return;\n\t  }\n\t\n\t  // Highlight and strikeout annotations are bound to text within the document.\n\t  // It doesn't make sense to allow repositioning these types of annotations.\n\t  var annotationId = overlay.getAttribute('data-target-id');\n\t  var target = document.querySelector('[data-pdf-annotate-id=\"' + annotationId + '\"]');\n\t  var type = target.getAttribute('data-pdf-annotate-type');\n\t\n\t  if (type === 'highlight' || type === 'strikeout') {\n\t    return;\n\t  }\n\t\n\t  if (!_initFile.readonly) isDragging = true;\n\t  dragOffsetX = e.clientX;\n\t  dragOffsetY = e.clientY;\n\t  dragStartX = overlay.offsetLeft;\n\t  dragStartY = overlay.offsetTop;\n\t\n\t  overlay.style.background = 'rgba(255, 255, 255, 0.7)';\n\t  overlay.style.cursor = 'move';\n\t  // if(!readonly)\n\t  overlay.querySelector('a').style.display = 'none';\n\t\n\t  document.addEventListener('mousemove', handleDocumentMousemove);\n\t  document.addEventListener('mouseup', handleDocumentMouseup);\n\t  (0, _utils.disableUserSelect)();\n\t}\n\t\n\t/**\n\t * Handle document.mousemove event\n\t *\n\t * @param {Event} e The DOM event that needs to be handled\n\t */\n\tfunction handleDocumentMousemove(e) {\n\t  if (_initFile.readonly) return;\n\t  var annotationId = overlay.getAttribute('data-target-id');\n\t  var parentNode = overlay.parentNode;\n\t  var rect = parentNode.getBoundingClientRect();\n\t  var y = dragStartY + (e.clientY - dragOffsetY);\n\t  var x = dragStartX + (e.clientX - dragOffsetX);\n\t  var minY = 0;\n\t  var maxY = rect.height;\n\t  var minX = 0;\n\t  var maxX = rect.width;\n\t\n\t  if (y > minY && y + overlay.offsetHeight < maxY) {\n\t    overlay.style.top = y + 'px';\n\t  }\n\t\n\t  if (x > minX && x + overlay.offsetWidth < maxX) {\n\t    overlay.style.left = x + 'px';\n\t  }\n\t}\n\t\n\t/**\n\t * Handle document.mouseup event\n\t *\n\t * @param {Event} e The DOM event that needs to be handled\n\t */\n\tfunction handleDocumentMouseup(e) {\n\t  var annotationId = overlay.getAttribute('data-target-id');\n\t  var target = document.querySelectorAll('[data-pdf-annotate-id=\"' + annotationId + '\"]');\n\t  var type = target[0].getAttribute('data-pdf-annotate-type');\n\t  var svg = overlay.parentNode.querySelector('svg.annotationLayer');\n\t\n\t  var _getMetadata2 = (0, _utils.getMetadata)(svg),\n\t      documentId = _getMetadata2.documentId;\n\t\n\t  overlay.querySelector('a').style.display = '';\n\t\n\t  function getDelta(propX, propY) {\n\t    return calcDelta(parseInt(target[0].getAttribute(propX), 10), parseInt(target[0].getAttribute(propY), 10));\n\t  }\n\t\n\t  function calcDelta(x, y) {\n\t    return {\n\t      deltaX: OVERLAY_BORDER_SIZE + (0, _utils.scaleDown)(svg, { x: overlay.offsetLeft }).x - x,\n\t      deltaY: OVERLAY_BORDER_SIZE + (0, _utils.scaleDown)(svg, { y: overlay.offsetTop }).y - y\n\t    };\n\t  }\n\t\n\t  _PDFJSAnnotate2.default.getStoreAdapter().getAnnotation(documentId, annotationId).then(function (annotation) {\n\t    if (['area', 'highlight', 'point', 'textbox'].indexOf(type) > -1) {\n\t      var _getDelta = getDelta('x', 'y'),\n\t          deltaX = _getDelta.deltaX,\n\t          deltaY = _getDelta.deltaY;\n\t\n\t      [].concat(_toConsumableArray(target)).forEach(function (t, i) {\n\t        if (deltaY !== 0) {\n\t          var modelY = parseInt(t.getAttribute('y'), 10) + deltaY;\n\t          var viewY = modelY;\n\t\n\t          if (type === 'textbox') {\n\t            viewY += annotation.size;\n\t          }\n\t\n\t          if (type === 'point' && !$.browser.mozilla) {\n\t            viewY = (0, _utils.scaleUp)(svg, { viewY: viewY }).viewY;\n\t          }\n\t          if ($.browser.mozilla) viewY -= 8;\n\t\n\t          t.setAttribute('y', viewY);\n\t          if (annotation.rectangles) {\n\t            annotation.rectangles[i].y = modelY;\n\t          } else if (annotation.y) {\n\t            annotation.y = modelY;\n\t          }\n\t        }\n\t        if (deltaX !== 0) {\n\t          var modelX = parseInt(t.getAttribute('x'), 10) + deltaX;\n\t          var viewX = modelX;\n\t\n\t          if (type === 'point' && !$.browser.mozilla) {\n\t            viewX = (0, _utils.scaleUp)(svg, { viewX: viewX }).viewX;\n\t          }\n\t          if ($.browser.mozilla) viewX -= 8;\n\t\n\t          t.setAttribute('x', viewX);\n\t          if (annotation.rectangles) {\n\t            annotation.rectangles[i].x = modelX;\n\t          } else if (annotation.x) {\n\t            annotation.x = modelX;\n\t          }\n\t        }\n\t      });\n\t      // } else if (type === 'strikeout') {\n\t      //   let { deltaX, deltaY } = getDelta('x1', 'y1');\n\t      //   [...target].forEach(target, (t, i) => {\n\t      //     if (deltaY !== 0) {\n\t      //       t.setAttribute('y1', parseInt(t.getAttribute('y1'), 10) + deltaY);\n\t      //       t.setAttribute('y2', parseInt(t.getAttribute('y2'), 10) + deltaY);\n\t      //       annotation.rectangles[i].y = parseInt(t.getAttribute('y1'), 10);\n\t      //     }\n\t      //     if (deltaX !== 0) {\n\t      //       t.setAttribute('x1', parseInt(t.getAttribute('x1'), 10) + deltaX);\n\t      //       t.setAttribute('x2', parseInt(t.getAttribute('x2'), 10) + deltaX);\n\t      //       annotation.rectangles[i].x = parseInt(t.getAttribute('x1'), 10);\n\t      //     }\n\t      //   });\n\t    } else if (type === 'drawing') {\n\t      var rect = (0, _utils.scaleDown)(svg, (0, _utils.getAnnotationRect)(target[0]));\n\t\n\t      var _annotation$lines$ = _slicedToArray(annotation.lines[0], 2),\n\t          originX = _annotation$lines$[0],\n\t          originY = _annotation$lines$[1];\n\t\n\t      var _calcDelta = calcDelta(originX, originY),\n\t          _deltaX = _calcDelta.deltaX,\n\t          _deltaY = _calcDelta.deltaY;\n\t\n\t      // origin isn't necessarily at 0/0 in relation to overlay x/y\n\t      // adjust the difference between overlay and drawing coords\n\t\n\t\n\t      _deltaY += originY - rect.top;\n\t      _deltaX += originX - rect.left;\n\t\n\t      annotation.lines.forEach(function (line, i) {\n\t        var _annotation$lines$i = _slicedToArray(annotation.lines[i], 2),\n\t            x = _annotation$lines$i[0],\n\t            y = _annotation$lines$i[1];\n\t\n\t        annotation.lines[i][0] = x + _deltaX;\n\t        annotation.lines[i][1] = y + _deltaY;\n\t      });\n\t\n\t      target[0].parentNode.removeChild(target[0]);\n\t      (0, _appendChild2.default)(svg, annotation);\n\t    }\n\t\n\t    if (!_initFile.readonly) _PDFJSAnnotate2.default.getStoreAdapter().editAnnotation(documentId, annotationId, annotation);\n\t  });\n\t\n\t  setTimeout(function () {\n\t    isDragging = false;\n\t  }, 0);\n\t\n\t  overlay.style.background = '';\n\t  overlay.style.cursor = '';\n\t\n\t  document.removeEventListener('mousemove', handleDocumentMousemove);\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t  (0, _utils.enableUserSelect)();\n\t}\n\t\n\t/**\n\t * Handle annotation.click event\n\t *\n\t * @param {Element} e The annotation element that was clicked\n\t */\n\tfunction handleAnnotationClick(target) {\n\t  var type = target.dataset['pdfAnnotateType'];\n\t  if (type === 'point') (0, _comments.selectComment)(target.dataset['pdfAnnotateId']);\n\t  createEditOverlay(target);\n\t}\n\t\n\t/**\n\t * Enable edit mode behavior.\n\t */\n\tfunction enableEdit() {\n\t  if (_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = true;\n\t  (0, _event.addEventListener)('annotation:click', handleAnnotationClick);\n\t};\n\t\n\t/**\n\t * Disable edit mode behavior.\n\t */\n\tfunction disableEdit() {\n\t  destroyEditOverlay();\n\t\n\t  if (!_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = false;\n\t  (0, _event.removeEventListener)('annotation:click', handleAnnotationClick);\n\t};\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\texports.default = appendChild;\n\t\n\tvar _objectAssign = __webpack_require__(42);\n\t\n\tvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\t\n\tvar _renderLine = __webpack_require__(43);\n\t\n\tvar _renderLine2 = _interopRequireDefault(_renderLine);\n\t\n\tvar _renderPath = __webpack_require__(46);\n\t\n\tvar _renderPath2 = _interopRequireDefault(_renderPath);\n\t\n\tvar _renderPoint = __webpack_require__(47);\n\t\n\tvar _renderPoint2 = _interopRequireDefault(_renderPoint);\n\t\n\tvar _renderRect = __webpack_require__(48);\n\t\n\tvar _renderRect2 = _interopRequireDefault(_renderRect);\n\t\n\tvar _renderText = __webpack_require__(49);\n\t\n\tvar _renderText2 = _interopRequireDefault(_renderText);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar isFirefox = /firefox/i.test(navigator.userAgent);\n\t\n\t/**\n\t * Get the x/y translation to be used for transforming the annotations\n\t * based on the rotation of the viewport.\n\t *\n\t * @param {Object} viewport The viewport data from the page\n\t * @return {Object}\n\t */\n\tfunction getTranslation(viewport) {\n\t    var x = void 0;\n\t    var y = void 0;\n\t\n\t    // Modulus 360 on the rotation so that we only\n\t    // have to worry about four possible values.\n\t    switch (viewport.rotation % 360) {\n\t        case 0:\n\t            x = y = 0;\n\t            break;\n\t        case 90:\n\t            x = 0;\n\t            y = viewport.width / viewport.scale * -1;\n\t            break;\n\t        case 180:\n\t            x = viewport.width / viewport.scale * -1;\n\t            y = viewport.height / viewport.scale * -1;\n\t            break;\n\t        case 270:\n\t            x = viewport.height / viewport.scale * -1;\n\t            y = 0;\n\t            break;\n\t    }\n\t\n\t    return { x: x, y: y };\n\t}\n\t\n\t/**\n\t * Transform the rotation and scale of a node using SVG's native transform attribute.\n\t *\n\t * @param {Node} node The node to be transformed\n\t * @param {Object} viewport The page's viewport data\n\t * @return {Node}\n\t */\n\tfunction transform(node, viewport) {\n\t    var trans = getTranslation(viewport);\n\t\n\t    // Let SVG natively transform the element\n\t    node.setAttribute('transform', 'scale(' + viewport.scale + ') rotate(' + viewport.rotation + ') translate(' + trans.x + ', ' + trans.y + ')');\n\t\n\t    // Manually adjust x/y for nested SVG nodes\n\t    // console.log(node);\n\t    // console.log(viewport.scale);\n\t    // if (!isFirefox && node.nodeName.toLowerCase() === 'svg') {\n\t    //     node.setAttribute('x', parseInt(node.getAttribute('x'), 10) * viewport.scale);\n\t    //     node.setAttribute('y', parseInt(node.getAttribute('y'), 10) * viewport.scale);\n\t\n\t    //     let x = parseInt(node.getAttribute('x', 10));\n\t    //     let y = parseInt(node.getAttribute('y', 10));\n\t    //     let width = parseInt(node.getAttribute('width'), 10);\n\t    //     let height = parseInt(node.getAttribute('height'), 10);\n\t    //     let path = node.querySelector('path');\n\t    //     let svg = path.parentNode;\n\t\n\t    //     // Scale width/height\n\t    //     [node, svg, path, node.querySelector('rect')].forEach((n) => {\n\t    //         n.setAttribute('width', parseInt(n.getAttribute('width'), 10) * viewport.scale);\n\t    //         n.setAttribute('height', parseInt(n.getAttribute('height'), 10) * viewport.scale);\n\t    //     });\n\t\n\t    //     // Transform path but keep scale at 100% since it will be handled natively\n\t    //     transform(path, objectAssign({}, viewport, {scale: 1}));\n\t\n\t    //     switch (viewport.rotation % 360) {\n\t    //         case 90:\n\t    //             node.setAttribute('x', viewport.width - y - width);\n\t    //             node.setAttribute('y', x);\n\t    //             svg.setAttribute('x', 1);\n\t    //             svg.setAttribute('y', 0);\n\t    //             break;\n\t    //         case 180:\n\t    //             node.setAttribute('x', viewport.width - x - width);\n\t    //             node.setAttribute('y', viewport.height - y - height);\n\t    //             svg.setAttribute('y', 2);\n\t    //             break;\n\t    //         case 270:\n\t    //             node.setAttribute('x', y);\n\t    //             node.setAttribute('y', viewport.height - x - height);\n\t    //             svg.setAttribute('x', -1);\n\t    //             svg.setAttribute('y', 0);\n\t    //             break;\n\t    //     }\n\t    // }\n\t    // else{\n\t    //     Object.keys(node).forEach((key) => {\n\t    //     node[key] = node[key] * viewport.scale;\n\t    //     });\n\t    // }\n\t\n\t    return node;\n\t}\n\t\n\t/**\n\t * Append an annotation as a child of an SVG.\n\t *\n\t * @param {SVGElement} svg The SVG element to append the annotation to\n\t * @param {Object} annotation The annotation definition to render and append\n\t * @param {Object} viewport The page's viewport data\n\t * @return {SVGElement} A node that was created and appended by this function\n\t */\n\tfunction appendChild(svg, annotation, viewport) {\n\t    if (!viewport) {\n\t        viewport = JSON.parse(svg.getAttribute('data-pdf-annotate-viewport'));\n\t    }\n\t\n\t    var child = void 0;\n\t    switch (annotation.type) {\n\t        case 'area':\n\t        case 'highlight':\n\t            child = (0, _renderRect2.default)(annotation);\n\t            break;\n\t        case 'strikeout':\n\t            child = (0, _renderLine2.default)(annotation);\n\t            break;\n\t        case 'point':\n\t            child = (0, _renderPoint2.default)(annotation);\n\t            break;\n\t        case 'textbox':\n\t            child = (0, _renderText2.default)(annotation);\n\t            break;\n\t        case 'drawing':\n\t            child = (0, _renderPath2.default)(annotation);\n\t            break;\n\t    }\n\t\n\t    // If no type was provided for an annotation it will result in node being null.\n\t    // Skip appending/transforming if node doesn't exist.\n\t    if (child) {\n\t        // Set attributes\n\t        child.setAttribute('data-pdf-annotate-id', annotation.uuid);\n\t        child.setAttribute('data-pdf-annotate-type', annotation.type);\n\t        child.setAttribute('aria-hidden', true);\n\t\n\t        svg.appendChild(transform(child, viewport));\n\t    }\n\t\n\t    return child;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 42 */\n/***/ function(module, exports) {\n\n\t/*\n\tobject-assign\n\t(c) Sindre Sorhus\n\t@license MIT\n\t*/\n\t\n\t'use strict';\n\t/* eslint-disable no-unused-vars */\n\tvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\t\n\tfunction toObject(val) {\n\t\tif (val === null || val === undefined) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\t\n\t\treturn Object(val);\n\t}\n\t\n\tfunction shouldUseNative() {\n\t\ttry {\n\t\t\tif (!Object.assign) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// Detect buggy property enumeration order in older V8 versions.\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\t\ttest1[5] = 'de';\n\t\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test2 = {};\n\t\t\tfor (var i = 0; i < 10; i++) {\n\t\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t\t}\n\t\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\t\treturn test2[n];\n\t\t\t});\n\t\t\tif (order2.join('') !== '0123456789') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test3 = {};\n\t\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\t\ttest3[letter] = letter;\n\t\t\t});\n\t\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\t\tvar from;\n\t\tvar to = toObject(target);\n\t\tvar symbols;\n\t\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = Object(arguments[s]);\n\t\n\t\t\tfor (var key in from) {\n\t\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\t\tto[key] = from[key];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (getOwnPropertySymbols) {\n\t\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn to;\n\t};\n\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderLine;\n\t\n\tvar _setAttributes = __webpack_require__(44);\n\t\n\tvar _setAttributes2 = _interopRequireDefault(_setAttributes);\n\t\n\tvar _normalizeColor = __webpack_require__(45);\n\t\n\tvar _normalizeColor2 = _interopRequireDefault(_normalizeColor);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Create SVGLineElements from an annotation definition.\n\t * This is used for anntations of type `strikeout`.\n\t *\n\t * @param {Object} a The annotation definition\n\t * @return {SVGGElement} A group of all lines to be rendered\n\t */\n\tfunction renderLine(a) {\n\t  var group = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n\t  (0, _setAttributes2.default)(group, {\n\t    stroke: (0, _normalizeColor2.default)(a.color || '#f00'),\n\t    strokeWidth: 1\n\t  });\n\t\n\t  a.rectangles.forEach(function (r) {\n\t    var line = document.createElementNS('http://www.w3.org/2000/svg', 'line');\n\t\n\t    (0, _setAttributes2.default)(line, {\n\t      x1: r.x,\n\t      y1: r.y,\n\t      x2: r.x + r.width,\n\t      y2: r.y\n\t    });\n\t\n\t    group.appendChild(line);\n\t  });\n\t\n\t  return group;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 44 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = setAttributes;\n\tvar UPPER_REGEX = /[A-Z]/g;\n\t\n\t// Don't convert these attributes from camelCase to hyphenated-attributes\n\tvar BLACKLIST = ['viewBox'];\n\t\n\tvar keyCase = function keyCase(key) {\n\t  if (BLACKLIST.indexOf(key) === -1) {\n\t    key = key.replace(UPPER_REGEX, function (match) {\n\t      return '-' + match.toLowerCase();\n\t    });\n\t  }\n\t  return key;\n\t};\n\t\n\t/**\n\t * Set attributes for a node from a map\n\t *\n\t * @param {Node} node The node to set attributes on\n\t * @param {Object} attributes The map of key/value pairs to use for attributes\n\t */\n\tfunction setAttributes(node, attributes) {\n\t  Object.keys(attributes).forEach(function (key) {\n\t    node.setAttribute(keyCase(key), attributes[key]);\n\t  });\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 45 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = normalizeColor;\n\tvar REGEX_HASHLESS_HEX = /^([a-f0-9]{6}|[a-f0-9]{3})$/i;\n\t\n\t/**\n\t * Normalize a color value\n\t *\n\t * @param {String} color The color to normalize\n\t * @return {String}\n\t */\n\tfunction normalizeColor(color) {\n\t  if (REGEX_HASHLESS_HEX.test(color)) {\n\t    color = \"#\" + color;\n\t  }\n\t  return color;\n\t}\n\tmodule.exports = exports[\"default\"];\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderPath;\n\t\n\tvar _setAttributes = __webpack_require__(44);\n\t\n\tvar _setAttributes2 = _interopRequireDefault(_setAttributes);\n\t\n\tvar _normalizeColor = __webpack_require__(45);\n\t\n\tvar _normalizeColor2 = _interopRequireDefault(_normalizeColor);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Create SVGPathElement from an annotation definition.\n\t * This is used for anntations of type `drawing`.\n\t *\n\t * @param {Object} a The annotation definition\n\t * @return {SVGPathElement} The path to be rendered\n\t */\n\tfunction renderPath(a) {\n\t  var d = [];\n\t  var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\t\n\t  for (var i = 0, l = a.lines.length; i < l; i++) {\n\t    var p1 = a.lines[i];\n\t    var p2 = a.lines[i + 1];\n\t    if (p2) {\n\t      d.push('M' + p1[0] + ' ' + p1[1] + ' ' + p2[0] + ' ' + p2[1]);\n\t    }\n\t  }\n\t\n\t  (0, _setAttributes2.default)(path, {\n\t    d: d.join(' ') + 'Z',\n\t    stroke: (0, _normalizeColor2.default)(a.color || '#000'),\n\t    strokeWidth: a.width || 1,\n\t    fill: 'none'\n\t  });\n\t\n\t  return path;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderPoint;\n\t\n\tvar _setAttributes = __webpack_require__(44);\n\t\n\tvar _setAttributes2 = _interopRequireDefault(_setAttributes);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar SIZE = 25;\n\tvar D = 'M499.968 214.336q-113.832 0 -212.877 38.781t-157.356 104.625 -58.311 142.29q0 62.496 39.897 119.133t112.437 97.929l48.546 27.9 -15.066 53.568q-13.392 50.778 -39.06 95.976 84.816 -35.154 153.45 -95.418l23.994 -21.204 31.806 3.348q38.502 4.464 72.54 4.464 113.832 0 212.877 -38.781t157.356 -104.625 58.311 -142.29 -58.311 -142.29 -157.356 -104.625 -212.877 -38.781z';\n\t\n\t/**\n\t * Create SVGElement from an annotation definition.\n\t * This is used for anntations of type `comment`.\n\t *\n\t * @param {Object} a The annotation definition\n\t * @return {SVGElement} A svg to be rendered\n\t */\n\tfunction renderPoint(a) {\n\t  var outerSVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\t  var innerSVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\t  var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n\t  var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\t\n\t  (0, _setAttributes2.default)(outerSVG, {\n\t    width: SIZE,\n\t    height: SIZE,\n\t    x: a.x,\n\t    y: a.y\n\t  });\n\t\n\t  (0, _setAttributes2.default)(innerSVG, {\n\t    width: SIZE,\n\t    height: SIZE,\n\t    x: 0,\n\t    y: SIZE * 0.05 * -1,\n\t    viewBox: '0 0 1000 1000'\n\t  });\n\t\n\t  (0, _setAttributes2.default)(rect, {\n\t    width: SIZE,\n\t    height: SIZE,\n\t    stroke: '#000',\n\t    fill: '#ff0'\n\t  });\n\t\n\t  (0, _setAttributes2.default)(path, {\n\t    d: D,\n\t    strokeWidth: 50,\n\t    stroke: '#000',\n\t    fill: '#fff'\n\t  });\n\t\n\t  innerSVG.appendChild(path);\n\t  outerSVG.appendChild(rect);\n\t  outerSVG.appendChild(innerSVG);\n\t\n\t  return outerSVG;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderRect;\n\t\n\tvar _setAttributes = __webpack_require__(44);\n\t\n\tvar _setAttributes2 = _interopRequireDefault(_setAttributes);\n\t\n\tvar _normalizeColor = __webpack_require__(45);\n\t\n\tvar _normalizeColor2 = _interopRequireDefault(_normalizeColor);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Create SVGRectElements from an annotation definition.\n\t * This is used for anntations of type `area` and `highlight`.\n\t *\n\t * @param {Object} a The annotation definition\n\t * @return {SVGGElement|SVGRectElement} A group of all rects to be rendered\n\t */\n\tfunction renderRect(a) {\n\t  if (a.type === 'highlight') {\n\t    var group = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n\t    (0, _setAttributes2.default)(group, {\n\t      fill: (0, _normalizeColor2.default)(a.color || '#ff0'),\n\t      fillOpacity: 0.2\n\t    });\n\t\n\t    a.rectangles.forEach(function (r) {\n\t      group.appendChild(createRect(r));\n\t    });\n\t\n\t    return group;\n\t  } else {\n\t    var rect = createRect(a);\n\t    (0, _setAttributes2.default)(rect, {\n\t      stroke: (0, _normalizeColor2.default)(a.color || '#f00'),\n\t      fill: 'none'\n\t    });\n\t\n\t    return rect;\n\t  }\n\t}\n\t\n\tfunction createRect(r) {\n\t  var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n\t\n\t  (0, _setAttributes2.default)(rect, {\n\t    x: r.x,\n\t    y: r.y,\n\t    width: r.width,\n\t    height: r.height\n\t  });\n\t\n\t  return rect;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderText;\n\t\n\tvar _setAttributes = __webpack_require__(44);\n\t\n\tvar _setAttributes2 = _interopRequireDefault(_setAttributes);\n\t\n\tvar _normalizeColor = __webpack_require__(45);\n\t\n\tvar _normalizeColor2 = _interopRequireDefault(_normalizeColor);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Create SVGTextElement from an annotation definition.\n\t * This is used for anntations of type `textbox`.\n\t *\n\t * @param {Object} a The annotation definition\n\t * @return {SVGTextElement} A text to be rendered\n\t */\n\tfunction renderText(a) {\n\t  var text = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n\t\n\t  (0, _setAttributes2.default)(text, {\n\t    x: a.x,\n\t    y: a.y + parseInt(a.size, 10),\n\t    fill: (0, _normalizeColor2.default)(a.color || '#000'),\n\t    fontSize: a.size\n\t  });\n\t  text.innerHTML = a.content;\n\t\n\t  return text;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = render;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _renderScreenReaderHints = __webpack_require__(51);\n\t\n\tvar _renderScreenReaderHints2 = _interopRequireDefault(_renderScreenReaderHints);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Render the response from PDFJSAnnotate.getStoreAdapter().getAnnotations to SVG\n\t *\n\t * @param {SVGElement} svg The SVG element to render the annotations to\n\t * @param {Object} viewport The page viewport data\n\t * @param {Object} data The response from PDFJSAnnotate.getStoreAdapter().getAnnotations\n\t * @return {Promise} Settled once rendering has completed\n\t *  A settled Promise will be either:\n\t *    - fulfilled: SVGElement\n\t *    - rejected: Error\n\t */\n\tfunction render(svg, viewport, data) {\n\t  return new Promise(function (resolve, reject) {\n\t    // Reset the content of the SVG\n\t    svg.innerHTML = '';\n\t    svg.setAttribute('data-pdf-annotate-container', true);\n\t    svg.setAttribute('data-pdf-annotate-viewport', JSON.stringify(viewport));\n\t    svg.removeAttribute('data-pdf-annotate-document');\n\t    svg.removeAttribute('data-pdf-annotate-page');\n\t\n\t    // If there's no data nothing can be done\n\t    if (!data) {\n\t      return resolve(svg);\n\t    }\n\t\n\t    svg.setAttribute('data-pdf-annotate-document', data.documentId);\n\t    svg.setAttribute('data-pdf-annotate-page', data.pageNumber);\n\t\n\t    // Make sure annotations is an array\n\t    if (!Array.isArray(data.annotations) || data.annotations.length === 0) {\n\t      return resolve(svg);\n\t    }\n\t\n\t    // Append annotation to svg\n\t    data.annotations.forEach(function (a) {\n\t      (0, _appendChild2.default)(svg, a, viewport);\n\t    });\n\t\n\t    resolve(svg);\n\t  });\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderScreenReaderHints;\n\t\n\tvar _insertScreenReaderHint = __webpack_require__(52);\n\t\n\tvar _insertScreenReaderHint2 = _interopRequireDefault(_insertScreenReaderHint);\n\t\n\tvar _initEventHandlers = __webpack_require__(58);\n\t\n\tvar _initEventHandlers2 = _interopRequireDefault(_initEventHandlers);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t// TODO This is not the right place for this to live\n\t(0, _initEventHandlers2.default)();\n\t\n\t/**\n\t * Insert hints into the DOM for screen readers.\n\t *\n\t * @param {Array} annotations The annotations that hints are inserted for\n\t */\n\tfunction renderScreenReaderHints(annotations) {\n\t  annotations = Array.isArray(annotations) ? annotations : [];\n\t\n\t  // Insert hints for each type\n\t  Object.keys(SORT_TYPES).forEach(function (type) {\n\t    var sortBy = SORT_TYPES[type];\n\t    annotations.filter(function (a) {\n\t      return a.type === type;\n\t    }).sort(sortBy).forEach(function (a, i) {\n\t      return (0, _insertScreenReaderHint2.default)(a, i + 1);\n\t    });\n\t  });\n\t}\n\t\n\t// Sort annotations first by y, then by x.\n\t// This allows hints to be injected in the order they appear,\n\t// which makes numbering them easier.\n\tfunction sortByPoint(a, b) {\n\t  if (a.y < b.y) {\n\t    return a.x - b.x;\n\t  } else {\n\t    return 1;\n\t  }\n\t}\n\t\n\t// Sort annotation by it's first rectangle\n\tfunction sortByRectPoint(a, b) {\n\t  return sortByPoint(a.rectangles[0], b.rectangles[0]);\n\t}\n\t\n\t// Sort annotation by it's first line\n\tfunction sortByLinePoint(a, b) {\n\t  var lineA = a.lines[0];\n\t  var lineB = b.lines[0];\n\t  return sortByPoint({ x: lineA[0], y: lineA[1] }, { x: lineB[0], y: lineB[1] });\n\t}\n\t\n\t// Arrange supported types and associated sort methods\n\tvar SORT_TYPES = {\n\t  'highlight': sortByRectPoint,\n\t  'strikeout': sortByRectPoint,\n\t  'drawing': sortByLinePoint,\n\t  'textbox': sortByPoint,\n\t  'point': sortByPoint,\n\t  'area': sortByPoint\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = insertScreenReaderHint;\n\t\n\tvar _createScreenReaderOnly = __webpack_require__(53);\n\t\n\tvar _createScreenReaderOnly2 = _interopRequireDefault(_createScreenReaderOnly);\n\t\n\tvar _insertElementWithinChildren = __webpack_require__(54);\n\t\n\tvar _insertElementWithinChildren2 = _interopRequireDefault(_insertElementWithinChildren);\n\t\n\tvar _insertElementWithinElement = __webpack_require__(55);\n\t\n\tvar _insertElementWithinElement2 = _interopRequireDefault(_insertElementWithinElement);\n\t\n\tvar _renderScreenReaderComments = __webpack_require__(56);\n\t\n\tvar _renderScreenReaderComments2 = _interopRequireDefault(_renderScreenReaderComments);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t// Annotation types that support comments\n\tvar COMMENT_TYPES = ['highlight', 'point', 'area'];\n\t\n\t/**\n\t * Insert a hint into the DOM for screen readers for a specific annotation.\n\t *\n\t * @param {Object} annotation The annotation to insert a hint for\n\t * @param {Number} num The number of the annotation out of all annotations of the same type\n\t */\n\tfunction insertScreenReaderHint(annotation) {\n\t  var num = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\t\n\t  switch (annotation.type) {\n\t    case 'highlight':\n\t    case 'strikeout':\n\t      var rects = annotation.rectangles;\n\t      var first = rects[0];\n\t      var last = rects[rects.length - 1];\n\t\n\t      (0, _insertElementWithinElement2.default)((0, _createScreenReaderOnly2.default)('Begin ' + annotation.type + ' annotation ' + num, annotation.uuid), first.x, first.y, annotation.page, true);\n\t\n\t      (0, _insertElementWithinElement2.default)((0, _createScreenReaderOnly2.default)('End ' + annotation.type + ' annotation ' + num, annotation.uuid + '-end'), last.x + last.width, last.y, annotation.page, false);\n\t      break;\n\t\n\t    case 'textbox':\n\t    case 'point':\n\t      var text = annotation.type === 'textbox' ? ' (content: ' + annotation.content + ')' : '';\n\t\n\t      (0, _insertElementWithinChildren2.default)((0, _createScreenReaderOnly2.default)(annotation.type + ' annotation ' + num + text, annotation.uuid), annotation.x, annotation.y, annotation.page);\n\t      break;\n\t\n\t    case 'drawing':\n\t    case 'area':\n\t      var x = typeof annotation.x !== 'undefined' ? annotation.x : annotation.lines[0][0];\n\t      var y = typeof annotation.y !== 'undefined' ? annotation.y : annotation.lines[0][1];\n\t\n\t      (0, _insertElementWithinChildren2.default)((0, _createScreenReaderOnly2.default)('Unlabeled drawing', annotation.uuid), x, y, annotation.page);\n\t      break;\n\t  }\n\t\n\t  // Include comments in screen reader hint\n\t  if (COMMENT_TYPES.includes(annotation.type)) {\n\t    (0, _renderScreenReaderComments2.default)(annotation.documentId, annotation.uuid);\n\t  }\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 53 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = createScreenReaderOnly;\n\t/**\n\t * Create a node that is only visible to screen readers\n\t *\n\t * @param {String} content The text content that should be read by screen reader\n\t * @param {String} [annotationId] The ID of the annotation assocaited\n\t * @return {Element} An Element that is only visible to screen readers\n\t */\n\tfunction createScreenReaderOnly(content, annotationId) {\n\t  var node = document.createElement('div');\n\t  var text = document.createTextNode(content);\n\t  node.appendChild(text);\n\t  node.setAttribute('id', 'pdf-annotate-screenreader-' + annotationId);\n\t  node.style.position = 'absolute';\n\t  node.style.left = '-10000px';\n\t  node.style.top = 'auto';\n\t  node.style.width = '1px';\n\t  node.style.height = '1px';\n\t  node.style.overflow = 'hidden';\n\t  return node;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = insertElementWithinChildren;\n\t\n\tvar _insertElementWithinElement = __webpack_require__(55);\n\t\n\tvar _insertElementWithinElement2 = _interopRequireDefault(_insertElementWithinElement);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\t/**\n\t * Insert an element at a point within the document.\n\t * This algorithm will try to insert between elements if possible.\n\t * It will however use `insertElementWithinElement` if it is more accurate.\n\t *\n\t * @param {Element} el The element to be inserted\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @param {Number} pageNumber The page number to limit elements to\n\t * @return {Boolean} True if element was able to be inserted, otherwise false\n\t */\n\tfunction insertElementWithinChildren(el, x, y, pageNumber) {\n\t  // Try and use most accurate method of inserting within an element\n\t  if ((0, _insertElementWithinElement2.default)(el, x, y, pageNumber, true)) {\n\t    return true;\n\t  }\n\t\n\t  // Fall back to inserting between elements\n\t  var svg = document.querySelector('svg[data-pdf-annotate-page=\"' + pageNumber + '\"]');\n\t  var rect = svg.getBoundingClientRect();\n\t  var nodes = [].concat(_toConsumableArray(svg.parentNode.querySelectorAll('.textLayer > div')));\n\t\n\t  y = (0, _utils.scaleUp)(svg, { y: y }).y + rect.top;\n\t  x = (0, _utils.scaleUp)(svg, { x: x }).x + rect.left;\n\t\n\t  // Find the best node to insert before\n\t  for (var i = 0, l = nodes.length; i < l; i++) {\n\t    var n = nodes[i];\n\t    var r = n.getBoundingClientRect();\n\t    if (y <= r.top) {\n\t      n.parentNode.insertBefore(el, n);\n\t      return true;\n\t    }\n\t  }\n\t\n\t  // If all else fails try to append to the bottom\n\t  var textLayer = svg.parentNode.querySelector('.textLayer');\n\t  if (textLayer) {\n\t    var textRect = textLayer.getBoundingClientRect();\n\t    if ((0, _utils.pointIntersectsRect)(x, y, textRect)) {\n\t      textLayer.appendChild(el);\n\t      return true;\n\t    }\n\t  }\n\t\n\t  return false;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 55 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = insertElementWithinElement;\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\t/**\n\t * Insert an element at a point within the document.\n\t * This algorithm will only insert within an element amidst it's text content.\n\t *\n\t * @param {Element} el The element to be inserted\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @param {Number} pageNumber The page number to limit elements to\n\t * @param {Boolean} insertBefore Whether the element is to be inserted before or after x\n\t * @return {Boolean} True if element was able to be inserted, otherwise false\n\t */\n\tfunction insertElementWithinElement(el, x, y, pageNumber, insertBefore) {\n\t  var OFFSET_ADJUST = 2;\n\t\n\t  // If inserting before adjust `x` by looking for element a few px to the right\n\t  // Otherwise adjust a few px to the left\n\t  // This is to allow a little tolerance by searching within the box, instead\n\t  // of getting a false negative by testing right on the border.\n\t  x = Math.max(x + OFFSET_ADJUST * (insertBefore ? 1 : -1), 0);\n\t\n\t  var node = textLayerElementFromPoint(x, y + OFFSET_ADJUST, pageNumber);\n\t  if (!node) {\n\t    return false;\n\t  }\n\t\n\t  // Now that node has been found inverse the adjustment for `x`.\n\t  // This is done to accomodate tolerance by cutting off on the outside of the\n\t  // text boundary, instead of missing a character by cutting off within.\n\t  x = x + OFFSET_ADJUST * (insertBefore ? -1 : 1);\n\t\n\t  var svg = document.querySelector('svg[data-pdf-annotate-page=\"' + pageNumber + '\"]');\n\t  var left = (0, _utils.scaleDown)(svg, { left: node.getBoundingClientRect().left }).left - svg.getBoundingClientRect().left;\n\t  var temp = node.cloneNode(true);\n\t  var head = temp.innerHTML.split('');\n\t  var tail = [];\n\t\n\t  // Insert temp off screen\n\t  temp.style.position = 'absolute';\n\t  temp.style.top = '-10000px';\n\t  temp.style.left = '-10000px';\n\t  document.body.appendChild(temp);\n\t\n\t  while (head.length) {\n\t    // Don't insert within HTML tags\n\t    if (head[head.length - 1] === '>') {\n\t      while (head.length) {\n\t        tail.unshift(head.pop());\n\t        if (tail[0] === '<') {\n\t          break;\n\t        }\n\t      }\n\t    }\n\t\n\t    // Check if width of temp based on current head value satisfies x\n\t    temp.innerHTML = head.join('');\n\t    var width = (0, _utils.scaleDown)(svg, { width: temp.getBoundingClientRect().width }).width;\n\t    if (left + width <= x) {\n\t      break;\n\t    }\n\t    tail.unshift(head.pop());\n\t  }\n\t\n\t  // Update original node with new markup, including element to be inserted\n\t  node.innerHTML = head.join('') + el.outerHTML + tail.join('');\n\t  temp.parentNode.removeChild(temp);\n\t\n\t  return true;\n\t}\n\t\n\t/**\n\t * Get a text layer element at a given point on a page\n\t *\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @param {Number} pageNumber The page to limit elements to\n\t * @return {Element} First text layer element found at the point\n\t */\n\tfunction textLayerElementFromPoint(x, y, pageNumber) {\n\t  var svg = document.querySelector('svg[data-pdf-annotate-page=\"' + pageNumber + '\"]');\n\t  var rect = svg.getBoundingClientRect();\n\t  y = (0, _utils.scaleUp)(svg, { y: y }).y + rect.top;\n\t  x = (0, _utils.scaleUp)(svg, { x: x }).x + rect.left;\n\t  return [].concat(_toConsumableArray(svg.parentNode.querySelectorAll('.textLayer [data-canvas-width]'))).filter(function (el) {\n\t    return (0, _utils.pointIntersectsRect)(x, y, el.getBoundingClientRect());\n\t  })[0];\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderScreenReaderComments;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _insertScreenReaderComment = __webpack_require__(57);\n\t\n\tvar _insertScreenReaderComment2 = _interopRequireDefault(_insertScreenReaderComment);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Insert the comments into the DOM to be available by screen reader\n\t *\n\t * Example output:\n\t *   <div class=\"screenReaderOnly\">\n\t *    <div>Begin highlight 1</div>\n\t *    <ol aria-label=\"Comments\">\n\t *      <li>Foo</li>\n\t *      <li>Bar</li>\n\t *      <li>Baz</li>\n\t *      <li>Qux</li>\n\t *    </ol>\n\t *  </div>\n\t *  <div>Some highlighted text goes here...</div>\n\t *  <div class=\"screenReaderOnly\">End highlight 1</div>\n\t *\n\t * NOTE: `screenReaderOnly` is not a real class, just used for brevity\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {String} annotationId The ID of the annotation\n\t * @param {Array} [comments] Optionally preloaded comments to be rendered\n\t * @return {Promise}\n\t */\n\tfunction renderScreenReaderComments(documentId, annotationId, comments) {\n\t  var promise = void 0;\n\t\n\t  if (Array.isArray(comments)) {\n\t    promise = Promise.resolve(comments);\n\t  } else {\n\t    promise = _PDFJSAnnotate2.default.getStoreAdapter().getComments(documentId, annotationId);\n\t  }\n\t\n\t  return promise.then(function (comments) {\n\t    // Node needs to be found by querying DOM as it may have been inserted as innerHTML\n\t    // leaving `screenReaderNode` as an invalid reference (see `insertElementWithinElement`).\n\t    var node = document.getElementById('pdf-annotate-screenreader-' + annotationId);\n\t    if (node) {\n\t      var list = document.createElement('ol');\n\t      list.setAttribute('id', 'pdf-annotate-screenreader-comment-list-' + annotationId);\n\t      list.setAttribute('aria-label', 'Comments');\n\t      node.appendChild(list);\n\t      comments.forEach(_insertScreenReaderComment2.default);\n\t    }\n\t  });\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 57 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = insertScreenReaderComment;\n\t/**\n\t * Insert a comment into the DOM to be available by screen reader\n\t *\n\t * @param {Object} comment The comment to be inserted\n\t */\n\tfunction insertScreenReaderComment(comment) {\n\t  if (!comment) {\n\t    return;\n\t  }\n\t\n\t  var list = document.querySelector('#pdf-annotate-screenreader-' + comment.annotation + ' ol');\n\t  if (list) {\n\t    var item = document.createElement('li');\n\t    item.setAttribute('id', 'pdf-annotate-screenreader-comment-' + comment.uuid);\n\t    item.appendChild(document.createTextNode('' + comment.content));\n\t    list.appendChild(item);\n\t  }\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = initEventHandlers;\n\t\n\tvar _insertScreenReaderHint = __webpack_require__(52);\n\t\n\tvar _insertScreenReaderHint2 = _interopRequireDefault(_insertScreenReaderHint);\n\t\n\tvar _renderScreenReaderHints = __webpack_require__(51);\n\t\n\tvar _renderScreenReaderHints2 = _interopRequireDefault(_renderScreenReaderHints);\n\t\n\tvar _insertScreenReaderComment = __webpack_require__(57);\n\t\n\tvar _insertScreenReaderComment2 = _interopRequireDefault(_insertScreenReaderComment);\n\t\n\tvar _renderScreenReaderComments = __webpack_require__(56);\n\t\n\tvar _renderScreenReaderComments2 = _interopRequireDefault(_renderScreenReaderComments);\n\t\n\tvar _event = __webpack_require__(4);\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Initialize the event handlers for keeping screen reader hints synced with data\n\t */\n\tfunction initEventHandlers() {\n\t  (0, _event.addEventListener)('annotation:add', function (documentId, pageNumber, annotation) {\n\t    reorderAnnotationsByType(documentId, pageNumber, annotation.type);\n\t  });\n\t  (0, _event.addEventListener)('annotation:edit', function (documentId, annotationId, annotation) {\n\t    reorderAnnotationsByType(documentId, annotation.page, annotation.type);\n\t  });\n\t  (0, _event.addEventListener)('annotation:delete', removeAnnotation);\n\t  (0, _event.addEventListener)('comment:add', insertComment);\n\t  (0, _event.addEventListener)('comment:update', updateComment);\n\t  (0, _event.addEventListener)('comment:delete', removeComment);\n\t}\n\t\n\t/**\n\t * Reorder the annotation numbers by annotation type\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {Number} pageNumber The page number of the annotations\n\t * @param {Strig} type The annotation type\n\t */\n\tfunction reorderAnnotationsByType(documentId, pageNumber, type) {\n\t  _PDFJSAnnotate2.default.getStoreAdapter().getAnnotations(documentId).then(function (annotationsByPage) {\n\t    var annotations = [];\n\t    var _iteratorNormalCompletion = true;\n\t    var _didIteratorError = false;\n\t    var _iteratorError = undefined;\n\t\n\t    try {\n\t      for (var _iterator = Object.keys(annotationsByPage)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t        var page = _step.value;\n\t\n\t        for (var annotation in annotationsByPage[page]) {\n\t          if (annotation.type == type) annotations.push(annotation);\n\t        }\n\t      }\n\t    } catch (err) {\n\t      _didIteratorError = true;\n\t      _iteratorError = err;\n\t    } finally {\n\t      try {\n\t        if (!_iteratorNormalCompletion && _iterator.return) {\n\t          _iterator.return();\n\t        }\n\t      } finally {\n\t        if (_didIteratorError) {\n\t          throw _iteratorError;\n\t        }\n\t      }\n\t    }\n\t\n\t    return annotations;\n\t    //   annotationsByPage(page) =\n\t    //       return annotationsByPage[page].filter((a) => {\n\t    //         return a.type === type;\n\t    //       });\n\t    // return annotationsByPage;\n\t  }).then(function (annotations) {\n\t    annotations.forEach(function (a) {\n\t      removeAnnotation(documentId, a.uuid);\n\t    });\n\t\n\t    return annotations;\n\t  }).then(_renderScreenReaderHints2.default);\n\t}\n\t\n\t/**\n\t * Remove the screen reader hint for an annotation\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {String} annotationId The Id of the annotation\n\t */\n\tfunction removeAnnotation(documentId, annotationId) {\n\t  removeElementById('pdf-annotate-screenreader-' + annotationId);\n\t  removeElementById('pdf-annotate-screenreader-' + annotationId + '-end');\n\t}\n\t\n\t/**\n\t * Insert a screen reader hint for a comment\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {String} annotationId The ID of tha assocated annotation\n\t * @param {Object} comment The comment to insert a hint for\n\t */\n\tfunction insertComment(documentId, annotationId, comment) {\n\t  var list = document.querySelector('pdf-annotate-screenreader-comment-list-' + annotationId);\n\t  var promise = void 0;\n\t\n\t  if (!list) {\n\t    promise = (0, _renderScreenReaderComments2.default)(documentId, annotationId, []).then(function () {\n\t      list = document.querySelector('pdf-annotate-screenreader-comment-list-' + annotationId);\n\t      return true;\n\t    });\n\t  } else {\n\t    promise = Promise.resolve(true);\n\t  }\n\t\n\t  promise.then(function () {\n\t    (0, _insertScreenReaderComment2.default)(comment);\n\t  });\n\t}\n\t\n\t/**\n\t * Update a comment content\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {String} annotationId The ID of tha assocated annotation\n\t * @param {Object} comment The comment to insert a hint for\n\t */\n\tfunction updateComment(documentId, annotationId, comment) {\n\t  alert('updateComment');\n\t}\n\t\n\t/**\n\t * Remove a screen reader hint for a comment\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {String} commentId The ID of the comment\n\t */\n\tfunction removeComment(documentId, commentId) {\n\t  removeElementById('pdf-annotate-screenreader-comment-' + commentId);\n\t}\n\t\n\t/**\n\t * Remove an element from the DOM by it's ID if it exists\n\t *\n\t * @param {String} elementID The ID of the element to be removed\n\t */\n\tfunction removeElementById(elementId) {\n\t  var el = document.getElementById(elementId);\n\t  if (el) {\n\t    el.parentNode.removeChild(el);\n\t  }\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _event = __webpack_require__(4);\n\t\n\tvar _edit = __webpack_require__(40);\n\t\n\tvar _pen = __webpack_require__(60);\n\t\n\tvar _point = __webpack_require__(61);\n\t\n\tvar _rect = __webpack_require__(62);\n\t\n\tvar _text = __webpack_require__(63);\n\t\n\tvar _page = __webpack_require__(64);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\texports.default = {\n\t  addEventListener: _event.addEventListener, removeEventListener: _event.removeEventListener, fireEvent: _event.fireEvent,\n\t  disableEdit: _edit.disableEdit, enableEdit: _edit.enableEdit,\n\t  disablePen: _pen.disablePen, enablePen: _pen.enablePen, setPen: _pen.setPen,\n\t  disablePoint: _point.disablePoint, enablePoint: _point.enablePoint,\n\t  disableRect: _rect.disableRect, enableRect: _rect.enableRect,\n\t  disableText: _text.disableText, enableText: _text.enableText, setText: _text.setText,\n\t  createPage: _page.createPage, renderPage: _page.renderPage,\n\t  setActiveToolbarItem: _utils.setActiveToolbarItem\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.setPen = setPen;\n\texports.enablePen = enablePen;\n\texports.disablePen = disablePen;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar _enabled = false;\n\tvar _penSize = void 0;\n\tvar _penColor = void 0;\n\tvar path = void 0;\n\tvar lines = void 0;\n\t\n\t/**\n\t * Handle document.mousedown event\n\t */\n\tfunction handleDocumentMousedown() {\n\t  path = null;\n\t  lines = [];\n\t\n\t  document.addEventListener('mousemove', handleDocumentMousemove);\n\t  document.addEventListener('mouseup', handleDocumentMouseup);\n\t}\n\t\n\t/**\n\t * Handle document.mouseup event\n\t *\n\t * @param {Event} e The DOM event to be handled\n\t */\n\tfunction handleDocumentMouseup(e) {\n\t  var svg = void 0;\n\t  if (lines.length > 1 && (svg = (0, _utils.findSVGAtPoint)(e.clientX, e.clientY))) {\n\t    var _getMetadata = (0, _utils.getMetadata)(svg),\n\t        documentId = _getMetadata.documentId,\n\t        pageNumber = _getMetadata.pageNumber;\n\t\n\t    _PDFJSAnnotate2.default.getStoreAdapter().addAnnotation(documentId, pageNumber, {\n\t      type: 'drawing',\n\t      width: _penSize,\n\t      color: _penColor,\n\t      lines: lines\n\t    }).then(function (annotation) {\n\t      if (path) {\n\t        svg.removeChild(path);\n\t      }\n\t\n\t      (0, _appendChild2.default)(svg, annotation);\n\t    });\n\t  }\n\t\n\t  document.removeEventListener('mousemove', handleDocumentMousemove);\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t}\n\t\n\t/**\n\t * Handle document.mousemove event\n\t *\n\t * @param {Event} e The DOM event to be handled\n\t */\n\tfunction handleDocumentMousemove(e) {\n\t  savePoint(e.clientX, e.clientY);\n\t}\n\t\n\t/**\n\t * Handle document.keyup event\n\t *\n\t * @param {Event} e The DOM event to be handled\n\t */\n\tfunction handleDocumentKeyup(e) {\n\t  // Cancel rect if Esc is pressed\n\t  if (e.keyCode === 27) {\n\t    lines = null;\n\t    path.parentNode.removeChild(path);\n\t    document.removeEventListener('mousemove', handleDocumentMousemove);\n\t    document.removeEventListener('mouseup', handleDocumentMouseup);\n\t  }\n\t}\n\t\n\t/**\n\t * Save a point to the line being drawn.\n\t *\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t */\n\tfunction savePoint(x, y) {\n\t  var svg = (0, _utils.findSVGAtPoint)(x, y);\n\t  if (!svg) {\n\t    return;\n\t  }\n\t\n\t  var rect = svg.getBoundingClientRect();\n\t  var point = (0, _utils.scaleDown)(svg, {\n\t    x: x - rect.left,\n\t    y: y - rect.top\n\t  });\n\t\n\t  lines.push([point.x, point.y]);\n\t\n\t  if (lines.length <= 1) {\n\t    return;\n\t  }\n\t\n\t  if (path) {\n\t    svg.removeChild(path);\n\t  }\n\t\n\t  path = (0, _appendChild2.default)(svg, {\n\t    type: 'drawing',\n\t    color: _penColor,\n\t    width: _penSize,\n\t    lines: lines\n\t  });\n\t}\n\t\n\t/**\n\t * Set the attributes of the pen.\n\t *\n\t * @param {Number} penSize The size of the lines drawn by the pen\n\t * @param {String} penColor The color of the lines drawn by the pen\n\t */\n\tfunction setPen() {\n\t  var penSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\t  var penColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '000000';\n\t\n\t  _penSize = parseInt(penSize, 10);\n\t  _penColor = penColor;\n\t}\n\t\n\t/**\n\t * Enable the pen behavior\n\t */\n\tfunction enablePen() {\n\t  if (_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = true;\n\t  document.addEventListener('mousedown', handleDocumentMousedown);\n\t  document.addEventListener('keyup', handleDocumentKeyup);\n\t  (0, _utils.disableUserSelect)();\n\t}\n\t\n\t/**\n\t * Disable the pen behavior\n\t */\n\tfunction disablePen() {\n\t  if (!_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = false;\n\t  document.removeEventListener('mousedown', handleDocumentMousedown);\n\t  document.removeEventListener('keyup', handleDocumentKeyup);\n\t  (0, _utils.enableUserSelect)();\n\t}\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.enablePoint = enablePoint;\n\texports.disablePoint = disablePoint;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar _enabled = false;\n\tvar input = void 0;\n\t\n\t/**\n\t * Handle document.mouseup event\n\t *\n\t * @param {Event} The DOM event to be handled\n\t */\n\tfunction handleDocumentMouseup(e) {\n\t\n\t  if (input || !(0, _utils.findSVGAtPoint)(e.clientX, e.clientY)) {\n\t    return;\n\t  }\n\t\n\t  input = document.createElement('textarea');\n\t  input.setAttribute('id', 'pdf-annotate-point-input');\n\t  input.setAttribute('placeholder', 'Saisir un commentaire');\n\t  input.style.border = '3px solid ' + _utils.BORDER_COLOR;\n\t  input.style.borderRadius = '3px';\n\t  input.style.position = 'absolute';\n\t  input.style.top = e.clientY + 'px';\n\t  input.style.left = e.clientX + 'px';\n\t  input.style.width = '220px';\n\t  input.style.height = '130px';\n\t\n\t  input.addEventListener('blur', handleInputBlur);\n\t  input.addEventListener('keyup', handleInputKeyup);\n\t\n\t  document.body.appendChild(input);\n\t  input.focus();\n\t}\n\t\n\t/**\n\t * Handle input.blur event\n\t */\n\tfunction handleInputBlur() {\n\t  savePoint();\n\t}\n\t\n\t/**\n\t * Handle input.keyup event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleInputKeyup(e) {\n\t  if (e.keyCode === 27) {\n\t    closeInput();\n\t  } else if (e.keyCode === 13) {\n\t    savePoint();\n\t  }\n\t}\n\t\n\t/**\n\t * Save a new point annotation from input\n\t */\n\tfunction savePoint() {\n\t  if (input.value.trim().length > 0) {\n\t    var clientX = parseInt(input.style.left, 10);\n\t    var clientY = parseInt(input.style.top, 10);\n\t    var content = input.value.trim();\n\t    var svg = (0, _utils.findSVGAtPoint)(clientX, clientY);\n\t    if (!svg) {\n\t      return;\n\t    }\n\t\n\t    var rect = svg.getBoundingClientRect();\n\t\n\t    var _getMetadata = (0, _utils.getMetadata)(svg),\n\t        documentId = _getMetadata.documentId,\n\t        pageNumber = _getMetadata.pageNumber;\n\t\n\t    var annotation = Object.assign({\n\t      type: 'point'\n\t    }, (0, _utils.scaleDown)(svg, {\n\t      x: clientX - rect.left,\n\t      y: clientY - rect.top\n\t    }));\n\t\n\t    _PDFJSAnnotate2.default.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation).then(function (annotation) {\n\t      _PDFJSAnnotate2.default.getStoreAdapter().addComment(documentId, annotation.uuid, content);\n\t\n\t      (0, _appendChild2.default)(svg, annotation);\n\t    });\n\t  }\n\t\n\t  closeInput();\n\t}\n\t\n\t/**\n\t * Close the input element\n\t */\n\tfunction closeInput() {\n\t  input.removeEventListener('blur', handleInputBlur);\n\t  input.removeEventListener('keyup', handleInputKeyup);\n\t  document.body.removeChild(input);\n\t  input = null;\n\t}\n\t\n\t/**\n\t * Enable point annotation behavior\n\t */\n\tfunction enablePoint() {\n\t  if (_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = true;\n\t  document.addEventListener('mouseup', handleDocumentMouseup);\n\t}\n\t\n\t/**\n\t * Disable point annotation behavior\n\t */\n\tfunction disablePoint() {\n\t  if (!_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = false;\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t}\n\n/***/ },\n/* 62 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.enableRect = enableRect;\n\texports.disableRect = disableRect;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\tvar _enabled = false;\n\tvar _type = void 0;\n\tvar overlay = void 0;\n\tvar originY = void 0;\n\tvar originX = void 0;\n\t\n\t/**\n\t * Get the current window selection as rects\n\t *\n\t * @return {Array} An Array of rects\n\t */\n\tfunction getSelectionRects() {\n\t  try {\n\t    var selection = window.getSelection();\n\t    var range = selection.getRangeAt(0);\n\t    var rects = range.getClientRects();\n\t\n\t    if (rects.length > 0 && rects[0].width > 0 && rects[0].height > 0) {\n\t      return rects;\n\t    }\n\t  } catch (e) {}\n\t\n\t  return null;\n\t}\n\t\n\t/**\n\t * Handle document.mousedown event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleDocumentMousedown(e) {\n\t  var svg = void 0;\n\t  if (_type !== 'area' || !(svg = (0, _utils.findSVGAtPoint)(e.clientX, e.clientY))) {\n\t    return;\n\t  }\n\t\n\t  var rect = svg.getBoundingClientRect();\n\t  originY = e.clientY;\n\t  originX = e.clientX;\n\t\n\t  overlay = document.createElement('div');\n\t  overlay.style.position = 'absolute';\n\t  overlay.style.top = originY - rect.top + 'px';\n\t  overlay.style.left = originX - rect.left + 'px';\n\t  overlay.style.border = '3px solid ' + _utils.BORDER_COLOR;\n\t  overlay.style.borderRadius = '3px';\n\t  svg.parentNode.appendChild(overlay);\n\t\n\t  document.addEventListener('mousemove', handleDocumentMousemove);\n\t  (0, _utils.disableUserSelect)();\n\t}\n\t\n\t/**\n\t * Handle document.mousemove event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleDocumentMousemove(e) {\n\t  var svg = overlay.parentNode.querySelector('svg.annotationLayer');\n\t  var rect = svg.getBoundingClientRect();\n\t\n\t  if (originX + (e.clientX - originX) < rect.right) {\n\t    overlay.style.width = e.clientX - originX + 'px';\n\t  }\n\t\n\t  if (originY + (e.clientY - originY) < rect.bottom) {\n\t    overlay.style.height = e.clientY - originY + 'px';\n\t  }\n\t}\n\t\n\t/**\n\t * Handle document.mouseup event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleDocumentMouseup(e) {\n\t  var rects = void 0;\n\t  if (_type !== 'area' && (rects = getSelectionRects())) {\n\t    var svg = (0, _utils.findSVGAtPoint)(rects[0].left, rects[0].top);\n\t    saveRect(_type, [].concat(_toConsumableArray(rects)).map(function (r) {\n\t      return {\n\t        top: r.top,\n\t        left: r.left,\n\t        width: r.width,\n\t        height: r.height\n\t      };\n\t    }));\n\t  } else if (_type === 'area' && overlay) {\n\t    var _svg = overlay.parentNode.querySelector('svg.annotationLayer');\n\t    var rect = _svg.getBoundingClientRect();\n\t    saveRect(_type, [{\n\t      top: parseInt(overlay.style.top, 10) + rect.top,\n\t      left: parseInt(overlay.style.left, 10) + rect.left,\n\t      width: parseInt(overlay.style.width, 10),\n\t      height: parseInt(overlay.style.height, 10)\n\t    }]);\n\t\n\t    overlay.parentNode.removeChild(overlay);\n\t    overlay = null;\n\t\n\t    document.removeEventListener('mousemove', handleDocumentMousemove);\n\t    (0, _utils.enableUserSelect)();\n\t  }\n\t}\n\t\n\t/**\n\t * Handle document.keyup event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleDocumentKeyup(e) {\n\t  // Cancel rect if Esc is pressed\n\t  if (e.keyCode === 27) {\n\t    var selection = window.getSelection();\n\t    selection.removeAllRanges();\n\t    if (overlay && overlay.parentNode) {\n\t      overlay.parentNode.removeChild(overlay);\n\t      overlay = null;\n\t      document.removeEventListener('mousemove', handleDocumentMousemove);\n\t    }\n\t  }\n\t}\n\t\n\t/**\n\t * Save a rect annotation\n\t *\n\t * @param {String} type The type of rect (area, highlight, strikeout)\n\t * @param {Array} rects The rects to use for annotation\n\t * @param {String} color The color of the rects\n\t */\n\tfunction saveRect(type, rects, color) {\n\t  var svg = (0, _utils.findSVGAtPoint)(rects[0].left, rects[0].top);\n\t  var node = void 0;\n\t  var annotation = void 0;\n\t\n\t  if (!svg) {\n\t    return;\n\t  }\n\t\n\t  var boundingRect = svg.getBoundingClientRect();\n\t\n\t  if (!color) {\n\t    if (type === 'highlight') {\n\t      color = 'FFFF00';\n\t    } else if (type === 'strikeout') {\n\t      color = 'FF0000';\n\t    }\n\t  }\n\t\n\t  // Initialize the annotation\n\t  annotation = {\n\t    type: type,\n\t    color: color,\n\t    rectangles: [].concat(_toConsumableArray(rects)).map(function (r) {\n\t      var offset = 0;\n\t\n\t      if (type === 'strikeout') {\n\t        offset = r.height / 2;\n\t      }\n\t\n\t      return (0, _utils.scaleDown)(svg, {\n\t        y: r.top + offset - boundingRect.top,\n\t        x: r.left - boundingRect.left,\n\t        width: r.width,\n\t        height: r.height\n\t      });\n\t    }).filter(function (r) {\n\t      return r.width > 0 && r.height > 0 && r.x > -1 && r.y > -1;\n\t    })\n\t  };\n\t\n\t  // Short circuit if no rectangles exist\n\t  if (annotation.rectangles.length === 0) {\n\t    return;\n\t  }\n\t\n\t  // Special treatment for area as it only supports a single rect\n\t  if (type === 'area') {\n\t    var rect = annotation.rectangles[0];\n\t    delete annotation.rectangles;\n\t    annotation.x = rect.x;\n\t    annotation.y = rect.y;\n\t    annotation.width = rect.width;\n\t    annotation.height = rect.height;\n\t  }\n\t\n\t  var _getMetadata = (0, _utils.getMetadata)(svg),\n\t      documentId = _getMetadata.documentId,\n\t      pageNumber = _getMetadata.pageNumber;\n\t\n\t  // Add the annotation\n\t\n\t\n\t  _PDFJSAnnotate2.default.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation).then(function (annotation) {\n\t    (0, _appendChild2.default)(svg, annotation);\n\t  });\n\t}\n\t\n\t/**\n\t * Enable rect behavior\n\t */\n\tfunction enableRect(type) {\n\t  _type = type;\n\t\n\t  if (_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = true;\n\t  document.addEventListener('mouseup', handleDocumentMouseup);\n\t  document.addEventListener('mousedown', handleDocumentMousedown);\n\t  document.addEventListener('keyup', handleDocumentKeyup);\n\t}\n\t\n\t/**\n\t * Disable rect behavior\n\t */\n\tfunction disableRect() {\n\t  if (!_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = false;\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t  document.removeEventListener('mousedown', handleDocumentMousedown);\n\t  document.removeEventListener('keyup', handleDocumentKeyup);\n\t}\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.setText = setText;\n\texports.enableText = enableText;\n\texports.disableText = disableText;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar _enabled = false;\n\tvar input = void 0;\n\tvar _textSize = void 0;\n\tvar _textColor = void 0;\n\t\n\t/**\n\t * Handle document.mouseup event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleDocumentMouseup(e) {\n\t  if (input || !(0, _utils.findSVGAtPoint)(e.clientX, e.clientY)) {\n\t    return;\n\t  }\n\t\n\t  input = document.createElement('input');\n\t  input.setAttribute('id', 'pdf-annotate-text-input');\n\t  input.setAttribute('placeholder', 'Enter text');\n\t  input.style.border = '3px solid ' + _utils.BORDER_COLOR;\n\t  input.style.borderRadius = '3px';\n\t  input.style.position = 'absolute';\n\t  input.style.top = e.clientY + 'px';\n\t  input.style.left = e.clientX + 'px';\n\t  input.style.fontSize = _textSize + 'px';\n\t\n\t  input.addEventListener('blur', handleInputBlur);\n\t  input.addEventListener('keyup', handleInputKeyup);\n\t\n\t  document.body.appendChild(input);\n\t  input.focus();\n\t}\n\t\n\t/**\n\t * Handle input.blur event\n\t */\n\tfunction handleInputBlur() {\n\t  saveText();\n\t}\n\t\n\t/**\n\t * Handle input.keyup event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleInputKeyup(e) {\n\t  if (e.keyCode === 27) {\n\t    closeInput();\n\t  } else if (e.keyCode === 13) {\n\t    saveText();\n\t  }\n\t}\n\t\n\t/**\n\t * Save a text annotation from input\n\t */\n\tfunction saveText() {\n\t  if (input.value.trim().length > 0) {\n\t    var clientX = parseInt(input.style.left, 10);\n\t    var clientY = parseInt(input.style.top, 10);\n\t    var svg = (0, _utils.findSVGAtPoint)(clientX, clientY);\n\t    if (!svg) {\n\t      return;\n\t    }\n\t\n\t    var _getMetadata = (0, _utils.getMetadata)(svg),\n\t        documentId = _getMetadata.documentId,\n\t        pageNumber = _getMetadata.pageNumber;\n\t\n\t    var rect = svg.getBoundingClientRect();\n\t    var annotation = Object.assign({\n\t      type: 'textbox',\n\t      size: _textSize,\n\t      color: _textColor,\n\t      content: input.value.trim()\n\t    }, (0, _utils.scaleDown)(svg, {\n\t      x: clientX - rect.left,\n\t      y: clientY - rect.top,\n\t      width: input.offsetWidth,\n\t      height: input.offsetHeight\n\t    }));\n\t\n\t    _PDFJSAnnotate2.default.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation).then(function (annotation) {\n\t      (0, _appendChild2.default)(svg, annotation);\n\t    });\n\t  }\n\t\n\t  closeInput();\n\t}\n\t\n\t/**\n\t * Close the input\n\t */\n\tfunction closeInput() {\n\t  try {\n\t    if (input) {\n\t      input.removeEventListener('blur', handleInputBlur);\n\t      input.removeEventListener('keyup', handleInputKeyup);\n\t      document.body.removeChild(input);\n\t      input = null;\n\t    }\n\t  } catch (e) {\n\t    console.log('Try/catch is necessary because exist a error in Safari');\n\t  }\n\t}\n\t\n\t/**\n\t * Set the text attributes\n\t *\n\t * @param {Number} textSize The size of the text\n\t * @param {String} textColor The color of the text\n\t */\n\tfunction setText() {\n\t  var textSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12;\n\t  var textColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '000000';\n\t\n\t  _textSize = parseInt(textSize, 10);\n\t  _textColor = textColor;\n\t}\n\t\n\t/**\n\t * Enable text behavior\n\t */\n\tfunction enableText() {\n\t  if (_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = true;\n\t  document.addEventListener('mouseup', handleDocumentMouseup);\n\t}\n\t\n\t/**\n\t * Disable text behavior\n\t */\n\tfunction disableText() {\n\t  if (!_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = false;\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t}\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\texports.createPage = createPage;\n\texports.renderPage = renderPage;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _renderScreenReaderHints = __webpack_require__(51);\n\t\n\tvar _renderScreenReaderHints2 = _interopRequireDefault(_renderScreenReaderHints);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t// Template for creating a new page\n\tvar PAGE_TEMPLATE = '\\n  <div style=\"visibility: hidden;\" class=\"page\" data-loaded=\"false\">\\n    <div class=\"canvasWrapper\">\\n      <canvas></canvas>\\n    </div>\\n    <svg class=\"annotationLayer\"></svg>\\n    <div class=\"textLayer\"></div>\\n  </div>\\n';\n\t\n\t/**\n\t * Create a new page to be appended to the DOM.\n\t *\n\t * @param {Number} pageNumber The page number that is being created\n\t * @return {HTMLElement}\n\t */\n\tfunction createPage(pageNumber) {\n\t  var temp = document.createElement('div');\n\t  temp.innerHTML = PAGE_TEMPLATE;\n\t\n\t  var page = temp.children[0];\n\t  var canvas = page.querySelector('canvas');\n\t\n\t  page.setAttribute('id', 'pageContainer' + pageNumber);\n\t  page.setAttribute('data-page-number', pageNumber);\n\t\n\t  canvas.mozOpaque = true;\n\t  canvas.setAttribute('id', 'page' + pageNumber);\n\t\n\t  // let svg = page.querySelector('.');\n\t  //   // let svg = document.body;\n\t  // console.log(svg)\n\t  // // let svg = document.getElementById();\n\t  //\n\t  // document.addEventListener('click', function handleDocumentClick(e) {\n\t  //   console.log(click)\n\t  //     if (!findSVGAtPoint(e.clientX, e.clientY)) {\n\t  //         return;\n\t  //     }\n\t  //\n\t  //     let target = findAnnotationAtPoint(e.clientX, e.clientY);\n\t  //\n\t  //     // Emit annotation:blur if clickNode is no longer clicked\n\t  //     if (clickNode && clickNode !== target) {\n\t  //         emitter.emit('annotation:blur', clickNode);\n\t  //     }\n\t  //\n\t  //     // Emit annotation:click if target was clicked\n\t  //     if (target) {\n\t  //         emitter.emit('annotation:click', target);\n\t  //     }\n\t  //\n\t  //     clickNode = target;\n\t  // });\n\t\n\t  return page;\n\t}\n\t\n\t/**\n\t * Render a page that has already been created.\n\t *\n\t * @param {Number} pageNumber The page number to be rendered\n\t * @param {Object} renderOptions The options for rendering\n\t * @return {Promise} Settled once rendering has completed\n\t *  A settled Promise will be either:\n\t *    - fulfilled: [pdfPage, annotations]\n\t *    - rejected: Error\n\t */\n\tfunction renderPage(pageNumber, annotations, renderOptions) {\n\t  var documentId = renderOptions.documentId,\n\t      pdfDocument = renderOptions.pdfDocument,\n\t      scale = renderOptions.scale,\n\t      rotate = renderOptions.rotate;\n\t\n\t  // Load the page and annotations\n\t\n\t  return Promise.all([pdfDocument.getPage(pageNumber)]).then(function (_ref) {\n\t    var _ref2 = _slicedToArray(_ref, 1),\n\t        pdfPage = _ref2[0];\n\t\n\t    var page = document.getElementById('pageContainer' + pageNumber);\n\t    var svg = page.querySelector('.annotationLayer');\n\t    var canvas = page.querySelector('.canvasWrapper canvas');\n\t    var canvasContext = canvas.getContext('2d', { alpha: false });\n\t    var viewport = pdfPage.getViewport(scale);\n\t    var transform = scalePage(pageNumber, viewport, canvasContext);\n\t\n\t    // Render the page\n\t    return Promise.all([pdfPage.render({ canvasContext: canvasContext, viewport: viewport, transform: transform }), _PDFJSAnnotate2.default.render(svg, viewport, { pageNumber: pageNumber, documentId: documentId, annotations: annotations[pageNumber] })]).then(function () {\n\t      // Text content is needed for a11y, but is also necessary for creating\n\t      // highlight and strikeout annotations which require selecting text.\n\t      return pdfPage.getTextContent({ normalizeWhitespace: true }).then(function (textContent) {\n\t        return new Promise(function (resolve, reject) {\n\t          // Render text layer for a11y of text content\n\t          var textLayer = page.querySelector('.textLayer');\n\t          var textLayerFactory = new pdfjsViewer.DefaultTextLayerFactory();\n\t          var textLayerBuilder = textLayerFactory.createTextLayerBuilder(textLayer, pageNumber - 1, viewport);\n\t          textLayerBuilder.setTextContent(textContent);\n\t          textLayerBuilder.render();\n\t\n\t          // Enable a11y for annotations\n\t          // Timeout is needed to wait for `textLayerBuilder.render`\n\t          setTimeout(function () {\n\t            try {\n\t              (0, _renderScreenReaderHints2.default)(annotations.annotations);\n\t              resolve();\n\t            } catch (e) {\n\t              reject(e);\n\t            }\n\t          });\n\t        });\n\t      });\n\t    }).then(function () {\n\t      // Indicate that the page was loaded\n\t      page.setAttribute('data-loaded', 'true');\n\t\n\t      return [pdfPage, annotations];\n\t    });\n\t  });\n\t}\n\t\n\t/**\n\t * Scale the elements of a page.\n\t *\n\t * @param {Number} pageNumber The page number to be scaled\n\t * @param {Object} viewport The viewport of the PDF page (see pdfPage.getViewport(scale, rotate))\n\t * @param {Object} context The canvas context that the PDF page is rendered to\n\t * @return {Array} The transform data for rendering the PDF page\n\t */\n\tfunction scalePage(pageNumber, viewport, context) {\n\t  var page = document.getElementById('pageContainer' + pageNumber);\n\t  var canvas = page.querySelector('.canvasWrapper canvas');\n\t  var svg = page.querySelector('.annotationLayer');\n\t  var wrapper = page.querySelector('.canvasWrapper');\n\t  var textLayer = page.querySelector('.textLayer');\n\t  var outputScale = getOutputScale(context);\n\t  var transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0];\n\t  var sfx = approximateFraction(outputScale.sx);\n\t  var sfy = approximateFraction(outputScale.sy);\n\t\n\t  // Adjust width/height for scale\n\t  page.style.visibility = '';\n\t  canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]);\n\t  canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]);\n\t  canvas.style.width = roundToDivide(viewport.width, sfx[1]) + 'px';\n\t  canvas.style.height = roundToDivide(viewport.height, sfx[1]) + 'px';\n\t  svg.setAttribute('width', viewport.width);\n\t  svg.setAttribute('height', viewport.height);\n\t  svg.style.width = viewport.width + 'px';\n\t  svg.style.height = viewport.height + 'px';\n\t  page.style.width = viewport.width + 'px';\n\t  page.style.height = viewport.height + 'px';\n\t  wrapper.style.width = viewport.width + 'px';\n\t  wrapper.style.height = viewport.height + 'px';\n\t  textLayer.style.width = viewport.width + 'px';\n\t  textLayer.style.height = viewport.height + 'px';\n\t\n\t  return transform;\n\t}\n\t\n\t/**\n\t * The following methods are taken from mozilla/pdf.js and as such fall under\n\t * the Apache License (http://www.apache.org/licenses/).\n\t *\n\t * Original source can be found at mozilla/pdf.js:\n\t * https://github.com/mozilla/pdf.js/blob/master/web/ui_utils.js\n\t */\n\t\n\t/**\n\t * Approximates a float number as a fraction using Farey sequence (max order\n\t * of 8).\n\t *\n\t * @param {Number} x Positive float number\n\t * @return {Array} Estimated fraction: the first array item is a numerator,\n\t *                 the second one is a denominator.\n\t */\n\tfunction approximateFraction(x) {\n\t  // Fast path for int numbers or their inversions.\n\t  if (Math.floor(x) === x) {\n\t    return [x, 1];\n\t  }\n\t\n\t  var xinv = 1 / x;\n\t  var limit = 8;\n\t  if (xinv > limit) {\n\t    return [1, limit];\n\t  } else if (Math.floor(xinv) === xinv) {\n\t    return [1, xinv];\n\t  }\n\t\n\t  var x_ = x > 1 ? xinv : x;\n\t\n\t  // a/b and c/d are neighbours in Farey sequence.\n\t  var a = 0,\n\t      b = 1,\n\t      c = 1,\n\t      d = 1;\n\t\n\t  // Limit search to order 8.\n\t  while (true) {\n\t    // Generating next term in sequence (order of q).\n\t    var p = a + c,\n\t        q = b + d;\n\t    if (q > limit) {\n\t      break;\n\t    }\n\t    if (x_ <= p / q) {\n\t      c = p;d = q;\n\t    } else {\n\t      a = p;b = q;\n\t    }\n\t  }\n\t\n\t  // Select closest of neighbours to x.\n\t  if (x_ - a / b < c / d - x_) {\n\t    return x_ === x ? [a, b] : [b, a];\n\t  } else {\n\t    return x_ === x ? [c, d] : [d, c];\n\t  }\n\t}\n\t\n\tfunction getOutputScale(ctx) {\n\t  var devicePixelRatio = window.devicePixelRatio || 1;\n\t  var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;\n\t  var pixelRatio = devicePixelRatio / backingStoreRatio;\n\t  return {\n\t    sx: pixelRatio,\n\t    sy: pixelRatio,\n\t    scaled: pixelRatio !== 1\n\t  };\n\t}\n\t\n\tfunction roundToDivide(x, div) {\n\t  var r = x % div;\n\t  return r === 0 ? x : Math.round(x - r + div);\n\t}\n\n/***/ },\n/* 65 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = initColorPicker;\n\t// Color picker component\n\tvar COLORS = [{ hex: '#000000', name: 'Black' }, { hex: '#EF4437', name: 'Red' }, { hex: '#E71F63', name: 'Pink' }, { hex: '#8F3E97', name: 'Purple' }, { hex: '#65499D', name: 'Deep Purple' }, { hex: '#4554A4', name: 'Indigo' }, { hex: '#2083C5', name: 'Blue' }, { hex: '#35A4DC', name: 'Light Blue' }, { hex: '#09BCD3', name: 'Cyan' }, { hex: '#009688', name: 'Teal' }, { hex: '#43A047', name: 'Green' }, { hex: '#8BC34A', name: 'Light Green' }, { hex: '#FDC010', name: 'Yellow' }, { hex: '#F8971C', name: 'Orange' }, { hex: '#F0592B', name: 'Deep Orange' }, { hex: '#F06291', name: 'Light Pink' }];\n\t\n\tfunction initColorPicker(el, value, onChange) {\n\t  function setColor(value) {\n\t    var fireOnChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\t\n\t    currentValue = value;\n\t    a.setAttribute('data-color', value);\n\t    a.style.background = value;\n\t    if (fireOnChange && typeof onChange === 'function') {\n\t      onChange(value);\n\t    }\n\t    closePicker();\n\t  }\n\t\n\t  function togglePicker() {\n\t    if (isPickerOpen) {\n\t      closePicker();\n\t    } else {\n\t      openPicker();\n\t    }\n\t  }\n\t\n\t  function closePicker() {\n\t    document.removeEventListener('keyup', handleDocumentKeyup);\n\t    if (picker && picker.parentNode) {\n\t      picker.parentNode.removeChild(picker);\n\t    }\n\t    isPickerOpen = false;\n\t    a.focus();\n\t  }\n\t\n\t  function openPicker() {\n\t    if (!picker) {\n\t      picker = document.createElement('div');\n\t      picker.style.background = '#fff';\n\t      picker.style.border = '1px solid #ccc';\n\t      picker.style.padding = '2px';\n\t      picker.style.position = 'absolute';\n\t      picker.style.width = '122px';\n\t      el.style.position = 'relative';\n\t\n\t      COLORS.map(createColorOption).forEach(function (c) {\n\t        c.style.margin = '2px';\n\t        c.onclick = function () {\n\t          setColor(c.getAttribute('data-color'));\n\t        };\n\t        picker.appendChild(c);\n\t      });\n\t    }\n\t\n\t    document.addEventListener('keyup', handleDocumentKeyup);\n\t    el.appendChild(picker);\n\t    isPickerOpen = true;\n\t  }\n\t\n\t  function createColorOption(color) {\n\t    var e = document.createElement('a');\n\t    e.className = 'color';\n\t    e.setAttribute('href', 'javascript://');\n\t\n\t    if (color.name) e.setAttribute('title', color.name);else e.setAttribute('title', 'Choisir une couleur');\n\t\n\t    e.setAttribute('data-color', color.hex);\n\t    e.style.background = color.hex;\n\t    return e;\n\t  }\n\t\n\t  function handleDocumentKeyup(e) {\n\t    if (e.keyCode === 27) {\n\t      closePicker();\n\t    }\n\t  }\n\t\n\t  var picker = void 0;\n\t  var isPickerOpen = false;\n\t  var currentValue = void 0;\n\t  var a = createColorOption({ hex: value });\n\t  a.onclick = togglePicker;\n\t  el.appendChild(a);\n\t  setColor(value, false);\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** static/pdfannotator/pdf-annotate.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap c806f426ae1e6db611f9\n **/","import PDFJSAnnotate from './PDFJSAnnotate';\nimport {documentId, documentUrl, readonly} from './initFile';\n\nimport twitter from 'twitter-text';\nimport initColorPicker from './initColorPicker';\n\nconst { UI } = PDFJSAnnotate;\nimport {renderComments} from \"./UI/comments\";\n\nlet PAGE_HEIGHT;\nlet RENDER_OPTIONS = {\n  documentId:documentUrl,\n  pdfDocument: null,\n    enhanceTextSelection:true,\n  scale: parseFloat(localStorage.getItem(`${documentId}/scale`), 10) || 1.33\n  // rotate: parseInt(localStorage.getItem(`${documentId}/rotate`), 10) || 0\n};\n\nPDFJSAnnotate.setStoreAdapter(new PDFJSAnnotate.CRFPAStoreAdapter());\n// pdfjsLib.workerSrc = '/static/pdfannotator/pdf.worker.js';\n\n// Render stuff\n\n// let renderedPages = {};\n// document.getElementById('content-wrapper').addEventListener('scroll', function (e) {\n//   let visiblePageNum = Math.round(e.target.scrollTop / PAGE_HEIGHT) + 1;\n//   let visiblePage = document.querySelector(`.page[data-page-number=\"${visiblePageNum}\"][data-loaded=\"false\"]`);\n//   if (visiblePage) {\n//     // Prevent invoking UI.renderPage on the same page more than once.\n// \tif ( !renderedPages[visiblePageNum] ) {\n// \t  renderedPages[visiblePageNum] = true;\n// \t  setTimeout(function () {\n// \t\tUI.renderPage(visiblePageNum, RENDER_OPTIONS);\n// \t  });\n// \t}\n//   }\n// });\n\nlet NUM_PAGES = 0;\nfunction render() {\n\n  pdfjsLib.getDocument(RENDER_OPTIONS.documentId).then((pdf) => {\n    RENDER_OPTIONS.pdfDocument = pdf;\n\n    let viewer = document.getElementById('viewer');\n    viewer.innerHTML = '';\n    NUM_PAGES = pdf._pdfInfo.numPages;\n    for (let i=0; i<NUM_PAGES; i++) {\n      let page = UI.createPage(i+1);\n      viewer.appendChild(page);\n    }\n\n    PDFJSAnnotate.getAnnotations(documentId).then((annotations)=>{\n      for(let num = 1; num <= NUM_PAGES; num++) {\n          pdf.getPage(num).then(function () {\n            UI.renderPage(num, annotations, RENDER_OPTIONS).then(([pdfPage, annotations]) => {\n              let viewport = pdfPage.getViewport(RENDER_OPTIONS.scale);\n              PAGE_HEIGHT = viewport.height;\n              if($.browser.mozilla)\n                $('.textLayer>.endOfContent').remove();\n            });\n\n          });\n      }\n    });\n  });\n}\nrender();\n\n\nvar setActiveToolbarItem = function setActiveToolbarItem(type, button) {\n    let tooltype = localStorage.getItem(`${RENDER_OPTIONS.documentId}/tooltype`) || 'cursor';\n    let active = document.querySelector('.toolbar button.active');\n    if (active) {\n        active.classList.remove('active');\n\n        switch (tooltype) {\n            case 'cursor':\n                UI.disableEdit();\n                break;\n            case 'draw':\n                UI.disablePen();\n                break;\n            case 'text':\n                UI.disableText();\n                break;\n            case 'point':\n                UI.disablePoint();\n                break;\n            case 'area':\n            case 'highlight':\n            case 'strikeout':\n                UI.disableRect();\n                break;\n        }\n    }\n\n    if (button) {\n        button.classList.add('active');\n    }\n    if (tooltype !== type) {\n        localStorage.setItem(`${RENDER_OPTIONS.documentId}/tooltype`, type);\n    }\n    tooltype = type;\n\n    switch (type) {\n        case 'cursor':\n            UI.enableEdit();\n            break;\n        case 'draw':\n            UI.enablePen();\n            break;\n        case 'text':\n            UI.enableText();\n            break;\n        case 'point':\n            UI.enablePoint();\n            break;\n        case 'area':\n        case 'highlight':\n        case 'strikeout':\n            UI.enableRect(type);\n            break;\n    }\n}\nPDFJSAnnotate.setActiveToolbarItem = setActiveToolbarItem;\n\n\n\nif(!readonly) {\n// Text stuff\n    (function () {\n        let textSize;\n        let textColor;\n\n        function initText() {\n            // let size = document.querySelector('.toolbar .text-size');\n            // [8, 9, 10, 11, 12, 14, 18, 24, 30, 36, 48, 60, 72, 96].forEach((s) => {\n            //     size.appendChild(new Option(s, s));\n            // });\n            //\n            // setText(\n            //     localStorage.getItem(`${RENDER_OPTIONS.documentId}/text/size`) || 12,\n            //     localStorage.getItem(`${RENDER_OPTIONS.documentId}/text/color`) || '#EF4437'\n            // );\n            setText(\n                12, '#EF4437'\n            );\n\n            // initColorPicker(document.querySelector('.text-color'), textColor, function (value) {\n            //     setText(textSize, value);\n            // });\n        }\n\n        function setText(size, color) {\n            // let modified = false;\n            //\n            // if (textSize !== size) {\n            //     modified = true;\n            //     textSize = size;\n            //     localStorage.setItem(`${RENDER_OPTIONS.documentId}/text/size`, textSize);\n            //     // document.querySelector('.toolbar .text-size').value = textSize;\n            // }\n            //\n            // if (textColor !== color) {\n            //     modified = true;\n            //     textColor = color;\n            //     localStorage.setItem(`${RENDER_OPTIONS.documentId}/text/color`, textColor);\n            //\n            //     let selected = document.querySelector('.toolbar .text-color.color-selected');\n            //     if (selected) {\n            //         selected.classList.remove('color-selected');\n            //         selected.removeAttribute('aria-selected');\n            //     }\n            //\n            //     selected = document.querySelector(`.toolbar .text-color[data-color=\"${color}\"]`);\n            //     if (selected) {\n            //         selected.classList.add('color-selected');\n            //         selected.setAttribute('aria-selected', true);\n            //     }\n            //\n            // }\n\n            // if (modified) {\n                UI.setText(size, color);\n            // }\n        }\n\n        // function handleTextSizeChange(e) {\n        //     setText(e.target.value, textColor);\n        // }\n\n        // document.querySelector('.toolbar .text-size').addEventListener('change', handleTextSizeChange);\n\n        initText();\n    })();\n\n// Pen stuff\n    (function () {\n        let penSize;\n        let penColor;\n\n        function initPen() {\n            let size = document.querySelector('.toolbar .pen-size');\n            for (let i = 0; i < 20; i++) {\n                size.appendChild(new Option(i + 1, i + 1));\n            }\n\n            setPen(\n                localStorage.getItem(`${RENDER_OPTIONS.documentId}/pen/size`) || 1,\n                localStorage.getItem(`${RENDER_OPTIONS.documentId}/pen/color`) || '#000000'\n            );\n\n            initColorPicker(document.querySelector('.pen-color'), penColor, function (value) {\n                setPen(penSize, value);\n            });\n        }\n\n        function setPen(size, color) {\n            let modified = false;\n\n            if (penSize !== size) {\n                modified = true;\n                penSize = size;\n                localStorage.setItem(`${RENDER_OPTIONS.documentId}/pen/size`, penSize);\n                document.querySelector('.toolbar .pen-size').value = penSize;\n            }\n\n            if (penColor !== color) {\n                modified = true;\n                penColor = color;\n                localStorage.setItem(`${RENDER_OPTIONS.documentId}/pen/color`, penColor);\n\n                let selected = document.querySelector('.toolbar .pen-color.color-selected');\n                if (selected) {\n                    selected.classList.remove('color-selected');\n                    selected.removeAttribute('aria-selected');\n                }\n\n                selected = document.querySelector(`.toolbar .pen-color[data-color=\"${color}\"]`);\n                if (selected) {\n                    selected.classList.add('color-selected');\n                    selected.setAttribute('aria-selected', true);\n                }\n            }\n\n            if (modified) {\n                UI.setPen(penSize, penColor);\n            }\n        }\n\n        function handlePenSizeChange(e) {\n            setPen(e.target.value, penColor);\n        }\n\n        document.querySelector('.toolbar .pen-size').addEventListener('change', handlePenSizeChange);\n\n        initPen();\n    })();\n\n// Toolbar buttons\n    (function () {\n        let tooltype = localStorage.getItem(`${RENDER_OPTIONS.documentId}/tooltype`) || 'cursor';\n        if (tooltype) {\n            setActiveToolbarItem(tooltype, document.querySelector(`.toolbar button[data-tooltype=${tooltype}]`));\n        }\n\n\n\n        function handleToolbarClick(e) {\n            if (e.target.nodeName === 'BUTTON') {\n                setActiveToolbarItem(e.target.getAttribute('data-tooltype'), e.target);\n            }\n        }\n\n        document.querySelector('.toolbar').addEventListener('click', handleToolbarClick);\n    })();\n}\n\nif(readonly)\n  UI.enableEdit();\n\n// Scale/rotate\n(function () {\n  function setScaleRotate(scale, rotate) {\n    scale = parseFloat(scale, 10);\n    rotate = parseInt(rotate, 10);\n\n    if (RENDER_OPTIONS.scale !== scale || RENDER_OPTIONS.rotate !== rotate) {\n      RENDER_OPTIONS.scale = scale;\n      RENDER_OPTIONS.rotate = rotate;\n\n      localStorage.setItem(`${RENDER_OPTIONS.documentId}/scale`, RENDER_OPTIONS.scale);\n      localStorage.setItem(`${RENDER_OPTIONS.documentId}/rotate`, RENDER_OPTIONS.rotate % 360);\n\n      render();\n    }\n  }\n\n  function handleScaleChange(e) {\n    setScaleRotate(e.target.value, RENDER_OPTIONS.rotate);\n  }\n\n  function handleRotateCWClick() {\n    setScaleRotate(RENDER_OPTIONS.scale, RENDER_OPTIONS.rotate + 90);\n  }\n\n  function handleRotateCCWClick() {\n    setScaleRotate(RENDER_OPTIONS.scale, RENDER_OPTIONS.rotate - 90);\n  }\n\n  document.querySelector('.toolbar select.scale').value = RENDER_OPTIONS.scale;\n  document.querySelector('.toolbar select.scale').addEventListener('change', handleScaleChange);\n  // document.querySelector('.toolbar .rotate-ccw').addEventListener('click', handleRotateCCWClick);\n  // document.querySelector('.toolbar .rotate-cw').addEventListener('click', handleRotateCWClick);\n})();\n\n\nrenderComments(documentId);\n\n\nexport default PDFJSAnnotate;\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","import StoreAdapter from './adapter/StoreAdapter';\nimport CRFPAStoreAdapter from './adapter/CRFPAStoreAdapter';\nimport render from './render';\nimport UI from './UI';\n\nexport default {\n  /**\n   * Abstract class that needs to be defined so PDFJSAnnotate\n   * knows how to communicate with your server.\n   */\n  StoreAdapter,\n\n  /**\n   * Implementation of StoreAdapter that stores annotation data to localStorage.\n   */\n  CRFPAStoreAdapter,\n\n  /**\n   * Abstract instance of StoreAdapter\n   */\n  __storeAdapter: new StoreAdapter(),\n\n  /**\n   * Getter for the underlying StoreAdapter property\n   *\n   * @return {StoreAdapter}\n   */\n  getStoreAdapter() {\n    return this.__storeAdapter;\n  },\n\n  /**\n   * Setter for the underlying StoreAdapter property\n   *\n   * @param {StoreAdapter} adapter The StoreAdapter implementation to be used.\n   */\n  setStoreAdapter(adapter) {\n    // TODO this throws an error when bundled\n    // if (!(adapter instanceof StoreAdapter)) {\n    //   throw new Error('adapter must be an instance of StoreAdapter');\n    // }\n\n    this.__storeAdapter = adapter;\n  },\n\n  /**\n   * UI is a helper for instrumenting UI interactions for creating,\n   * editing, and deleting annotations in the browser.\n   */\n  UI,\n\n  /**\n   * Render the annotations for a page in the PDF Document\n   *\n   * @param {SVGElement} svg The SVG element that annotations should be rendered to\n   * @param {PageViewport} viewport The PDFPage.getViewport data\n   * @param {Object} data The StoreAdapter.getAnnotations data\n   * @return {Promise}\n   */\n  render,\n\n  /**\n   * Convenience method for getting annotation data\n   *\n   * @alias StoreAdapter.getAnnotations\n   * @param {String} documentId The ID of the document\n   * @return {Promise}\n   */\n  getAnnotations(documentId) {\n    return this.getStoreAdapter().getAnnotations(...arguments);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/PDFJSAnnotate.js\n **/","import abstractFunction from '../utils/abstractFunction';\nimport { fireEvent } from '../UI/event';\n\n// Adapter should never be invoked publicly\nexport default class StoreAdapter {\n  /**\n   * Create a new StoreAdapter instance\n   *\n   * @param {Object} [definition] The definition to use for overriding abstract methods\n   */\n  constructor(definition = {}) {\n    // Copy each function from definition if it is a function we know about\n    Object.keys(definition).forEach((key) => {\n      if (typeof definition[key] === 'function' &&\n          typeof this[key] === 'function') {\n        this[key] = definition[key];\n      }\n    });\n  }\n\n  /**\n   * Get all the annotations for a given document and page number.\n   *\n   * @param {String} documentId The ID for the document the annotations belong to\n   * @param {Number} pageNumber The number of the page the annotations belong to\n   * @return {Promise}\n   */\n  __getAnnotations(documentId) { abstractFunction('getAnnotations'); }\n  get getAnnotations() { return this.__getAnnotations; }\n  set getAnnotations(fn) {\n    this.__getAnnotations = function getAnnotations(documentId) {\n      return fn(...arguments).then((annotations) => {\n        // TODO may be best to have this happen on the server\n        // if (annotations) {\n        //   annotations.forEach((a) => {\n        //     a.documentId = documentId;\n        //   });\n        // }\n        return annotations;\n      });\n    };\n  }\n\n  /**\n   * Get the definition for a specific annotation.\n   *\n   * @param {String} documentId The ID for the document the annotation belongs to\n   * @param {String} annotationId The ID for the annotation\n   * @return {Promise}\n   */\n  getAnnotation(documentId, annotationId) { abstractFunction('getAnnotation'); }\n\n  /**\n   * Add an annotation\n   *\n   * @param {String} documentId The ID for the document to add the annotation to\n   * @param {String} pageNumber The page number to add the annotation to\n   * @param {Object} annotation The definition for the new annotation\n   * @return {Promise}\n   */\n  __addAnnotation(documentId, pageNumber, annotation) { abstractFunction('addAnnotation'); }\n  get addAnnotation() { return this.__addAnnotation; }\n  set addAnnotation(fn) {\n    this.__addAnnotation = function addAnnotation(documentId, pageNumber, annotation) {\n      return fn(...arguments).then((annotation) => {\n        fireEvent('annotation:add', documentId, pageNumber, annotation);\n        return annotation;\n      });\n    };\n  }\n\n  /**\n   * Edit an annotation\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} pageNumber the page number of the annotation\n   * @param {Object} annotation The definition of the modified annotation\n   * @return {Promise}\n   */\n  __editAnnotation(documentId, pageNumber, annotation) { abstractFunction('editAnnotation'); }\n  get editAnnotation() { return this.__editAnnotation; }\n  set editAnnotation(fn) {\n    this.__editAnnotation = function editAnnotation(documentId, annotationId, annotation) {\n      return fn(...arguments).then((annotation) => {\n        fireEvent('annotation:edit', documentId, annotationId, annotation);\n        return annotation;\n      });\n    };\n  }\n\n  /**\n   * Delete an annotation\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} annotationId The ID for the annotation\n   * @return {Promise}\n   */\n  __deleteAnnotation(documentId, annotationId) { abstractFunction('deleteAnnotation'); }\n  get deleteAnnotation() { return this.__deleteAnnotation; }\n  set deleteAnnotation(fn) {\n    this.__deleteAnnotation = function deleteAnnotation(documentId, annotationId) {\n      return fn(...arguments).then((success) => {\n        if (success) {\n          fireEvent('annotation:delete', documentId, annotationId);\n        }\n        return success;\n      });\n    };\n  }\n\n  /**\n   * Get all the comments for an annotation\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} annotationId The ID for the annotation\n   * @return {Promise}\n   */\n  getComments(documentId, annotationId) { abstractFunction('getComments'); }\n\n  /**\n   * Add a new comment\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} annotationId The ID for the annotation\n   * @param {Object} content The definition of the comment\n   * @return {Promise}\n   */\n  __addComment(documentId, annotationId, content) { abstractFunction('addComment'); }\n  get addComment() { return this.__addComment; }\n  set addComment(fn) {\n    this.__addComment = function addComment(documentId, annotationId, content) {\n      return fn(...arguments).then((comment) => {\n        fireEvent('comment:add', documentId, annotationId, comment);\n        return comment;\n      });\n    };\n  }\n\n  /**\n   * Update a new comment\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} annotationId The ID for the annotation\n   * @param {Object} content The definition of the comment\n   * @return {Promise}\n   */\n  __updateComment(documentId, annotationId, content) { abstractFunction('addComment'); }\n  get updateComment() { return this.__updateComment; }\n  set updateComment(fn) {\n    this.__updateComment = function updateComment(documentId, annotationId, content) {\n      return fn(...arguments).then((comment) => {\n        fireEvent('comment:updated', documentId, annotationId, comment);\n        return comment;\n      });\n    };\n  }\n\n  /**\n   * Delete a comment\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} commentId The ID for the comment\n   * @return {Promise}\n   */\n  __deleteComment(documentId, commentId) { abstractFunction('deleteComment'); }\n  get deleteComment() { return this.__deleteComment; }\n  set deleteComment(fn) {\n    this.__deleteComment = function deleteComment(documentId, commentId) {\n      return fn(...arguments).then((success) => {\n        if (success) {\n          fireEvent('comment:delete', documentId, commentId);\n        }\n        return success;\n      });\n    };\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/adapter/StoreAdapter.js\n **/","/**\n * Throw an Error for an abstract function that hasn't been implemented.\n *\n * @param {String} name The name of the abstract function\n */\nexport default function abstractFunction(name) {\n  throw new Error(name + ' is not implemented');\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/abstractFunction.js\n **/","import EventEmitter from 'events';\nimport {\n  findAnnotationAtPoint,\n  findSVGAtPoint\n} from './utils';\n\nconst emitter = new EventEmitter;\n\nlet clickNode;\n\n/**\n * Handle document.click event\n *\n * @param {Event} e The DOM event to be handled\n */\n// document.addEventListener('mousedown', function handleDocumentClick(e) {\n\ndocument.addEventListener('click', function handleDocumentClick(e) {\n  if (!findSVGAtPoint(e.clientX, e.clientY)) { return; }\n\n  let target = findAnnotationAtPoint(e.clientX, e.clientY);\n\n  // Emit annotation:blur if clickNode is no longer clicked\n  if (clickNode && clickNode !== target) {\n    emitter.emit('annotation:blur', clickNode);\n  }\n\n  // Emit annotation:click if target was clicked\n  if (target) {\n    emitter.emit('annotation:click', target);\n  }\n\n  clickNode = target;\n});\n\n// let mouseOverNode;\n// document.addEventListener('mousemove', function handleDocumentMousemove(e) {\n//   let target = findAnnotationAtPoint(e.clientX, e.clientY);\n//\n//   // Emit annotation:mouseout if target was mouseout'd\n//   if (mouseOverNode && !target) {\n//     emitter.emit('annotation:mouseout', mouseOverNode);\n//   }\n//\n//   // Emit annotation:mouseover if target was mouseover'd\n//   if (target && mouseOverNode !== target) {\n//     emitter.emit('annotation:mouseover', target);\n//   }\n//\n//   mouseOverNode = target;\n// });\n\nexport function fireEvent() { emitter.emit(...arguments); };\nexport function addEventListener() { emitter.on(...arguments); };\nexport function removeEventListener() { emitter.removeListener(...arguments); };\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/event.js\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n\n    if (isFunction(evlistener))\n      return 1;\n    else if (evlistener)\n      return evlistener.length;\n  }\n  return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/events/events.js\n ** module id = 5\n ** module chunks = 0\n **/","import createStyleSheet from 'create-stylesheet';\n\nexport const BORDER_COLOR = '#00BFFF';\n\nconst userSelectStyleSheet = createStyleSheet({\n  body: {\n    '-webkit-user-select': 'none',\n       '-moz-user-select': 'none',\n        '-ms-user-select': 'none',\n            'user-select': 'none'\n  }\n});\nuserSelectStyleSheet.setAttribute('data-pdf-annotate-user-select', 'true');\n\n/**\n * Find the SVGElement that contains all the annotations for a page\n *\n * @param {Element} node An annotation within that container\n * @return {SVGElement} The container SVG or null if it can't be found\n */\nexport function findSVGContainer(node) {\n  let parentNode = node;\n\n  while ((parentNode = parentNode.parentNode) &&\n          parentNode !== document) {\n    if (parentNode.nodeName.toUpperCase() === 'SVG' &&\n        parentNode.getAttribute('data-pdf-annotate-container') === 'true') {\n      return parentNode;\n    }\n  }\n\n  return null;\n}\n\n\n/**\n * Find an SVGElement container at a given point\n *\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @return {SVGElement} The container SVG or null if one can't be found\n */\nexport function findSVGAtPoint(x, y) {\n  let elements = document.querySelectorAll('svg[data-pdf-annotate-container=\"true\"]');\n  for (let i=0, l=elements.length; i<l; i++) {\n    let el = elements[i];\n    let rect = el.getBoundingClientRect();\n\n    if (pointIntersectsRect(x, y, rect)) {\n      return el;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Find an Element that represents an annotation at a given point\n *\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @return {Element} The annotation element or null if one can't be found\n */\nexport function findAnnotationAtPoint(x, y) {\n  let svg = findSVGAtPoint(x, y);\n  if (!svg) { return; }\n  let elements = svg.querySelectorAll('[data-pdf-annotate-type]');\n\n  // Find a target element within SVG\n  for (let i=0, l=elements.length; i<l; i++) {\n    let el = elements[i];\n    if (pointIntersectsRect(x, y, getOffsetAnnotationRect(el))) {\n      return el;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Determine if a point intersects a rect\n *\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @param {Object} rect The points of a rect (likely from getBoundingClientRect)\n * @return {Boolean} True if a collision occurs, otherwise false\n */\nexport function pointIntersectsRect(x, y, rect) {\n  return y >= rect.top && y <= rect.bottom && x >= rect.left && x <= rect.right;\n}\n\n/**\n * Get the rect of an annotation element accounting for offset.\n *\n * @param {Element} el The element to get the rect of\n * @return {Object} The dimensions of the element\n */\nexport function getOffsetAnnotationRect(el) {\n  let rect = getAnnotationRect(el);\n  let { offsetLeft, offsetTop } = getOffset(el);\n\n  return {\n    top: rect.top + offsetTop,\n    left: rect.left + offsetLeft,\n    right: rect.right + offsetLeft,\n    bottom: rect.bottom + offsetTop\n  };\n}\n\n/**\n * Get the rect of an annotation element.\n *\n * @param {Element} el The element to get the rect of\n * @return {Object} The dimensions of the element\n */\nexport function getAnnotationRect(el) {\n  let h = 0, w = 0, x = 0, y = 0;\n  let rect = el.getBoundingClientRect();\n  // TODO this should be calculated somehow\n  const LINE_OFFSET = 16;\n  // debugger;\n  switch (el.nodeName.toLowerCase()) {\n    case 'path':\n    let minX, maxX, minY, maxY;\n\n    el.getAttribute('d').replace(/Z/, '').split('M').splice(1).forEach((p) => {\n      var s = p.split(' ').map(i => parseInt(i, 10));\n\n      if (typeof minX === 'undefined' || s[0] < minX) { minX = s[0]; }\n      if (typeof maxX === 'undefined' || s[2] > maxX) { maxX = s[2]; }\n      if (typeof minY === 'undefined' || s[1] < minY) { minY = s[1]; }\n      if (typeof maxY === 'undefined' || s[3] > maxY) { maxY = s[3]; }\n    });\n\n    h = maxY - minY;\n    w = maxX - minX;\n    x = minX;\n    y = minY;\n    break;\n\n    case 'line':\n    h = parseInt(el.getAttribute('y2'), 10) - parseInt(el.getAttribute('y1'), 10);\n    w = parseInt(el.getAttribute('x2'), 10) - parseInt(el.getAttribute('x1'), 10);\n    x = parseInt(el.getAttribute('x1'), 10);\n    y = parseInt(el.getAttribute('y1'), 10);\n\n    if (h === 0) {\n      h += LINE_OFFSET;\n      y -= (LINE_OFFSET / 2);\n    }\n    break;\n\n    case 'text':\n    h = rect.height;\n    w = rect.width;\n    x = parseInt(el.getAttribute('x'), 10);\n    y = parseInt(el.getAttribute('y'), 10) - h;\n    break;\n\n    case 'g':\n    let { offsetLeft, offsetTop } = getOffset(el);\n    h = rect.height;\n    w = rect.width;\n    x = rect.left - offsetLeft;\n    y = rect.top - offsetTop;\n\n    if (el.getAttribute('data-pdf-annotate-type') === 'strikeout') {\n      h += LINE_OFFSET;\n      y -= (LINE_OFFSET / 2);\n    }\n    break;\n\n    case 'rect':\n    case 'svg':\n    h = parseInt(el.getAttribute('height'), 10);\n    w = parseInt(el.getAttribute('width'), 10);\n    x = parseInt(el.getAttribute('x'), 10);\n    y = parseInt(el.getAttribute('y'), 10);\n    break;\n  }\n\n  // Result provides same properties as getBoundingClientRect\n  let result = {\n    top: y,\n    left: x,\n    width: w,\n    height: h,\n    right: x + w,\n    bottom: y + h\n  };\n\n  // For the case of nested SVG (point annotations) and grouped\n  // lines or rects no adjustment needs to be made for scale.\n  // I assume that the scale is already being handled\n  // natively by virtue of the `transform` attribute.\n  if (!['svg', 'g'].includes(el.nodeName.toLowerCase())) {\n    result = scaleUp(findSVGAtPoint(rect.left, rect.top), result);\n  }\n\n  // // comment point need to be scaled on FF\n  if(el.nodeName.toLowerCase() == 'svg' && $.browser.mozilla){\n    result = scaleUp(findSVGAtPoint(rect.left, rect.top), result);\n  }\n\n  return result;\n}\n\n/**\n * Adjust scale from normalized scale (100%) to rendered scale.\n *\n * @param {SVGElement} svg The SVG to gather metadata from\n * @param {Object} rect A map of numeric values to scale\n * @return {Object} A copy of `rect` with values scaled up\n */\nexport function scaleUp(svg, rect) {\n  let result = {};\n  let { viewport } = getMetadata(svg);\n\n  Object.keys(rect).forEach((key) => {\n    result[key] = rect[key] * viewport.scale;\n  });\n\n  return result;\n}\n\n/**\n * Adjust scale from rendered scale to a normalized scale (100%).\n *\n * @param {SVGElement} svg The SVG to gather metadata from\n * @param {Object} rect A map of numeric values to scale\n * @return {Object} A copy of `rect` with values scaled down\n */\nexport function scaleDown(svg, rect) {\n  let result = {};\n  let { viewport } = getMetadata(svg);\n\n  Object.keys(rect).forEach((key) => {\n    result[key] = rect[key] / viewport.scale;\n  });\n\n  return result;\n}\n\n/**\n * Get the scroll position of an element, accounting for parent elements\n *\n * @param {Element} el The element to get the scroll position for\n * @return {Object} The scrollTop and scrollLeft position\n */\nexport function getScroll(el) {\n  let scrollTop = 0;\n  let scrollLeft = 0;\n  let parentNode = el;\n\n  while ((parentNode = parentNode.parentNode) &&\n          parentNode !== document) {\n    scrollTop += parentNode.scrollTop;\n    scrollLeft += parentNode.scrollLeft;\n  }\n\n  return { scrollTop, scrollLeft };\n}\n\n/**\n * Get the offset position of an element, accounting for parent elements\n *\n * @param {Element} el The element to get the offset position for\n * @return {Object} The offsetTop and offsetLeft position\n */\nexport function getOffset(el) {\n  let parentNode = el;\n\n  while ((parentNode = parentNode.parentNode) &&\n          parentNode !== document) {\n    if (parentNode.nodeName.toUpperCase() === 'SVG') {\n      break;\n    }\n  }\n\n  let rect = parentNode.getBoundingClientRect();\n\n  return { offsetLeft: rect.left, offsetTop: rect.top };\n}\n\n/**\n * Disable user ability to select text on page\n */\nexport function disableUserSelect() {\n  if (!userSelectStyleSheet.parentNode) {\n    document.head.appendChild(userSelectStyleSheet);\n  }\n}\n\n\n/**\n * Enable user ability to select text on page\n */\nexport function enableUserSelect() {\n  if (userSelectStyleSheet.parentNode) {\n    userSelectStyleSheet.parentNode.removeChild(userSelectStyleSheet);\n  }\n}\n\n/**\n * Get the metadata for a SVG container\n *\n * @param {SVGElement} svg The SVG container to get metadata for\n */\nexport function getMetadata(svg) {\n  return {\n    documentId: svg.getAttribute('data-pdf-annotate-document'),\n    pageNumber: parseInt(svg.getAttribute('data-pdf-annotate-page'), 10),\n    viewport: JSON.parse(svg.getAttribute('data-pdf-annotate-viewport'))\n  };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/utils.js\n **/","module.exports = function createStyleSheet(blocks) {\n  var style = document.createElement('style');\n  var text = Object.keys(blocks).map(function (selector) {\n    return processRuleSet(selector, blocks[selector]);\n  }).join('\\n');\n  \n  style.setAttribute('type', 'text/css');\n  style.appendChild(document.createTextNode(text));\n\n  return style;\n}\n\nfunction processRuleSet(selector, block) {\n  return selector + ' {\\n' + processDeclarationBlock(block) + '\\n}';\n}\n\nfunction processDeclarationBlock(block) {\n  return Object.keys(block).map(function (prop) {\n    return processDeclaration(prop, block[prop]);\n  }).join('\\n');\n}\n\nfunction processDeclaration(prop, value) {\n  if (!isNaN(value) && value != 0) {\n    value = value + 'px';\n  }\n\n  return hyphenate(prop) + ': ' + value + ';';\n}\n\nfunction hyphenate(prop) {\n  return prop.replace(/[A-Z]/g, function (match) {\n    return '-' + match.toLowerCase();\n  });\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/create-stylesheet/index.js\n ** module id = 7\n ** module chunks = 0\n **/","import axios from 'axios';\nimport uuid from '../utils/uuid';\nimport StoreAdapter from './StoreAdapter';\nimport {documentId as fileUuid} from '../initFile';\nimport {renderComments} from \"../UI/comments\";\n\naxios.defaults.xsrfCookieName = 'csrftoken';\naxios.defaults.xsrfHeaderName = 'X-CSRFToken';\n\nexport default class CRFPAStoreAdapter extends StoreAdapter {\n    constructor() {\n\n        const API = axios.create({\n            baseURL: '/pdfannotator',\n            timeout: 60000,\n            withCredentials: true,\n            headers: {\n                'Accept': 'application/json',\n                'Content-Type': 'application/json',\n                'Access-Control-Allow-Origin': '*'\n            }\n        });\n\n        super({\n            getAnnotations(documentId) {\n\n                return API.get('/get-annotations/', {\n                    params: {\n                        fileUuid,\n                    }\n                }).then(function (response) {\n                    return response.data;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et les annotations n'ont pas pu être téléchargées depuis le serveur.\")\n                });\n\n                // return new Promise((resolve, reject) => {\n                //   let annotations = getAnnotations(documentId).filter((i) => {\n                //     return i.page === pageNumber && i.class === 'Annotation';\n                //   });\n                //\n                //   resolve({\n                //     documentId,\n                //     pageNumber,\n                //     annotations\n                //   });\n                // });\n            },\n\n            getAnnotation(documentId, annotationId) {\n                return API.get('/get-annotation/', {\n                    params: {\n                        fileUuid,\n                        annotationId\n                    }\n                }).then(function (response) {\n                    return response.data;\n                });\n            },\n\n            addAnnotation(documentId, pageNumber, annotation) {\n\n                annotation.class = 'Annotation';\n                annotation.page = pageNumber;\n                annotation.uuid = uuid();\n\n                return API.post('/add-annotation/', {\n                    fileUuid,\n                    page: pageNumber,\n                    annotation\n                }).then(function (response) {\n                    return annotation;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et votre annotation n'a pas pu être enregistrée.\")\n                });\n\n                // return new Promise((resolve, reject) => {\n\n                // annotation.class = 'Annotation';\n                // annotation.uuid = uuid();\n                // annotation.page = pageNumber;\n\n                // let annotations = getAnnotations(documentId);\n                // annotations.push(annotation);\n                // updateAnnotations(documentId, annotations);\n\n                // resolve(annotation);\n                // });\n            },\n\n            editAnnotation(documentId, annotationId, annotation) {\n                return API.post('/update-annotation/', {\n                    fileUuid,\n                    annotationId,\n                    annotation\n                }).then(function (response) {\n                    if(annotation.type==='point')\n                        renderComments();\n                    return response;\n                }).then(function (response) {\n                    return annotation;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et l'annotation n'a pas pu être enregistrée.\")\n                });\n\n                // return new Promise((resolve, reject) => {\n                //   let annotations = getAnnotations(documentId);\n                //   annotations[findAnnotation(documentId, annotationId)] = annotation;\n                //   updateAnnotations(documentId, annotations);\n                //\n                //   resolve(annotation);\n                // });\n            },\n\n            deleteAnnotation(documentId, annotationId) {\n                return API.post('/delete-annotation/', {\n                    annotationId,\n                    fileUuid\n                }).then(function (response) {\n                    renderComments();\n                    return response;\n                }).then(function (response) {\n                    return true;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et l'annotation n'a pas pu être supprimée.\")\n                });;\n\n                // return new Promise((resolve, reject) => {\n                //   let index = findAnnotation(documentId, annotationId);\n                //   if (index > -1) {\n                //     let annotations = getAnnotations(documentId);\n                //     annotations.splice(index, 1);\n                //     updateAnnotations(documentId, annotations);\n                //   }\n                //\n                //   resolve(true);\n                // });\n            },\n\n            getComments(documentId) {\n                return API.get('/get-comments/', {\n                    params: {\n                        fileUuid\n                    }\n                }).then(function (response) {\n                    return response.data;\n                });\n\n                // return new Promise((resolve, reject) => {\n                //   resolve(getAnnotations(documentId).filter((i) => {\n                //     return i.class === 'Comment' && i.annotation === annotationId;\n                //   }));\n                // });\n            },\n\n            addComment(documentId, annotationId, content) {\n\n                return API.post('/add-comment/', {\n                    fileUuid,\n                    annotationId,\n                    content\n                }).then(function (response) {\n                    renderComments();\n                    return response;\n                }).then(function (response) {\n                    return content;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et votre commentaire n'a pas pu être enregistré.\")\n                });;\n\n                // return new Promise((resolve, reject) => {\n                //   let comment = {\n                //     class: 'Comment',\n                //     uuid: uuid(),\n                //     annotation: annotationId,\n                //     content: content\n                //   };\n                //\n                //\n                //\n                //   let annotations = getAnnotations(documentId);\n                //   annotations.push(comment);\n                //   updateAnnotations(documentId, annotations);\n                //\n                //   resolve(comment);\n                // });\n            },\n\n            updateComment(documentId, annotationId, comment) {\n                return API.post('/update-comment/', {\n                    fileUuid,\n                    annotationId,\n                    comment\n                }).then(function (response) {\n                    renderComments();\n                    return response;\n                }).then(function (response) {\n                    return comment;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et votre commentaire n'a pas pu être enregistrée.\")\n                });;\n            },\n\n            // deleteComment(documentId, commentId) {\n            //\n            //     return API.post('/delete-comment/', {\n            //         fileUuid,\n            //         commentId,\n            //     }).then(function (response) {\n            //         return true;\n            //     });\n            // }\n        });\n    }\n}\n//\n// function getAnnotations(documentId) {\n//   return JSON.parse(localStorage.getItem(`${documentId}/annotations`)) || [];\n// }\n//\n// function updateAnnotations(documentId, annotations) {\n//   localStorage.setItem(`${documentId}/annotations`, JSON.stringify(annotations));\n// }\n\n// function findAnnotation(documentId, annotationId) {\n//   let index = -1;\n//   let annotations = getAnnotations(documentId);\n//   for (let i=0, l=annotations.length; i<l; i++) {\n//     if (annotations[i].uuid === annotationId) {\n//       index = i;\n//       break;\n//     }\n//   }\n//   return index;\n// }\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/adapter/CRFPAStoreAdapter.js\n **/","module.exports = require('./lib/axios');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/index.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n  return createInstance(utils.merge(defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/axios.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = merge(result[key], val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  extend: extend,\n  trim: trim\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/utils.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/bind.js\n ** module id = 12\n ** module chunks = 0\n **/","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/is-buffer/index.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = utils.merge({\n      url: arguments[0]\n    }, arguments[1]);\n  }\n\n  config = utils.merge(defaults, {method: 'get'}, this.defaults, config);\n  config.method = config.method.toLowerCase();\n\n  // Hook up interceptors middleware\n  var chain = [dispatchRequest, undefined];\n  var promise = Promise.resolve(config);\n\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    chain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  while (chain.length) {\n    promise = promise.then(chain.shift(), chain.shift());\n  }\n\n  return promise;\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/Axios.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('./adapters/xhr');\n  } else if (typeof process !== 'undefined') {\n    // For node use HTTP adapter\n    adapter = require('./adapters/http');\n  }\n  return adapter;\n}\n\nvar defaults = {\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Content-Type');\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data)) {\n      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n      return JSON.stringify(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    /*eslint no-param-reassign:0*/\n    if (typeof data === 'string') {\n      try {\n        data = JSON.parse(data);\n      } catch (e) { /* Ignore */ }\n    }\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\n\ndefaults.headers = {\n  common: {\n    'Accept': 'application/json, text/plain, */*'\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/defaults.js\n ** module id = 15\n ** module chunks = 0\n **/","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 16\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/normalizeHeaderName.js\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || require('./../helpers/btoa');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n    var loadEvent = 'onreadystatechange';\n    var xDomain = false;\n\n    // For IE 8/9 CORS support\n    // Only supports POST and GET calls and doesn't returns the response headers.\n    // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n    if (process.env.NODE_ENV !== 'test' &&\n        typeof window !== 'undefined' &&\n        window.XDomainRequest && !('withCredentials' in request) &&\n        !isURLSameOrigin(config.url)) {\n      request = new window.XDomainRequest();\n      loadEvent = 'onload';\n      xDomain = true;\n      request.onprogress = function handleProgress() {};\n      request.ontimeout = function handleTimeout() {};\n    }\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password || '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    // Listen for ready state\n    request[loadEvent] = function handleLoad() {\n      if (!request || (request.readyState !== 4 && !xDomain)) {\n        return;\n      }\n\n      // The request errored out and we didn't get a response, this will be\n      // handled by onerror instead\n      // With one exception: request that using file: protocol, most browsers\n      // will return status as 0 even though it's a successful request\n      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n        return;\n      }\n\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n      var response = {\n        data: responseData,\n        // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n        status: request.status === 1223 ? 204 : request.status,\n        statusText: request.status === 1223 ? 'No Content' : request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(resolve, reject, response);\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      var cookies = require('./../helpers/cookies');\n\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n          cookies.read(config.xsrfCookieName) :\n          undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (config.withCredentials) {\n      request.withCredentials = true;\n    }\n\n    // Add responseType to request if needed\n    if (config.responseType) {\n      try {\n        request.responseType = config.responseType;\n      } catch (e) {\n        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n        if (config.responseType !== 'json') {\n          throw e;\n        }\n      }\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken) {\n      // Handle cancellation\n      config.cancelToken.promise.then(function onCanceled(cancel) {\n        if (!request) {\n          return;\n        }\n\n        request.abort();\n        reject(cancel);\n        // Clean up request\n        request = null;\n      });\n    }\n\n    if (requestData === undefined) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/adapters/xhr.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  // Note: status is not exposed by XDomainRequest\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/settle.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/createError.js\n ** module id = 20\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n  error.request = request;\n  error.response = response;\n  return error;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/enhanceError.js\n ** module id = 21\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%40/gi, '@').\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/buildURL.js\n ** module id = 22\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/parseHeaders.js\n ** module id = 23\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n  (function standardBrowserEnv() {\n    var msie = /(msie|trident)/i.test(navigator.userAgent);\n    var urlParsingNode = document.createElement('a');\n    var originURL;\n\n    /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n    function resolveURL(url) {\n      var href = url;\n\n      if (msie) {\n        // IE needs attribute set twice to normalize properties\n        urlParsingNode.setAttribute('href', href);\n        href = urlParsingNode.href;\n      }\n\n      urlParsingNode.setAttribute('href', href);\n\n      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n      return {\n        href: urlParsingNode.href,\n        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n        host: urlParsingNode.host,\n        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n        hostname: urlParsingNode.hostname,\n        port: urlParsingNode.port,\n        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n                  urlParsingNode.pathname :\n                  '/' + urlParsingNode.pathname\n      };\n    }\n\n    originURL = resolveURL(window.location.href);\n\n    /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n    return function isURLSameOrigin(requestURL) {\n      var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n      return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n    };\n  })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n  (function nonStandardBrowserEnv() {\n    return function isURLSameOrigin() {\n      return true;\n    };\n  })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isURLSameOrigin.js\n ** module id = 24\n ** module chunks = 0\n **/","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n  this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n  var str = String(input);\n  var output = '';\n  for (\n    // initialize result and counter\n    var block, charCode, idx = 0, map = chars;\n    // if the next str index does not exist:\n    //   change the mapping table to \"=\"\n    //   check if d has no fractional digits\n    str.charAt(idx | 0) || (map = '=', idx % 1);\n    // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n    output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n  ) {\n    charCode = str.charCodeAt(idx += 3 / 4);\n    if (charCode > 0xFF) {\n      throw new E();\n    }\n    block = block << 8 | charCode;\n  }\n  return output;\n}\n\nmodule.exports = btoa;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/btoa.js\n ** module id = 25\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n  (function standardBrowserEnv() {\n    return {\n      write: function write(name, value, expires, path, domain, secure) {\n        var cookie = [];\n        cookie.push(name + '=' + encodeURIComponent(value));\n\n        if (utils.isNumber(expires)) {\n          cookie.push('expires=' + new Date(expires).toGMTString());\n        }\n\n        if (utils.isString(path)) {\n          cookie.push('path=' + path);\n        }\n\n        if (utils.isString(domain)) {\n          cookie.push('domain=' + domain);\n        }\n\n        if (secure === true) {\n          cookie.push('secure');\n        }\n\n        document.cookie = cookie.join('; ');\n      },\n\n      read: function read(name) {\n        var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n        return (match ? decodeURIComponent(match[3]) : null);\n      },\n\n      remove: function remove(name) {\n        this.write(name, '', Date.now() - 86400000);\n      }\n    };\n  })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n  (function nonStandardBrowserEnv() {\n    return {\n      write: function write() {},\n      read: function read() { return null; },\n      remove: function remove() {}\n    };\n  })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/cookies.js\n ** module id = 26\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/InterceptorManager.js\n ** module id = 27\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Support baseURL config\n  if (config.baseURL && !isAbsoluteURL(config.url)) {\n    config.url = combineURLs(config.baseURL, config.url);\n  }\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData(\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers || {}\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData(\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData(\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/dispatchRequest.js\n ** module id = 28\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/transformData.js\n ** module id = 29\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/cancel/isCancel.js\n ** module id = 30\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isAbsoluteURL.js\n ** module id = 31\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/combineURLs.js\n ** module id = 32\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/cancel/Cancel.js\n ** module id = 33\n ** module chunks = 0\n **/","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/cancel/CancelToken.js\n ** module id = 34\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/spread.js\n ** module id = 35\n ** module chunks = 0\n **/","const REGEXP = /[xy]/g\nconst PATTERN = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n\nfunction replacement(c) {\n  let r = Math.random()*16|0;\n  let v = c == 'x' ? r : (r&0x3|0x8);\n  return v.toString(16);\n}\n\n/**\n * Generate a univierally unique identifier\n *\n * @return {String}\n */\nexport default function uuid() {\n  return PATTERN.replace(REGEXP, replacement);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/uuid.js\n **/","export const documentUrl = document.getElementById('pdf-data').dataset.filepath;\nexport const documentId = document.getElementById('pdf-data').dataset.uuid;\nexport const readonly = document.getElementById('pdf-data').dataset.readonly === 'True';\n\n\n/** WEBPACK FOOTER **\n ** ./src/initFile.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate'\nimport twitter from \"twitter-text\";\nimport {addEventListener} from \"./event\";\nimport {createEditOverlay} from \"./edit\";\nimport {getMetadata} from \"./utils\";\nimport {readonly} from \"../initFile\";\n\nlet commentList = $('#comment-wrapper .comment-list-container');\nlet commentForm = $('#comment-wrapper .comment-list-form');\n\n// let commentText = commentForm.querySelector('input[type=\"text\"]');\n\nexport function renderComments(documentId) {\n    PDFJSAnnotate.getStoreAdapter().getComments(documentId).then((comments) => {\n\n\n        commentList.html('');\n        commentForm.hide();\n        // commentText.focus();\n\n        // commentForm.onsubmit = function () {\n        //     PDFJSAnnotate.getStoreAdapter().addComment(documentId, annotationId, commentText.value.trim())\n        //         .then(insertComment)\n        //         .then(() => {\n        //             commentText.value = '';\n        //             commentText.focus();\n        //         });\n        //\n        //     return false;\n        // };\n\n        comments.forEach(insertComment);\n    });\n}\n\n\nfunction supportsComments(target) {\n    let type = target.getAttribute('data-pdf-annotate-type');\n    return ['point', 'highlight', 'area'].indexOf(type) > -1;\n}\n\nfunction insertComment(comment) {\n    let child = $('<div></div>');\n    let view = $('<div class=\"view\"></div>');\n    child.addClass('comment-list-item');\n    child.attr('uuid', comment.annotation)\n    view.html(twitter.autoLink(twitter.htmlEscape(comment.content).replace(/\\n/g, '<br/>')));\n    view.bind('click', handleCommentClick);\n\n    if (!readonly) {\n        let editBtn = $('<button>Modifier</button>');\n        editBtn.bind('click', handleEditClick);\n        view.append($('<br/>'));\n        view.append(editBtn);\n    }\n    child.append(view);\n\n    if (!readonly) {\n        let textarea = $('<textarea></textarea>');\n        textarea.text(comment.content);\n        let textareaWrapper = $('<div class=\"edit\" style=\"display:none\">');\n        let saveBtn = $('<button>Enregistrer</button>');\n        saveBtn.bind('click', saveComment);\n        let cancelBtn = $('<button>Annuler</button>');\n        cancelBtn.bind('click', cancelCommentEdit);\n        textareaWrapper.append(textarea);\n        textareaWrapper.append(saveBtn);\n        textareaWrapper.append(cancelBtn);\n        child.append(textareaWrapper);\n    }\n    commentList.append(child);\n}\n\nfunction handleCommentClick(e) {\n    let comment = $(e.target).closest('.comment-list-item');\n    selectComment(comment.attr('uuid'));\n}\n\nfunction saveComment(e) {\n    e.preventDefault();\n    let button = $(e.target);\n    let comment = button.closest('.comment-list-item');\n    let uuid = comment.attr('uuid');\n    let text = comment.find('textarea').val();\n    let documentId = $('#pdf-data').data('uuid');\n    PDFJSAnnotate.getStoreAdapter().updateComment(documentId, uuid, text).then((comment) => {\n        cancelCommentEdit(e);\n    });\n}\n\nfunction cancelCommentEdit(e) {\n    e.preventDefault();\n    let button = $(e.target);\n    let comment = button.closest('.comment-list-item');\n    let view = comment.find('.view');\n    let edit = comment.find('.edit');\n    edit.hide();\n    view.show();\n}\n\n// replace comment text by textarea to edit the comment\nfunction handleEditClick(e) {\n    e.preventDefault();\n    let button = $(e.target);\n    let comment = button.closest('.comment-list-item');\n    let view = comment.find('.view');\n    let edit = comment.find('.edit');\n    edit.show();\n    edit.find('textarea').width(view.width() - 10).height(view.height() + 20);\n    view.hide();\n}\n\n\nfunction scrollToView(element) {\n    var offset = element.offset().top;\n    if (!element.is(\":visible\")) {\n        element.css({\"visibility\": \"hidden\"}).show();\n        var offset = element.offset().top;\n        element.css({\"visibility\": \"\", \"display\": \"\"});\n    }\n\n    var visible_area_start = $(window).scrollTop();\n    var visible_area_end = visible_area_start + window.innerHeight;\n\n    if (offset < visible_area_start || offset > visible_area_end) {\n        // Not in view so scroll to it\n        if (element.hasClass('comment-list-item')) {\n            $('.comment-list-container').animate({scrollTop: offset - window.innerHeight / 3}, 300);\n        }\n        else {\n            $('#content-wrapper').animate({scrollTop: offset - window.innerHeight / 3}, 300);\n        }\n        return false;\n    }\n    return true;\n}\n\nexport function selectComment(uuid) {\n    let comment = $(`.comment-list-item[uuid=${uuid}]`);\n    $('.comment-list-item').removeClass('selected');\n    comment.addClass('selected');\n    const annotation = $(`[data-pdf-annotate-id=${uuid}]`)[0];\n    createEditOverlay(annotation);\n    scrollToView($(annotation));\n    scrollToView(comment);\n}\n\n// function handleAnnotationClick(target) {\n//   if (supportsComments(target)) {\n//     let documentId = target.parentNode.getAttribute('data-pdf-annotate-document');\n//     let annotationId = target.getAttribute('data-pdf-annotate-id');\n//\n//     PDFJSAnnotate.getStoreAdapter().getComments(documentId, annotationId).then((comments) => {\n//       commentList.innerHTML = '';\n//       commentForm.style.display = '';\n//       commentText.focus();\n//\n//       commentForm.onsubmit = function () {\n//         PDFJSAnnotate.getStoreAdapter().addComment(documentId, annotationId, commentText.value.trim())\n//           .then(insertComment)\n//           .then(() => {\n//             commentText.value = '';\n//             commentText.focus();\n//           });\n//\n//         return false;\n//       };\n//\n//       comments.forEach(insertComment);\n//     });\n//   }\n// }\n//\n// function handleAnnotationBlur(target) {\n//   if (supportsComments(target)) {\n//     commentList.innerHTML = '';\n//     commentForm.style.display = 'none';\n//     commentForm.onsubmit = null;\n//\n//     insertComment({content: 'No comments'});\n//   }\n// }\n\n\n// UI.addEventListener('annotation:click', handleAnnotationClick);\n// UI.addEventListener('annotation:blur', handleAnnotationBlur);\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/comments.js\n **/","(function() {\n  if (typeof twttr === \"undefined\" || twttr === null) {\n    var twttr = {};\n  }\n\n  twttr.txt = {};\n  twttr.txt.regexen = {};\n\n  var HTML_ENTITIES = {\n    '&': '&amp;',\n    '>': '&gt;',\n    '<': '&lt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  // HTML escaping\n  twttr.txt.htmlEscape = function(text) {\n    return text && text.replace(/[&\"'><]/g, function(character) {\n      return HTML_ENTITIES[character];\n    });\n  };\n\n  // Builds a RegExp\n  function regexSupplant(regex, flags) {\n    flags = flags || \"\";\n    if (typeof regex !== \"string\") {\n      if (regex.global && flags.indexOf(\"g\") < 0) {\n        flags += \"g\";\n      }\n      if (regex.ignoreCase && flags.indexOf(\"i\") < 0) {\n        flags += \"i\";\n      }\n      if (regex.multiline && flags.indexOf(\"m\") < 0) {\n        flags += \"m\";\n      }\n\n      regex = regex.source;\n    }\n\n    return new RegExp(regex.replace(/#\\{(\\w+)\\}/g, function(match, name) {\n      var newRegex = twttr.txt.regexen[name] || \"\";\n      if (typeof newRegex !== \"string\") {\n        newRegex = newRegex.source;\n      }\n      return newRegex;\n    }), flags);\n  }\n\n  twttr.txt.regexSupplant = regexSupplant;\n\n  // simple string interpolation\n  function stringSupplant(str, values) {\n    return str.replace(/#\\{(\\w+)\\}/g, function(match, name) {\n      return values[name] || \"\";\n    });\n  }\n\n  twttr.txt.stringSupplant = stringSupplant;\n\n  twttr.txt.regexen.spaces_group = /\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000/;\n  twttr.txt.regexen.spaces = regexSupplant(/[#{spaces_group}]/);\n  twttr.txt.regexen.invalid_chars_group = /\\uFFFE\\uFEFF\\uFFFF\\u202A-\\u202E/;\n  twttr.txt.regexen.invalid_chars = regexSupplant(/[#{invalid_chars_group}]/);\n  twttr.txt.regexen.punct = /\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$/;\n  twttr.txt.regexen.rtl_chars = /[\\u0600-\\u06FF]|[\\u0750-\\u077F]|[\\u0590-\\u05FF]|[\\uFE70-\\uFEFF]/mg;\n  twttr.txt.regexen.non_bmp_code_pairs = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/mg;\n\n  twttr.txt.regexen.latinAccentChars = /\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF/;\n\n  // Generated from unicode_regex/unicode_regex_groups.scala, same as objective c's \\p{L}\\p{M}\n  twttr.txt.regexen.bmpLetterAndMarks = /A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07ca-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0-\\u08b2\\u08e4-\\u0963\\u0971-\\u0983\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc\\u09dd\\u09df-\\u09e3\\u09f0\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a70-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5c\\u0b5d\\u0b5f-\\u0b63\\u0b71\\u0b82\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0c00-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c58\\u0c59\\u0c60-\\u0c63\\u0c81-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0cf1\\u0cf2\\u0d01-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d7a-\\u0d7f\\u0d82\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0edc-\\u0edf\\u0f00\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u103f\\u1050-\\u108f\\u109a-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16f1-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772\\u1773\\u1780-\\u17d3\\u17d7\\u17dc\\u17dd\\u180b-\\u180d\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1aa7\\u1ab0-\\u1abe\\u1b00-\\u1b4b\\u1b6b-\\u1b73\\u1b80-\\u1baf\\u1bba-\\u1bf3\\u1c00-\\u1c37\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1cf8\\u1cf9\\u1d00-\\u1df5\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2183\\u2184\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005\\u3006\\u302a-\\u302f\\u3031-\\u3035\\u303b\\u303c\\u3041-\\u3096\\u3099\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua672\\ua674-\\ua67d\\ua67f-\\ua69d\\ua69f-\\ua6e5\\ua6f0\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0\\ua7b1\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8e0-\\ua8f7\\ua8fb\\ua90a-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf\\ua9e0-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64\\uab65\\uabc0-\\uabea\\uabec\\uabed\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf870-\\uf87f\\uf882\\uf884-\\uf89f\\uf8b8\\uf8c1-\\uf8d6\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2d\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc/;\n  twttr.txt.regexen.astralLetterAndMarks = /\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\uddfd\\ude80-\\ude9c\\udea0-\\uded0\\udee0\\udf00-\\udf1f\\udf30-\\udf40\\udf42-\\udf49\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf]|\\ud801[\\udc00-\\udc9d\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe\\uddbf\\ude00-\\ude03\\ude05\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude33\\ude38-\\ude3a\\ude3f\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee6\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48]|\\ud804[\\udc00-\\udc46\\udc7f-\\udcba\\udcd0-\\udce8\\udd00-\\udd34\\udd50-\\udd73\\udd76\\udd80-\\uddc4\\uddda\\ude00-\\ude11\\ude13-\\ude37\\udeb0-\\udeea\\udf01-\\udf03\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3c-\\udf44\\udf47\\udf48\\udf4b-\\udf4d\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc80-\\udcc5\\udcc7\\udd80-\\uddb5\\uddb8-\\uddc0\\ude00-\\ude40\\ude44\\ude80-\\udeb7]|\\ud806[\\udca0-\\udcdf\\udcff\\udec0-\\udef8]|\\ud808[\\udc00-\\udf98]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udef0-\\udef4\\udf00-\\udf36\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\udf00-\\udf44\\udf50-\\udf7e\\udf8f-\\udf9f]|\\ud82c[\\udc00\\udc01]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9d\\udc9e]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud83a[\\udc00-\\udcc4\\udcd0-\\udcd6]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d]|\\ud87e[\\udc00-\\ude1d]|\\udb40[\\udd00-\\uddef]/;\n\n  // Generated from unicode_regex/unicode_regex_groups.scala, same as objective c's \\p{Nd}\n  twttr.txt.regexen.bmpNumerals = /0-9\\u0660-\\u0669\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0de6-\\u0def\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\ua9f0-\\ua9f9\\uaa50-\\uaa59\\uabf0-\\uabf9\\uff10-\\uff19/;\n  twttr.txt.regexen.astralNumerals = /\\ud801[\\udca0-\\udca9]|\\ud804[\\udc66-\\udc6f\\udcf0-\\udcf9\\udd36-\\udd3f\\uddd0-\\uddd9\\udef0-\\udef9]|\\ud805[\\udcd0-\\udcd9\\ude50-\\ude59\\udec0-\\udec9]|\\ud806[\\udce0-\\udce9]|\\ud81a[\\ude60-\\ude69\\udf50-\\udf59]|\\ud835[\\udfce-\\udfff]/;\n\n  twttr.txt.regexen.hashtagSpecialChars = /_\\u200c\\u200d\\ua67e\\u05be\\u05f3\\u05f4\\uff5e\\u301c\\u309b\\u309c\\u30a0\\u30fb\\u3003\\u0f0b\\u0f0c\\xb7/;\n\n  // A hashtag must contain at least one unicode letter or mark, as well as numbers, underscores, and select special characters.\n  twttr.txt.regexen.hashSigns = /[##]/;\n  twttr.txt.regexen.hashtagAlpha = regexSupplant(/(?:[#{bmpLetterAndMarks}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}))/);\n  twttr.txt.regexen.hashtagAlphaNumeric = regexSupplant(/(?:[#{bmpLetterAndMarks}#{bmpNumerals}#{hashtagSpecialChars}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}|#{astralNumerals}))/);\n  twttr.txt.regexen.endHashtagMatch = regexSupplant(/^(?:#{hashSigns}|:\\/\\/)/);\n  twttr.txt.regexen.codePoint = /(?:[^\\uD800-\\uDFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/;\n  twttr.txt.regexen.hashtagBoundary = regexSupplant(/(?:^|\\uFE0E|\\uFE0F|$|(?!#{hashtagAlphaNumeric}|&)#{codePoint})/);\n  twttr.txt.regexen.validHashtag = regexSupplant(/(#{hashtagBoundary})(#{hashSigns})(?!\\uFE0F|\\u20E3)(#{hashtagAlphaNumeric}*#{hashtagAlpha}#{hashtagAlphaNumeric}*)/gi);\n\n  // Mention related regex collection\n  twttr.txt.regexen.validMentionPrecedingChars = /(?:^|[^a-zA-Z0-9_!#$%&*@@]|(?:^|[^a-zA-Z0-9_+~.-])(?:rt|RT|rT|Rt):?)/;\n  twttr.txt.regexen.atSigns = /[@@]/;\n  twttr.txt.regexen.validMentionOrList = regexSupplant(\n    '(#{validMentionPrecedingChars})' +  // $1: Preceding character\n    '(#{atSigns})' +                     // $2: At mark\n    '([a-zA-Z0-9_]{1,20})' +             // $3: Screen name\n    '(\\/[a-zA-Z][a-zA-Z0-9_\\-]{0,24})?'  // $4: List (optional)\n  , 'g');\n  twttr.txt.regexen.validReply = regexSupplant(/^(?:#{spaces})*#{atSigns}([a-zA-Z0-9_]{1,20})/);\n  twttr.txt.regexen.endMentionMatch = regexSupplant(/^(?:#{atSigns}|[#{latinAccentChars}]|:\\/\\/)/);\n\n  // URL related regex collection\n  twttr.txt.regexen.validUrlPrecedingChars = regexSupplant(/(?:[^A-Za-z0-9@@$###{invalid_chars_group}]|^)/);\n  twttr.txt.regexen.invalidUrlWithoutProtocolPrecedingChars = /[-_.\\/]$/;\n  twttr.txt.regexen.invalidDomainChars = stringSupplant(\"#{punct}#{spaces_group}#{invalid_chars_group}\", twttr.txt.regexen);\n  twttr.txt.regexen.validDomainChars = regexSupplant(/[^#{invalidDomainChars}]/);\n  twttr.txt.regexen.validSubdomain = regexSupplant(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\\.)/);\n  twttr.txt.regexen.validDomainName = regexSupplant(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\\.)/);\n  twttr.txt.regexen.validGTLD = regexSupplant(RegExp(\n'(?:(?:' +\n    '삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|' +\n    '政务|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|' +\n    'ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|' +\n    'بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|' +\n    'zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|' +\n    'yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|' +\n    'wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|' +\n    'website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|' +\n    'wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|' +\n    'vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|' +\n    'vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|' +\n    'university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|' +\n    'travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|' +\n    'toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|' +\n    'tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|' +\n    'tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|' +\n    'swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|' +\n    'stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|' +\n    'stada|srt|srl|spreadbetting|spot|spiegel|space|soy|sony|song|solutions|solar|sohu|software|' +\n    'softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|' +\n    'showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|' +\n    'sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|' +\n    'science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|' +\n    'sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|' +\n    'saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|' +\n    'rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|' +\n    'repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|' +\n    'realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|' +\n    'protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|' +\n    'pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|' +\n    'pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|' +\n    'pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|' +\n    'pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|' +\n    'onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|' +\n    'obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|' +\n    'nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|' +\n    'net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|' +\n    'msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|' +\n    'monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|' +\n    'miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|' +\n    'mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|' +\n    'makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|' +\n    'lotte|london|lol|loft|locus|locker|loans|loan|lixil|living|live|lipsy|link|linde|lincoln|limo|' +\n    'limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|' +\n    'lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|' +\n    'lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|' +\n    'komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|' +\n    'kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|' +\n    'jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|' +\n    'investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|' +\n    'industries|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|' +\n    'hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|' +\n    'honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|' +\n    'hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|' +\n    'hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|' +\n    'gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|' +\n    'globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|' +\n    'garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|' +\n    'ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|' +\n    'football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|' +\n    'fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|' +\n    'ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|' +\n    'extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|' +\n    'estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|' +\n    'email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|' +\n    'download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|' +\n    'direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|' +\n    'delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|' +\n    'cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|courses|' +\n    'coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|' +\n    'construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|' +\n    'college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|' +\n    'cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|' +\n    'chintai|cheap|chat|chase|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|' +\n    'catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|' +\n    'capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|' +\n    'bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|' +\n    'bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|' +\n    'boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|' +\n    'black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|' +\n    'beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|' +\n    'barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|' +\n    'autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|' +\n    'art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|' +\n    'amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|' +\n    'alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|' +\n    'afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|' +\n    'academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion' +\n')(?=[^0-9a-zA-Z@]|$))'));\n  twttr.txt.regexen.validCCTLD = regexSupplant(RegExp(\n'(?:(?:' +\n    '한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|' +\n    'ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|' +\n    'بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ελ|' +\n    'zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|' +\n    'tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|' +\n    're|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|' +\n    'mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|' +\n    'ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|' +\n    'gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|' +\n    'do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|' +\n    'bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac' +\n')(?=[^0-9a-zA-Z@]|$))'));\n  twttr.txt.regexen.validPunycode = /(?:xn--[0-9a-z]+)/;\n  twttr.txt.regexen.validSpecialCCTLD = /(?:(?:co|tv)(?=[^0-9a-zA-Z@]|$))/;\n  twttr.txt.regexen.validDomain = regexSupplant(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/);\n  twttr.txt.regexen.validAsciiDomain = regexSupplant(/(?:(?:[\\-a-z0-9#{latinAccentChars}]+)\\.)+(?:#{validGTLD}|#{validCCTLD}|#{validPunycode})/gi);\n  twttr.txt.regexen.invalidShortDomain = regexSupplant(/^#{validDomainName}#{validCCTLD}$/i);\n  twttr.txt.regexen.validSpecialShortDomain = regexSupplant(/^#{validDomainName}#{validSpecialCCTLD}$/i);\n  twttr.txt.regexen.validPortNumber = /[0-9]+/;\n  twttr.txt.regexen.cyrillicLettersAndMarks = /\\u0400-\\u04FF/;\n  twttr.txt.regexen.validGeneralUrlPathChars = regexSupplant(/[a-z#{cyrillicLettersAndMarks}0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-_~@\\|&#{latinAccentChars}]/i);\n  // Allow URL paths to contain up to two nested levels of balanced parens\n  //  1. Used in Wikipedia URLs like /Primer_(film)\n  //  2. Used in IIS sessions like /S(dfd346)/\n  //  3. Used in Rdio URLs like /track/We_Up_(Album_Version_(Edited))/\n  twttr.txt.regexen.validUrlBalancedParens = regexSupplant(\n    '\\\\('                                   +\n      '(?:'                                 +\n        '#{validGeneralUrlPathChars}+'      +\n        '|'                                 +\n        // allow one nested level of balanced parentheses\n        '(?:'                               +\n          '#{validGeneralUrlPathChars}*'    +\n          '\\\\('                             +\n            '#{validGeneralUrlPathChars}+'  +\n          '\\\\)'                             +\n          '#{validGeneralUrlPathChars}*'    +\n        ')'                                 +\n      ')'                                   +\n    '\\\\)'\n  , 'i');\n  // Valid end-of-path chracters (so /foo. does not gobble the period).\n  // 1. Allow =&# for empty URL parameters and other URL-join artifacts\n  twttr.txt.regexen.validUrlPathEndingChars = regexSupplant(/[\\+\\-a-z#{cyrillicLettersAndMarks}0-9=_#\\/#{latinAccentChars}]|(?:#{validUrlBalancedParens})/i);\n  // Allow @ in a url, but only in the middle. Catch things like http://example.com/@user/\n  twttr.txt.regexen.validUrlPath = regexSupplant('(?:' +\n    '(?:' +\n      '#{validGeneralUrlPathChars}*' +\n        '(?:#{validUrlBalancedParens}#{validGeneralUrlPathChars}*)*' +\n        '#{validUrlPathEndingChars}'+\n      ')|(?:@#{validGeneralUrlPathChars}+\\/)'+\n    ')', 'i');\n\n  twttr.txt.regexen.validUrlQueryChars = /[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]/i;\n  twttr.txt.regexen.validUrlQueryEndingChars = /[a-z0-9_&=#\\/]/i;\n  twttr.txt.regexen.extractUrl = regexSupplant(\n    '('                                                            + // $1 total match\n      '(#{validUrlPrecedingChars})'                                + // $2 Preceeding chracter\n      '('                                                          + // $3 URL\n        '(https?:\\\\/\\\\/)?'                                         + // $4 Protocol (optional)\n        '(#{validDomain})'                                         + // $5 Domain(s)\n        '(?::(#{validPortNumber}))?'                               + // $6 Port number (optional)\n        '(\\\\/#{validUrlPath}*)?'                                   + // $7 URL Path\n        '(\\\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?'  + // $8 Query String\n      ')'                                                          +\n    ')'\n  , 'gi');\n\n  twttr.txt.regexen.validTcoUrl = /^https?:\\/\\/t\\.co\\/[a-z0-9]+/i;\n  twttr.txt.regexen.urlHasProtocol = /^https?:\\/\\//i;\n  twttr.txt.regexen.urlHasHttps = /^https:\\/\\//i;\n\n  // cashtag related regex\n  twttr.txt.regexen.cashtag = /[a-z]{1,6}(?:[._][a-z]{1,2})?/i;\n  twttr.txt.regexen.validCashtag = regexSupplant('(^|#{spaces})(\\\\$)(#{cashtag})(?=$|\\\\s|[#{punct}])', 'gi');\n\n  // These URL validation pattern strings are based on the ABNF from RFC 3986\n  twttr.txt.regexen.validateUrlUnreserved = /[a-z\\u0400-\\u04FF0-9\\-._~]/i;\n  twttr.txt.regexen.validateUrlPctEncoded = /(?:%[0-9a-f]{2})/i;\n  twttr.txt.regexen.validateUrlSubDelims = /[!$&'()*+,;=]/i;\n  twttr.txt.regexen.validateUrlPchar = regexSupplant('(?:' +\n    '#{validateUrlUnreserved}|' +\n    '#{validateUrlPctEncoded}|' +\n    '#{validateUrlSubDelims}|' +\n    '[:|@]' +\n  ')', 'i');\n\n  twttr.txt.regexen.validateUrlScheme = /(?:[a-z][a-z0-9+\\-.]*)/i;\n  twttr.txt.regexen.validateUrlUserinfo = regexSupplant('(?:' +\n    '#{validateUrlUnreserved}|' +\n    '#{validateUrlPctEncoded}|' +\n    '#{validateUrlSubDelims}|' +\n    ':' +\n  ')*', 'i');\n\n  twttr.txt.regexen.validateUrlDecOctet = /(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))/i;\n  twttr.txt.regexen.validateUrlIpv4 = regexSupplant(/(?:#{validateUrlDecOctet}(?:\\.#{validateUrlDecOctet}){3})/i);\n\n  // Punting on real IPv6 validation for now\n  twttr.txt.regexen.validateUrlIpv6 = /(?:\\[[a-f0-9:\\.]+\\])/i;\n\n  // Also punting on IPvFuture for now\n  twttr.txt.regexen.validateUrlIp = regexSupplant('(?:' +\n    '#{validateUrlIpv4}|' +\n    '#{validateUrlIpv6}' +\n  ')', 'i');\n\n  // This is more strict than the rfc specifies\n  twttr.txt.regexen.validateUrlSubDomainSegment = /(?:[a-z0-9](?:[a-z0-9_\\-]*[a-z0-9])?)/i;\n  twttr.txt.regexen.validateUrlDomainSegment = /(?:[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?)/i;\n  twttr.txt.regexen.validateUrlDomainTld = /(?:[a-z](?:[a-z0-9\\-]*[a-z0-9])?)/i;\n  twttr.txt.regexen.validateUrlDomain = regexSupplant(/(?:(?:#{validateUrlSubDomainSegment}\\.)*(?:#{validateUrlDomainSegment}\\.)#{validateUrlDomainTld})/i);\n\n  twttr.txt.regexen.validateUrlHost = regexSupplant('(?:' +\n    '#{validateUrlIp}|' +\n    '#{validateUrlDomain}' +\n  ')', 'i');\n\n  // Unencoded internationalized domains - this doesn't check for invalid UTF-8 sequences\n  twttr.txt.regexen.validateUrlUnicodeSubDomainSegment = /(?:(?:[a-z0-9]|[^\\u0000-\\u007f])(?:(?:[a-z0-9_\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n  twttr.txt.regexen.validateUrlUnicodeDomainSegment = /(?:(?:[a-z0-9]|[^\\u0000-\\u007f])(?:(?:[a-z0-9\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n  twttr.txt.regexen.validateUrlUnicodeDomainTld = /(?:(?:[a-z]|[^\\u0000-\\u007f])(?:(?:[a-z0-9\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n  twttr.txt.regexen.validateUrlUnicodeDomain = regexSupplant(/(?:(?:#{validateUrlUnicodeSubDomainSegment}\\.)*(?:#{validateUrlUnicodeDomainSegment}\\.)#{validateUrlUnicodeDomainTld})/i);\n\n  twttr.txt.regexen.validateUrlUnicodeHost = regexSupplant('(?:' +\n    '#{validateUrlIp}|' +\n    '#{validateUrlUnicodeDomain}' +\n  ')', 'i');\n\n  twttr.txt.regexen.validateUrlPort = /[0-9]{1,5}/;\n\n  twttr.txt.regexen.validateUrlUnicodeAuthority = regexSupplant(\n    '(?:(#{validateUrlUserinfo})@)?'  + // $1 userinfo\n    '(#{validateUrlUnicodeHost})'     + // $2 host\n    '(?::(#{validateUrlPort}))?'        //$3 port\n  , \"i\");\n\n  twttr.txt.regexen.validateUrlAuthority = regexSupplant(\n    '(?:(#{validateUrlUserinfo})@)?' + // $1 userinfo\n    '(#{validateUrlHost})'           + // $2 host\n    '(?::(#{validateUrlPort}))?'       // $3 port\n  , \"i\");\n\n  twttr.txt.regexen.validateUrlPath = regexSupplant(/(\\/#{validateUrlPchar}*)*/i);\n  twttr.txt.regexen.validateUrlQuery = regexSupplant(/(#{validateUrlPchar}|\\/|\\?)*/i);\n  twttr.txt.regexen.validateUrlFragment = regexSupplant(/(#{validateUrlPchar}|\\/|\\?)*/i);\n\n  // Modified version of RFC 3986 Appendix B\n  twttr.txt.regexen.validateUrlUnencoded = regexSupplant(\n    '^'                               + // Full URL\n    '(?:'                             +\n      '([^:/?#]+):\\\\/\\\\/'             + // $1 Scheme\n    ')?'                              +\n    '([^/?#]*)'                       + // $2 Authority\n    '([^?#]*)'                        + // $3 Path\n    '(?:'                             +\n      '\\\\?([^#]*)'                    + // $4 Query\n    ')?'                              +\n    '(?:'                             +\n      '#(.*)'                         + // $5 Fragment\n    ')?$'\n  , \"i\");\n\n\n  // Default CSS class for auto-linked lists (along with the url class)\n  var DEFAULT_LIST_CLASS = \"tweet-url list-slug\";\n  // Default CSS class for auto-linked usernames (along with the url class)\n  var DEFAULT_USERNAME_CLASS = \"tweet-url username\";\n  // Default CSS class for auto-linked hashtags (along with the url class)\n  var DEFAULT_HASHTAG_CLASS = \"tweet-url hashtag\";\n  // Default CSS class for auto-linked cashtags (along with the url class)\n  var DEFAULT_CASHTAG_CLASS = \"tweet-url cashtag\";\n  // Options which should not be passed as HTML attributes\n  var OPTIONS_NOT_ATTRIBUTES = {'urlClass':true, 'listClass':true, 'usernameClass':true, 'hashtagClass':true, 'cashtagClass':true,\n                            'usernameUrlBase':true, 'listUrlBase':true, 'hashtagUrlBase':true, 'cashtagUrlBase':true,\n                            'usernameUrlBlock':true, 'listUrlBlock':true, 'hashtagUrlBlock':true, 'linkUrlBlock':true,\n                            'usernameIncludeSymbol':true, 'suppressLists':true, 'suppressNoFollow':true, 'targetBlank':true,\n                            'suppressDataScreenName':true, 'urlEntities':true, 'symbolTag':true, 'textWithSymbolTag':true, 'urlTarget':true,\n                            'invisibleTagAttrs':true, 'linkAttributeBlock':true, 'linkTextBlock': true, 'htmlEscapeNonEntities': true\n                            };\n\n  var BOOLEAN_ATTRIBUTES = {'disabled':true, 'readonly':true, 'multiple':true, 'checked':true};\n\n  // Simple object cloning function for simple objects\n  function clone(o) {\n    var r = {};\n    for (var k in o) {\n      if (o.hasOwnProperty(k)) {\n        r[k] = o[k];\n      }\n    }\n\n    return r;\n  }\n\n  twttr.txt.tagAttrs = function(attributes) {\n    var htmlAttrs = \"\";\n    for (var k in attributes) {\n      var v = attributes[k];\n      if (BOOLEAN_ATTRIBUTES[k]) {\n        v = v ? k : null;\n      }\n      if (v == null) continue;\n      htmlAttrs += \" \" + twttr.txt.htmlEscape(k) + \"=\\\"\" + twttr.txt.htmlEscape(v.toString()) + \"\\\"\";\n    }\n    return htmlAttrs;\n  };\n\n  twttr.txt.linkToText = function(entity, text, attributes, options) {\n    if (!options.suppressNoFollow) {\n      attributes.rel = \"nofollow\";\n    }\n    // if linkAttributeBlock is specified, call it to modify the attributes\n    if (options.linkAttributeBlock) {\n      options.linkAttributeBlock(entity, attributes);\n    }\n    // if linkTextBlock is specified, call it to get a new/modified link text\n    if (options.linkTextBlock) {\n      text = options.linkTextBlock(entity, text);\n    }\n    var d = {\n      text: text,\n      attr: twttr.txt.tagAttrs(attributes)\n    };\n    return stringSupplant(\"<a#{attr}>#{text}</a>\", d);\n  };\n\n  twttr.txt.linkToTextWithSymbol = function(entity, symbol, text, attributes, options) {\n    var taggedSymbol = options.symbolTag ? \"<\" + options.symbolTag + \">\" + symbol + \"</\"+ options.symbolTag + \">\" : symbol;\n    text = twttr.txt.htmlEscape(text);\n    var taggedText = options.textWithSymbolTag ? \"<\" + options.textWithSymbolTag + \">\" + text + \"</\"+ options.textWithSymbolTag + \">\" : text;\n\n    if (options.usernameIncludeSymbol || !symbol.match(twttr.txt.regexen.atSigns)) {\n      return twttr.txt.linkToText(entity, taggedSymbol + taggedText, attributes, options);\n    } else {\n      return taggedSymbol + twttr.txt.linkToText(entity, taggedText, attributes, options);\n    }\n  };\n\n  twttr.txt.linkToHashtag = function(entity, text, options) {\n    var hash = text.substring(entity.indices[0], entity.indices[0] + 1);\n    var hashtag = twttr.txt.htmlEscape(entity.hashtag);\n    var attrs = clone(options.htmlAttrs || {});\n    attrs.href = options.hashtagUrlBase + hashtag;\n    attrs.title = \"#\" + hashtag;\n    attrs[\"class\"] = options.hashtagClass;\n    if (hashtag.charAt(0).match(twttr.txt.regexen.rtl_chars)){\n      attrs[\"class\"] += \" rtl\";\n    }\n    if (options.targetBlank) {\n      attrs.target = '_blank';\n    }\n\n    return twttr.txt.linkToTextWithSymbol(entity, hash, hashtag, attrs, options);\n  };\n\n  twttr.txt.linkToCashtag = function(entity, text, options) {\n    var cashtag = twttr.txt.htmlEscape(entity.cashtag);\n    var attrs = clone(options.htmlAttrs || {});\n    attrs.href = options.cashtagUrlBase + cashtag;\n    attrs.title = \"$\" + cashtag;\n    attrs[\"class\"] =  options.cashtagClass;\n    if (options.targetBlank) {\n      attrs.target = '_blank';\n    }\n\n    return twttr.txt.linkToTextWithSymbol(entity, \"$\", cashtag, attrs, options);\n  };\n\n  twttr.txt.linkToMentionAndList = function(entity, text, options) {\n    var at = text.substring(entity.indices[0], entity.indices[0] + 1);\n    var user = twttr.txt.htmlEscape(entity.screenName);\n    var slashListname = twttr.txt.htmlEscape(entity.listSlug);\n    var isList = entity.listSlug && !options.suppressLists;\n    var attrs = clone(options.htmlAttrs || {});\n    attrs[\"class\"] = (isList ? options.listClass : options.usernameClass);\n    attrs.href = isList ? options.listUrlBase + user + slashListname : options.usernameUrlBase + user;\n    if (!isList && !options.suppressDataScreenName) {\n      attrs['data-screen-name'] = user;\n    }\n    if (options.targetBlank) {\n      attrs.target = '_blank';\n    }\n\n    return twttr.txt.linkToTextWithSymbol(entity, at, isList ? user + slashListname : user, attrs, options);\n  };\n\n  twttr.txt.linkToUrl = function(entity, text, options) {\n    var url = entity.url;\n    var displayUrl = url;\n    var linkText = twttr.txt.htmlEscape(displayUrl);\n\n    // If the caller passed a urlEntities object (provided by a Twitter API\n    // response with include_entities=true), we use that to render the display_url\n    // for each URL instead of it's underlying t.co URL.\n    var urlEntity = (options.urlEntities && options.urlEntities[url]) || entity;\n    if (urlEntity.display_url) {\n      linkText = twttr.txt.linkTextWithEntity(urlEntity, options);\n    }\n\n    var attrs = clone(options.htmlAttrs || {});\n\n    if (!url.match(twttr.txt.regexen.urlHasProtocol)) {\n      url = \"http://\" + url;\n    }\n    attrs.href = url;\n\n    if (options.targetBlank) {\n      attrs.target = '_blank';\n    }\n\n    // set class only if urlClass is specified.\n    if (options.urlClass) {\n      attrs[\"class\"] = options.urlClass;\n    }\n\n    // set target only if urlTarget is specified.\n    if (options.urlTarget) {\n      attrs.target = options.urlTarget;\n    }\n\n    if (!options.title && urlEntity.display_url) {\n      attrs.title = urlEntity.expanded_url;\n    }\n\n    return twttr.txt.linkToText(entity, linkText, attrs, options);\n  };\n\n  twttr.txt.linkTextWithEntity = function (entity, options) {\n    var displayUrl = entity.display_url;\n    var expandedUrl = entity.expanded_url;\n\n    // Goal: If a user copies and pastes a tweet containing t.co'ed link, the resulting paste\n    // should contain the full original URL (expanded_url), not the display URL.\n    //\n    // Method: Whenever possible, we actually emit HTML that contains expanded_url, and use\n    // font-size:0 to hide those parts that should not be displayed (because they are not part of display_url).\n    // Elements with font-size:0 get copied even though they are not visible.\n    // Note that display:none doesn't work here. Elements with display:none don't get copied.\n    //\n    // Additionally, we want to *display* ellipses, but we don't want them copied.  To make this happen we\n    // wrap the ellipses in a tco-ellipsis class and provide an onCopy handler that sets display:none on\n    // everything with the tco-ellipsis class.\n    //\n    // Exception: pic.twitter.com images, for which expandedUrl = \"https://twitter.com/#!/username/status/1234/photo/1\n    // For those URLs, display_url is not a substring of expanded_url, so we don't do anything special to render the elided parts.\n    // For a pic.twitter.com URL, the only elided part will be the \"https://\", so this is fine.\n\n    var displayUrlSansEllipses = displayUrl.replace(/…/g, \"\"); // We have to disregard ellipses for matching\n    // Note: we currently only support eliding parts of the URL at the beginning or the end.\n    // Eventually we may want to elide parts of the URL in the *middle*.  If so, this code will\n    // become more complicated.  We will probably want to create a regexp out of display URL,\n    // replacing every ellipsis with a \".*\".\n    if (expandedUrl.indexOf(displayUrlSansEllipses) != -1) {\n      var displayUrlIndex = expandedUrl.indexOf(displayUrlSansEllipses);\n      var v = {\n        displayUrlSansEllipses: displayUrlSansEllipses,\n        // Portion of expandedUrl that precedes the displayUrl substring\n        beforeDisplayUrl: expandedUrl.substr(0, displayUrlIndex),\n        // Portion of expandedUrl that comes after displayUrl\n        afterDisplayUrl: expandedUrl.substr(displayUrlIndex + displayUrlSansEllipses.length),\n        precedingEllipsis: displayUrl.match(/^…/) ? \"…\" : \"\",\n        followingEllipsis: displayUrl.match(/…$/) ? \"…\" : \"\"\n      };\n      for (var k in v) {\n        if (v.hasOwnProperty(k)) {\n          v[k] = twttr.txt.htmlEscape(v[k]);\n        }\n      }\n      // As an example: The user tweets \"hi http://longdomainname.com/foo\"\n      // This gets shortened to \"hi http://t.co/xyzabc\", with display_url = \"…nname.com/foo\"\n      // This will get rendered as:\n      // <span class='tco-ellipsis'> <!-- This stuff should get displayed but not copied -->\n      //   …\n      //   <!-- There's a chance the onCopy event handler might not fire. In case that happens,\n      //        we include an &nbsp; here so that the … doesn't bump up against the URL and ruin it.\n      //        The &nbsp; is inside the tco-ellipsis span so that when the onCopy handler *does*\n      //        fire, it doesn't get copied.  Otherwise the copied text would have two spaces in a row,\n      //        e.g. \"hi  http://longdomainname.com/foo\".\n      //   <span style='font-size:0'>&nbsp;</span>\n      // </span>\n      // <span style='font-size:0'>  <!-- This stuff should get copied but not displayed -->\n      //   http://longdomai\n      // </span>\n      // <span class='js-display-url'> <!-- This stuff should get displayed *and* copied -->\n      //   nname.com/foo\n      // </span>\n      // <span class='tco-ellipsis'> <!-- This stuff should get displayed but not copied -->\n      //   <span style='font-size:0'>&nbsp;</span>\n      //   …\n      // </span>\n      v['invisible'] = options.invisibleTagAttrs;\n      return stringSupplant(\"<span class='tco-ellipsis'>#{precedingEllipsis}<span #{invisible}>&nbsp;</span></span><span #{invisible}>#{beforeDisplayUrl}</span><span class='js-display-url'>#{displayUrlSansEllipses}</span><span #{invisible}>#{afterDisplayUrl}</span><span class='tco-ellipsis'><span #{invisible}>&nbsp;</span>#{followingEllipsis}</span>\", v);\n    }\n    return displayUrl;\n  };\n\n  twttr.txt.autoLinkEntities = function(text, entities, options) {\n    options = clone(options || {});\n\n    options.hashtagClass = options.hashtagClass || DEFAULT_HASHTAG_CLASS;\n    options.hashtagUrlBase = options.hashtagUrlBase || \"https://twitter.com/#!/search?q=%23\";\n    options.cashtagClass = options.cashtagClass || DEFAULT_CASHTAG_CLASS;\n    options.cashtagUrlBase = options.cashtagUrlBase || \"https://twitter.com/#!/search?q=%24\";\n    options.listClass = options.listClass || DEFAULT_LIST_CLASS;\n    options.usernameClass = options.usernameClass || DEFAULT_USERNAME_CLASS;\n    options.usernameUrlBase = options.usernameUrlBase || \"https://twitter.com/\";\n    options.listUrlBase = options.listUrlBase || \"https://twitter.com/\";\n    options.htmlAttrs = twttr.txt.extractHtmlAttrsFromOptions(options);\n    options.invisibleTagAttrs = options.invisibleTagAttrs || \"style='position:absolute;left:-9999px;'\";\n\n    // remap url entities to hash\n    var urlEntities, i, len;\n    if(options.urlEntities) {\n      urlEntities = {};\n      for(i = 0, len = options.urlEntities.length; i < len; i++) {\n        urlEntities[options.urlEntities[i].url] = options.urlEntities[i];\n      }\n      options.urlEntities = urlEntities;\n    }\n\n    var result = \"\";\n    var beginIndex = 0;\n\n    // sort entities by start index\n    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n\n    var nonEntity = options.htmlEscapeNonEntities ? twttr.txt.htmlEscape : function(text) {\n      return text;\n    };\n\n    for (var i = 0; i < entities.length; i++) {\n      var entity = entities[i];\n      result += nonEntity(text.substring(beginIndex, entity.indices[0]));\n\n      if (entity.url) {\n        result += twttr.txt.linkToUrl(entity, text, options);\n      } else if (entity.hashtag) {\n        result += twttr.txt.linkToHashtag(entity, text, options);\n      } else if (entity.screenName) {\n        result += twttr.txt.linkToMentionAndList(entity, text, options);\n      } else if (entity.cashtag) {\n        result += twttr.txt.linkToCashtag(entity, text, options);\n      }\n      beginIndex = entity.indices[1];\n    }\n    result += nonEntity(text.substring(beginIndex, text.length));\n    return result;\n  };\n\n  twttr.txt.autoLinkWithJSON = function(text, json, options) {\n    // map JSON entity to twitter-text entity\n    if (json.user_mentions) {\n      for (var i = 0; i < json.user_mentions.length; i++) {\n        // this is a @mention\n        json.user_mentions[i].screenName = json.user_mentions[i].screen_name;\n      }\n    }\n\n    if (json.hashtags) {\n      for (var i = 0; i < json.hashtags.length; i++) {\n        // this is a #hashtag\n        json.hashtags[i].hashtag = json.hashtags[i].text;\n      }\n    }\n\n    if (json.symbols) {\n      for (var i = 0; i < json.symbols.length; i++) {\n        // this is a $CASH tag\n        json.symbols[i].cashtag = json.symbols[i].text;\n      }\n    }\n\n    // concatenate all entities\n    var entities = [];\n    for (var key in json) {\n      entities = entities.concat(json[key]);\n    }\n\n    // modify indices to UTF-16\n    twttr.txt.modifyIndicesFromUnicodeToUTF16(text, entities);\n\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.extractHtmlAttrsFromOptions = function(options) {\n    var htmlAttrs = {};\n    for (var k in options) {\n      var v = options[k];\n      if (OPTIONS_NOT_ATTRIBUTES[k]) continue;\n      if (BOOLEAN_ATTRIBUTES[k]) {\n        v = v ? k : null;\n      }\n      if (v == null) continue;\n      htmlAttrs[k] = v;\n    }\n    return htmlAttrs;\n  };\n\n  twttr.txt.autoLink = function(text, options) {\n    var entities = twttr.txt.extractEntitiesWithIndices(text, {extractUrlsWithoutProtocol: false});\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.autoLinkUsernamesOrLists = function(text, options) {\n    var entities = twttr.txt.extractMentionsOrListsWithIndices(text);\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.autoLinkHashtags = function(text, options) {\n    var entities = twttr.txt.extractHashtagsWithIndices(text);\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.autoLinkCashtags = function(text, options) {\n    var entities = twttr.txt.extractCashtagsWithIndices(text);\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.autoLinkUrlsCustom = function(text, options) {\n    var entities = twttr.txt.extractUrlsWithIndices(text, {extractUrlsWithoutProtocol: false});\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.removeOverlappingEntities = function(entities) {\n    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n\n    var prev = entities[0];\n    for (var i = 1; i < entities.length; i++) {\n      if (prev.indices[1] > entities[i].indices[0]) {\n        entities.splice(i, 1);\n        i--;\n      } else {\n        prev = entities[i];\n      }\n    }\n  };\n\n  twttr.txt.extractEntitiesWithIndices = function(text, options) {\n    var entities = twttr.txt.extractUrlsWithIndices(text, options)\n                    .concat(twttr.txt.extractMentionsOrListsWithIndices(text))\n                    .concat(twttr.txt.extractHashtagsWithIndices(text, {checkUrlOverlap: false}))\n                    .concat(twttr.txt.extractCashtagsWithIndices(text));\n\n    if (entities.length == 0) {\n      return [];\n    }\n\n    twttr.txt.removeOverlappingEntities(entities);\n    return entities;\n  };\n\n  twttr.txt.extractMentions = function(text) {\n    var screenNamesOnly = [],\n        screenNamesWithIndices = twttr.txt.extractMentionsWithIndices(text);\n\n    for (var i = 0; i < screenNamesWithIndices.length; i++) {\n      var screenName = screenNamesWithIndices[i].screenName;\n      screenNamesOnly.push(screenName);\n    }\n\n    return screenNamesOnly;\n  };\n\n  twttr.txt.extractMentionsWithIndices = function(text) {\n    var mentions = [],\n        mentionOrList,\n        mentionsOrLists = twttr.txt.extractMentionsOrListsWithIndices(text);\n\n    for (var i = 0 ; i < mentionsOrLists.length; i++) {\n      mentionOrList = mentionsOrLists[i];\n      if (mentionOrList.listSlug == '') {\n        mentions.push({\n          screenName: mentionOrList.screenName,\n          indices: mentionOrList.indices\n        });\n      }\n    }\n\n    return mentions;\n  };\n\n  /**\n   * Extract list or user mentions.\n   * (Presence of listSlug indicates a list)\n   */\n  twttr.txt.extractMentionsOrListsWithIndices = function(text) {\n    if (!text || !text.match(twttr.txt.regexen.atSigns)) {\n      return [];\n    }\n\n    var possibleNames = [],\n        slashListname;\n\n    text.replace(twttr.txt.regexen.validMentionOrList, function(match, before, atSign, screenName, slashListname, offset, chunk) {\n      var after = chunk.slice(offset + match.length);\n      if (!after.match(twttr.txt.regexen.endMentionMatch)) {\n        slashListname = slashListname || '';\n        var startPosition = offset + before.length;\n        var endPosition = startPosition + screenName.length + slashListname.length + 1;\n        possibleNames.push({\n          screenName: screenName,\n          listSlug: slashListname,\n          indices: [startPosition, endPosition]\n        });\n      }\n    });\n\n    return possibleNames;\n  };\n\n\n  twttr.txt.extractReplies = function(text) {\n    if (!text) {\n      return null;\n    }\n\n    var possibleScreenName = text.match(twttr.txt.regexen.validReply);\n    if (!possibleScreenName ||\n        RegExp.rightContext.match(twttr.txt.regexen.endMentionMatch)) {\n      return null;\n    }\n\n    return possibleScreenName[1];\n  };\n\n  twttr.txt.extractUrls = function(text, options) {\n    var urlsOnly = [],\n        urlsWithIndices = twttr.txt.extractUrlsWithIndices(text, options);\n\n    for (var i = 0; i < urlsWithIndices.length; i++) {\n      urlsOnly.push(urlsWithIndices[i].url);\n    }\n\n    return urlsOnly;\n  };\n\n  twttr.txt.extractUrlsWithIndices = function(text, options) {\n    if (!options) {\n      options = {extractUrlsWithoutProtocol: true};\n    }\n    if (!text || (options.extractUrlsWithoutProtocol ? !text.match(/\\./) : !text.match(/:/))) {\n      return [];\n    }\n\n    var urls = [];\n\n    while (twttr.txt.regexen.extractUrl.exec(text)) {\n      var before = RegExp.$2, url = RegExp.$3, protocol = RegExp.$4, domain = RegExp.$5, path = RegExp.$7;\n      var endPosition = twttr.txt.regexen.extractUrl.lastIndex,\n          startPosition = endPosition - url.length;\n\n      // if protocol is missing and domain contains non-ASCII characters,\n      // extract ASCII-only domains.\n      if (!protocol) {\n        if (!options.extractUrlsWithoutProtocol\n            || before.match(twttr.txt.regexen.invalidUrlWithoutProtocolPrecedingChars)) {\n          continue;\n        }\n        var lastUrl = null,\n            asciiEndPosition = 0;\n        domain.replace(twttr.txt.regexen.validAsciiDomain, function(asciiDomain) {\n          var asciiStartPosition = domain.indexOf(asciiDomain, asciiEndPosition);\n          asciiEndPosition = asciiStartPosition + asciiDomain.length;\n          lastUrl = {\n            url: asciiDomain,\n            indices: [startPosition + asciiStartPosition, startPosition + asciiEndPosition]\n          };\n          if (path\n              || asciiDomain.match(twttr.txt.regexen.validSpecialShortDomain)\n              || !asciiDomain.match(twttr.txt.regexen.invalidShortDomain)) {\n            urls.push(lastUrl);\n          }\n        });\n\n        // no ASCII-only domain found. Skip the entire URL.\n        if (lastUrl == null) {\n          continue;\n        }\n\n        // lastUrl only contains domain. Need to add path and query if they exist.\n        if (path) {\n          lastUrl.url = url.replace(domain, lastUrl.url);\n          lastUrl.indices[1] = endPosition;\n        }\n      } else {\n        // In the case of t.co URLs, don't allow additional path characters.\n        if (url.match(twttr.txt.regexen.validTcoUrl)) {\n          url = RegExp.lastMatch;\n          endPosition = startPosition + url.length;\n        }\n        urls.push({\n          url: url,\n          indices: [startPosition, endPosition]\n        });\n      }\n    }\n\n    return urls;\n  };\n\n  twttr.txt.extractHashtags = function(text) {\n    var hashtagsOnly = [],\n        hashtagsWithIndices = twttr.txt.extractHashtagsWithIndices(text);\n\n    for (var i = 0; i < hashtagsWithIndices.length; i++) {\n      hashtagsOnly.push(hashtagsWithIndices[i].hashtag);\n    }\n\n    return hashtagsOnly;\n  };\n\n  twttr.txt.extractHashtagsWithIndices = function(text, options) {\n    if (!options) {\n      options = {checkUrlOverlap: true};\n    }\n\n    if (!text || !text.match(twttr.txt.regexen.hashSigns)) {\n      return [];\n    }\n\n    var tags = [];\n\n    text.replace(twttr.txt.regexen.validHashtag, function(match, before, hash, hashText, offset, chunk) {\n      var after = chunk.slice(offset + match.length);\n      if (after.match(twttr.txt.regexen.endHashtagMatch))\n        return;\n      var startPosition = offset + before.length;\n      var endPosition = startPosition + hashText.length + 1;\n      tags.push({\n        hashtag: hashText,\n        indices: [startPosition, endPosition]\n      });\n    });\n\n    if (options.checkUrlOverlap) {\n      // also extract URL entities\n      var urls = twttr.txt.extractUrlsWithIndices(text);\n      if (urls.length > 0) {\n        var entities = tags.concat(urls);\n        // remove overlap\n        twttr.txt.removeOverlappingEntities(entities);\n        // only push back hashtags\n        tags = [];\n        for (var i = 0; i < entities.length; i++) {\n          if (entities[i].hashtag) {\n            tags.push(entities[i]);\n          }\n        }\n      }\n    }\n\n    return tags;\n  };\n\n  twttr.txt.extractCashtags = function(text) {\n    var cashtagsOnly = [],\n        cashtagsWithIndices = twttr.txt.extractCashtagsWithIndices(text);\n\n    for (var i = 0; i < cashtagsWithIndices.length; i++) {\n      cashtagsOnly.push(cashtagsWithIndices[i].cashtag);\n    }\n\n    return cashtagsOnly;\n  };\n\n  twttr.txt.extractCashtagsWithIndices = function(text) {\n    if (!text || text.indexOf(\"$\") == -1) {\n      return [];\n    }\n\n    var tags = [];\n\n    text.replace(twttr.txt.regexen.validCashtag, function(match, before, dollar, cashtag, offset, chunk) {\n      var startPosition = offset + before.length;\n      var endPosition = startPosition + cashtag.length + 1;\n      tags.push({\n        cashtag: cashtag,\n        indices: [startPosition, endPosition]\n      });\n    });\n\n    return tags;\n  };\n\n  twttr.txt.modifyIndicesFromUnicodeToUTF16 = function(text, entities) {\n    twttr.txt.convertUnicodeIndices(text, entities, false);\n  };\n\n  twttr.txt.modifyIndicesFromUTF16ToUnicode = function(text, entities) {\n    twttr.txt.convertUnicodeIndices(text, entities, true);\n  };\n\n  twttr.txt.getUnicodeTextLength = function(text) {\n    return text.replace(twttr.txt.regexen.non_bmp_code_pairs, ' ').length;\n  };\n\n  twttr.txt.convertUnicodeIndices = function(text, entities, indicesInUTF16) {\n    if (entities.length == 0) {\n      return;\n    }\n\n    var charIndex = 0;\n    var codePointIndex = 0;\n\n    // sort entities by start index\n    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n    var entityIndex = 0;\n    var entity = entities[0];\n\n    while (charIndex < text.length) {\n      if (entity.indices[0] == (indicesInUTF16 ? charIndex : codePointIndex)) {\n        var len = entity.indices[1] - entity.indices[0];\n        entity.indices[0] = indicesInUTF16 ? codePointIndex : charIndex;\n        entity.indices[1] = entity.indices[0] + len;\n\n        entityIndex++;\n        if (entityIndex == entities.length) {\n          // no more entity\n          break;\n        }\n        entity = entities[entityIndex];\n      }\n\n      var c = text.charCodeAt(charIndex);\n      if (0xD800 <= c && c <= 0xDBFF && charIndex < text.length - 1) {\n        // Found high surrogate char\n        c = text.charCodeAt(charIndex + 1);\n        if (0xDC00 <= c && c <= 0xDFFF) {\n          // Found surrogate pair\n          charIndex++;\n        }\n      }\n      codePointIndex++;\n      charIndex++;\n    }\n  };\n\n  // this essentially does text.split(/<|>/)\n  // except that won't work in IE, where empty strings are ommitted\n  // so \"<>\".split(/<|>/) => [] in IE, but is [\"\", \"\", \"\"] in all others\n  // but \"<<\".split(\"<\") => [\"\", \"\", \"\"]\n  twttr.txt.splitTags = function(text) {\n    var firstSplits = text.split(\"<\"),\n        secondSplits,\n        allSplits = [],\n        split;\n\n    for (var i = 0; i < firstSplits.length; i += 1) {\n      split = firstSplits[i];\n      if (!split) {\n        allSplits.push(\"\");\n      } else {\n        secondSplits = split.split(\">\");\n        for (var j = 0; j < secondSplits.length; j += 1) {\n          allSplits.push(secondSplits[j]);\n        }\n      }\n    }\n\n    return allSplits;\n  };\n\n  twttr.txt.hitHighlight = function(text, hits, options) {\n    var defaultHighlightTag = \"em\";\n\n    hits = hits || [];\n    options = options || {};\n\n    if (hits.length === 0) {\n      return text;\n    }\n\n    var tagName = options.tag || defaultHighlightTag,\n        tags = [\"<\" + tagName + \">\", \"</\" + tagName + \">\"],\n        chunks = twttr.txt.splitTags(text),\n        i,\n        j,\n        result = \"\",\n        chunkIndex = 0,\n        chunk = chunks[0],\n        prevChunksLen = 0,\n        chunkCursor = 0,\n        startInChunk = false,\n        chunkChars = chunk,\n        flatHits = [],\n        index,\n        hit,\n        tag,\n        placed,\n        hitSpot;\n\n    for (i = 0; i < hits.length; i += 1) {\n      for (j = 0; j < hits[i].length; j += 1) {\n        flatHits.push(hits[i][j]);\n      }\n    }\n\n    for (index = 0; index < flatHits.length; index += 1) {\n      hit = flatHits[index];\n      tag = tags[index % 2];\n      placed = false;\n\n      while (chunk != null && hit >= prevChunksLen + chunk.length) {\n        result += chunkChars.slice(chunkCursor);\n        if (startInChunk && hit === prevChunksLen + chunkChars.length) {\n          result += tag;\n          placed = true;\n        }\n\n        if (chunks[chunkIndex + 1]) {\n          result += \"<\" + chunks[chunkIndex + 1] + \">\";\n        }\n\n        prevChunksLen += chunkChars.length;\n        chunkCursor = 0;\n        chunkIndex += 2;\n        chunk = chunks[chunkIndex];\n        chunkChars = chunk;\n        startInChunk = false;\n      }\n\n      if (!placed && chunk != null) {\n        hitSpot = hit - prevChunksLen;\n        result += chunkChars.slice(chunkCursor, hitSpot) + tag;\n        chunkCursor = hitSpot;\n        if (index % 2 === 0) {\n          startInChunk = true;\n        } else {\n          startInChunk = false;\n        }\n      } else if(!placed) {\n        placed = true;\n        result += tag;\n      }\n    }\n\n    if (chunk != null) {\n      if (chunkCursor < chunkChars.length) {\n        result += chunkChars.slice(chunkCursor);\n      }\n      for (index = chunkIndex + 1; index < chunks.length; index += 1) {\n        result += (index % 2 === 0 ? chunks[index] : \"<\" + chunks[index] + \">\");\n      }\n    }\n\n    return result;\n  };\n\n  var MAX_LENGTH = 140;\n\n  // Returns the length of Tweet text with consideration to t.co URL replacement\n  // and chars outside the basic multilingual plane that use 2 UTF16 code points\n  twttr.txt.getTweetLength = function(text, options) {\n    if (!options) {\n      options = {\n          // These come from https://api.twitter.com/1.1/help/configuration.json\n          // described by https://dev.twitter.com/rest/reference/get/help/configuration\n          short_url_length: 23,\n          short_url_length_https: 23\n      };\n    }\n    var textLength = twttr.txt.getUnicodeTextLength(text),\n        urlsWithIndices = twttr.txt.extractUrlsWithIndices(text);\n    twttr.txt.modifyIndicesFromUTF16ToUnicode(text, urlsWithIndices);\n\n    for (var i = 0; i < urlsWithIndices.length; i++) {\n      // Subtract the length of the original URL\n      textLength += urlsWithIndices[i].indices[0] - urlsWithIndices[i].indices[1];\n\n      // Add 23 characters for URL starting with https://\n      // http:// URLs still use https://t.co so they are 23 characters as well\n      if (urlsWithIndices[i].url.toLowerCase().match(twttr.txt.regexen.urlHasHttps)) {\n         textLength += options.short_url_length_https;\n      } else {\n        textLength += options.short_url_length;\n      }\n    }\n\n    return textLength;\n  };\n\n  // Check the text for any reason that it may not be valid as a Tweet. This is meant as a pre-validation\n  // before posting to api.twitter.com. There are several server-side reasons for Tweets to fail but this pre-validation\n  // will allow quicker feedback.\n  //\n  // Returns false if this text is valid. Otherwise one of the following strings will be returned:\n  //\n  //   \"too_long\": if the text is too long\n  //   \"empty\": if the text is nil or empty\n  //   \"invalid_characters\": if the text contains non-Unicode or any of the disallowed Unicode characters\n  twttr.txt.isInvalidTweet = function(text) {\n    if (!text) {\n      return \"empty\";\n    }\n\n    // Determine max length independent of URL length\n    if (twttr.txt.getTweetLength(text) > MAX_LENGTH) {\n      return \"too_long\";\n    }\n\n    if (twttr.txt.hasInvalidCharacters(text)) {\n      return \"invalid_characters\";\n    }\n\n    return false;\n  };\n\n  twttr.txt.hasInvalidCharacters = function(text) {\n    return twttr.txt.regexen.invalid_chars.test(text);\n  };\n\n  twttr.txt.isValidTweetText = function(text) {\n    return !twttr.txt.isInvalidTweet(text);\n  };\n\n  twttr.txt.isValidUsername = function(username) {\n    if (!username) {\n      return false;\n    }\n\n    var extracted = twttr.txt.extractMentions(username);\n\n    // Should extract the username minus the @ sign, hence the .slice(1)\n    return extracted.length === 1 && extracted[0] === username.slice(1);\n  };\n\n  var VALID_LIST_RE = regexSupplant(/^#{validMentionOrList}$/);\n\n  twttr.txt.isValidList = function(usernameList) {\n    var match = usernameList.match(VALID_LIST_RE);\n\n    // Must have matched and had nothing before or after\n    return !!(match && match[1] == \"\" && match[4]);\n  };\n\n  twttr.txt.isValidHashtag = function(hashtag) {\n    if (!hashtag) {\n      return false;\n    }\n\n    var extracted = twttr.txt.extractHashtags(hashtag);\n\n    // Should extract the hashtag minus the # sign, hence the .slice(1)\n    return extracted.length === 1 && extracted[0] === hashtag.slice(1);\n  };\n\n  twttr.txt.isValidUrl = function(url, unicodeDomains, requireProtocol) {\n    if (unicodeDomains == null) {\n      unicodeDomains = true;\n    }\n\n    if (requireProtocol == null) {\n      requireProtocol = true;\n    }\n\n    if (!url) {\n      return false;\n    }\n\n    var urlParts = url.match(twttr.txt.regexen.validateUrlUnencoded);\n\n    if (!urlParts || urlParts[0] !== url) {\n      return false;\n    }\n\n    var scheme = urlParts[1],\n        authority = urlParts[2],\n        path = urlParts[3],\n        query = urlParts[4],\n        fragment = urlParts[5];\n\n    if (!(\n      (!requireProtocol || (isValidMatch(scheme, twttr.txt.regexen.validateUrlScheme) && scheme.match(/^https?$/i))) &&\n      isValidMatch(path, twttr.txt.regexen.validateUrlPath) &&\n      isValidMatch(query, twttr.txt.regexen.validateUrlQuery, true) &&\n      isValidMatch(fragment, twttr.txt.regexen.validateUrlFragment, true)\n    )) {\n      return false;\n    }\n\n    return (unicodeDomains && isValidMatch(authority, twttr.txt.regexen.validateUrlUnicodeAuthority)) ||\n           (!unicodeDomains && isValidMatch(authority, twttr.txt.regexen.validateUrlAuthority));\n  };\n\n  function isValidMatch(string, regex, optional) {\n    if (!optional) {\n      // RegExp[\"$&\"] is the text of the last match\n      // blank strings are ok, but are falsy, so we check stringiness instead of truthiness\n      return ((typeof string === \"string\") && string.match(regex) && RegExp[\"$&\"] === string);\n    }\n\n    // RegExp[\"$&\"] is the text of the last match\n    return (!string || (string.match(regex) && RegExp[\"$&\"] === string));\n  }\n\n  if (typeof module != 'undefined' && module.exports) {\n    module.exports = twttr.txt;\n  }\n\n  if (typeof define == 'function' && define.amd) {\n    define([], twttr.txt);\n  }\n\n  if (typeof window != 'undefined') {\n    if (window.twttr) {\n      for (var prop in twttr) {\n        window.twttr[prop] = twttr[prop];\n      }\n    } else {\n      window.twttr = twttr;\n    }\n  }\n})();\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/twitter-text/twitter-text.js\n ** module id = 39\n ** module chunks = 0\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\n\nimport appendChild from '../render/appendChild';\nimport {\n  addEventListener,\n  removeEventListener\n} from './event';\nimport {\n  BORDER_COLOR,\n  disableUserSelect,\n  enableUserSelect,\n  findSVGContainer,\n  findSVGAtPoint,\n  getAnnotationRect,\n  getMetadata,\n  scaleDown,\n  scaleUp\n} from './utils';\nimport {selectComment} from \"./comments\";\nimport {readonly} from \"../initFile\";\n\nlet _enabled = false;\nlet isDragging = false, overlay;\nlet dragOffsetX, dragOffsetY, dragStartX, dragStartY;\nconst OVERLAY_BORDER_SIZE = 3;\n\n/**\n * Create an overlay for editing an annotation.\n *\n * @param {Element} target The annotation element to apply overlay for\n */\nexport function createEditOverlay(target) {\n  destroyEditOverlay();\n\n  overlay = document.createElement('div');\n  let anchor = document.createElement('a');\n  let parentNode = findSVGContainer(target).parentNode;\n  let id = target.getAttribute('data-pdf-annotate-id');\n  let rect = getAnnotationRect(target);\n  let styleLeft = rect.left - OVERLAY_BORDER_SIZE;\n  let styleTop = rect.top - OVERLAY_BORDER_SIZE;\n  \n  overlay.setAttribute('id', 'pdf-annotate-edit-overlay');\n  overlay.setAttribute('data-target-id', id);\n  overlay.style.boxSizing = 'content-box';\n  overlay.style.position = 'absolute';\n  overlay.style.top = `${styleTop}px`;\n  overlay.style.left = `${styleLeft}px`;\n  overlay.style.width = `${rect.width}px`;\n  overlay.style.height = `${rect.height}px`;\n  overlay.style.border = `${OVERLAY_BORDER_SIZE}px solid ${BORDER_COLOR}`;\n  overlay.style.borderRadius = `${OVERLAY_BORDER_SIZE}px`;\n\n  anchor.innerHTML = '×';\n  anchor.setAttribute('href', 'javascript://');\n  anchor.style.background = '#fff';\n  anchor.style.borderRadius = '20px';\n  anchor.style.border = '1px solid #bbb';\n  anchor.style.color = '#bbb';\n  anchor.style.fontSize = '16px';\n  anchor.style.padding = '2px';\n  anchor.style.textAlign = 'center';\n  anchor.style.textDecoration = 'none';\n  anchor.style.position = 'absolute';\n  anchor.style.top = '-13px';\n  anchor.style.right = '-13px';\n  anchor.style.width = '25px';\n  anchor.style.height = '25px';\n\n  if(readonly)\n    anchor.style.display = 'none';\n  overlay.appendChild(anchor);\n  parentNode.appendChild(overlay);\n  document.addEventListener('click', handleDocumentClick);\n  document.addEventListener('keyup', handleDocumentKeyup);\n  document.addEventListener('mousedown', handleDocumentMousedown);\n  anchor.addEventListener('click', deleteAnnotation);\n  anchor.addEventListener('mouseover', () => {\n    anchor.style.color = '#35A4DC';\n    anchor.style.borderColor = '#999';\n    anchor.style.boxShadow = '0 1px 1px #ccc';\n  });\n  anchor.addEventListener('mouseout', () => {\n    anchor.style.color = '#bbb';\n    anchor.style.borderColor = '#bbb';\n    anchor.style.boxShadow = '';\n  });\n  overlay.addEventListener('mouseover', () => {\n    if (!isDragging&&!readonly) { anchor.style.display = ''; }\n  });\n  overlay.addEventListener('mouseout', () => {\n    anchor.style.display = 'none';\n  });\n}\n\n/**\n * Destroy the edit overlay if it exists.\n */\nfunction destroyEditOverlay() {\n  if (overlay && overlay.parentNode) {\n    overlay.parentNode.removeChild(overlay);\n    overlay = null;\n  }\n  document.removeEventListener('click', handleDocumentClick);\n  document.removeEventListener('keyup', handleDocumentKeyup);\n  document.removeEventListener('mousedown', handleDocumentMousedown);\n  document.removeEventListener('mousemove', handleDocumentMousemove);\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n  enableUserSelect();\n}\n\n/**\n * Delete currently selected annotation\n */\nfunction deleteAnnotation() {\n  if (!overlay) { return; }\n\n  let annotationId = overlay.getAttribute('data-target-id');\n  let nodes = document.querySelectorAll(`[data-pdf-annotate-id=\"${annotationId}\"]`);\n  let svg = overlay.parentNode.querySelector('svg.annotationLayer');\n  let { documentId } = getMetadata(svg);\n\n  [...nodes].forEach((n) => {\n    n.parentNode.removeChild(n);\n  });\n  \n  PDFJSAnnotate.getStoreAdapter().deleteAnnotation(documentId, annotationId);\n\n  destroyEditOverlay();\n}\n\n/**\n * Handle document.click event\n *\n * @param {Event} e The DOM event that needs to be handled\n */\nfunction handleDocumentClick(e) {\n  if (!findSVGAtPoint(e.clientX, e.clientY)) { return; }\n\n  // Remove current overlay\n  let overlay = document.getElementById('pdf-annotate-edit-overlay');\n  if (overlay) {\n    if (isDragging || e.target === overlay) {\n      return;\n    }\n    destroyEditOverlay();\n  }\n}\n\n/**\n * Handle document.keyup event\n *\n * @param {Event} e The DOM event that needs to be handled\n */\nfunction handleDocumentKeyup(e) {\n  if (overlay && e.keyCode === 46 &&\n      e.target.nodeName.toLowerCase() !== 'textarea' &&\n      e.target.nodeName.toLowerCase() !== 'input') {\n    if(!readonly)\n      deleteAnnotation();\n  }\n}\n\n/**\n * Handle document.mousedown event\n *\n * @param {Event} e The DOM event that needs to be handled\n */\nfunction handleDocumentMousedown(e) {\n  if (e.target !== overlay) { return; }\n\n  // Highlight and strikeout annotations are bound to text within the document.\n  // It doesn't make sense to allow repositioning these types of annotations.\n  let annotationId = overlay.getAttribute('data-target-id');\n  let target = document.querySelector(`[data-pdf-annotate-id=\"${annotationId}\"]`);\n  let type = target.getAttribute('data-pdf-annotate-type');\n\n  if (type === 'highlight' || type === 'strikeout') { return; }\n\n  if(!readonly)\n    isDragging = true;\n    dragOffsetX = e.clientX;\n    dragOffsetY = e.clientY;\n    dragStartX = overlay.offsetLeft;\n    dragStartY = overlay.offsetTop;\n\n  overlay.style.background = 'rgba(255, 255, 255, 0.7)';\n  overlay.style.cursor = 'move';\n  // if(!readonly)\n    overlay.querySelector('a').style.display = 'none';\n\n  document.addEventListener('mousemove', handleDocumentMousemove);\n  document.addEventListener('mouseup', handleDocumentMouseup);\n  disableUserSelect();\n}\n\n/**\n * Handle document.mousemove event\n *\n * @param {Event} e The DOM event that needs to be handled\n */\nfunction handleDocumentMousemove(e) {\n  if(readonly)\n    return;\n  let annotationId = overlay.getAttribute('data-target-id');\n  let parentNode = overlay.parentNode;\n  let rect = parentNode.getBoundingClientRect();\n  let y = (dragStartY + (e.clientY - dragOffsetY));\n  let x = (dragStartX + (e.clientX - dragOffsetX));\n  let minY = 0;\n  let maxY = rect.height;\n  let minX = 0;\n  let maxX = rect.width;\n\n  if (y > minY && y + overlay.offsetHeight < maxY) {\n    overlay.style.top = `${y}px`;\n  }\n\n  if (x > minX && x + overlay.offsetWidth < maxX) {\n    overlay.style.left = `${x}px`;\n  }\n}\n\n/**\n * Handle document.mouseup event\n *\n * @param {Event} e The DOM event that needs to be handled\n */\nfunction handleDocumentMouseup(e) {\n  let annotationId = overlay.getAttribute('data-target-id');\n  let target = document.querySelectorAll(`[data-pdf-annotate-id=\"${annotationId}\"]`);\n  let type = target[0].getAttribute('data-pdf-annotate-type');\n  let svg = overlay.parentNode.querySelector('svg.annotationLayer');\n  let { documentId } = getMetadata(svg);\n  \n  overlay.querySelector('a').style.display = '';\n\n  function getDelta(propX, propY) {\n    return calcDelta(parseInt(target[0].getAttribute(propX), 10), parseInt(target[0].getAttribute(propY), 10));\n  }\n\n  function calcDelta(x, y) {\n    return {\n      deltaX: OVERLAY_BORDER_SIZE + scaleDown(svg, {x: overlay.offsetLeft}).x - x,\n      deltaY: OVERLAY_BORDER_SIZE + scaleDown(svg, {y: overlay.offsetTop}).y - y\n    };\n  }\n\n  PDFJSAnnotate.getStoreAdapter().getAnnotation(documentId, annotationId).then((annotation) => {\n    if (['area', 'highlight', 'point', 'textbox'].indexOf(type) > -1) {\n      let { deltaX, deltaY } = getDelta('x', 'y');\n      [...target].forEach((t, i) => {\n        if (deltaY !== 0) {\n          let modelY = parseInt(t.getAttribute('y'), 10) + deltaY;\n          let viewY = modelY;\n\n          if (type === 'textbox') {\n            viewY += annotation.size;\n          }\n\n          if (type === 'point' && !$.browser.mozilla) {\n            viewY = scaleUp(svg, { viewY }).viewY;\n          }\n          if($.browser.mozilla)\n            viewY -= 8;\n\n          t.setAttribute('y', viewY);\n          if (annotation.rectangles) {\n            annotation.rectangles[i].y = modelY;\n          } else if (annotation.y) {\n            annotation.y = modelY;\n          }\n        }\n        if (deltaX !== 0) {\n          let modelX = parseInt(t.getAttribute('x'), 10) + deltaX;\n          let viewX = modelX;\n\n          if (type === 'point' && !$.browser.mozilla) {\n            viewX = scaleUp(svg, { viewX }).viewX;\n          }\n          if($.browser.mozilla)\n            viewX -= 8;\n\n          t.setAttribute('x', viewX);\n          if (annotation.rectangles) {\n            annotation.rectangles[i].x = modelX;\n          } else if (annotation.x) {\n            annotation.x = modelX;\n          }\n        }\n      });\n    // } else if (type === 'strikeout') {\n    //   let { deltaX, deltaY } = getDelta('x1', 'y1');\n    //   [...target].forEach(target, (t, i) => {\n    //     if (deltaY !== 0) {\n    //       t.setAttribute('y1', parseInt(t.getAttribute('y1'), 10) + deltaY);\n    //       t.setAttribute('y2', parseInt(t.getAttribute('y2'), 10) + deltaY);\n    //       annotation.rectangles[i].y = parseInt(t.getAttribute('y1'), 10);\n    //     }\n    //     if (deltaX !== 0) {\n    //       t.setAttribute('x1', parseInt(t.getAttribute('x1'), 10) + deltaX);\n    //       t.setAttribute('x2', parseInt(t.getAttribute('x2'), 10) + deltaX);\n    //       annotation.rectangles[i].x = parseInt(t.getAttribute('x1'), 10);\n    //     }\n    //   });\n    } else if (type === 'drawing') {\n      let rect = scaleDown(svg, getAnnotationRect(target[0]));\n      let [originX, originY] = annotation.lines[0];\n      let { deltaX, deltaY } = calcDelta(originX, originY);\n\n      // origin isn't necessarily at 0/0 in relation to overlay x/y\n      // adjust the difference between overlay and drawing coords\n      deltaY += (originY - rect.top);\n      deltaX += (originX - rect.left);\n\n      annotation.lines.forEach((line, i) => {\n        let [x, y] = annotation.lines[i];\n        annotation.lines[i][0] = x + deltaX;\n        annotation.lines[i][1] = y + deltaY;\n      });\n\n      target[0].parentNode.removeChild(target[0]);\n      appendChild(svg, annotation);\n    }\n\n    if(!readonly)\n      PDFJSAnnotate.getStoreAdapter().editAnnotation(documentId, annotationId, annotation);\n  });\n\n  setTimeout(() => {\n    isDragging = false;\n  }, 0);\n\n  overlay.style.background = '';\n  overlay.style.cursor = '';\n\n  document.removeEventListener('mousemove', handleDocumentMousemove);\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n  enableUserSelect();\n}\n\n/**\n * Handle annotation.click event\n *\n * @param {Element} e The annotation element that was clicked\n */\nfunction handleAnnotationClick(target) {\n  const type = target.dataset['pdfAnnotateType']\n  if(type==='point')\n    selectComment(target.dataset['pdfAnnotateId']);\n  createEditOverlay(target);\n}\n\n/**\n * Enable edit mode behavior.\n */\nexport function enableEdit () {\n  if (_enabled) { return; }\n\n  _enabled = true;\n  addEventListener('annotation:click', handleAnnotationClick);\n};\n\n/**\n * Disable edit mode behavior.\n */\nexport function disableEdit () {\n  destroyEditOverlay();\n\n\n  if (!_enabled) { return; }\n\n  _enabled = false;\n  removeEventListener('annotation:click', handleAnnotationClick);\n};\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/edit.js\n **/","import objectAssign from 'object-assign';\nimport renderLine from './renderLine';\nimport renderPath from './renderPath';\nimport renderPoint from './renderPoint';\nimport renderRect from './renderRect';\nimport renderText from './renderText';\n\nconst isFirefox = /firefox/i.test(navigator.userAgent);\n\n/**\n * Get the x/y translation to be used for transforming the annotations\n * based on the rotation of the viewport.\n *\n * @param {Object} viewport The viewport data from the page\n * @return {Object}\n */\nfunction getTranslation(viewport) {\n    let x;\n    let y;\n\n    // Modulus 360 on the rotation so that we only\n    // have to worry about four possible values.\n    switch (viewport.rotation % 360) {\n        case 0:\n            x = y = 0;\n            break;\n        case 90:\n            x = 0;\n            y = (viewport.width / viewport.scale) * -1;\n            break;\n        case 180:\n            x = (viewport.width / viewport.scale) * -1;\n            y = (viewport.height / viewport.scale) * -1;\n            break;\n        case 270:\n            x = (viewport.height / viewport.scale) * -1;\n            y = 0;\n            break;\n    }\n\n    return {x, y};\n}\n\n/**\n * Transform the rotation and scale of a node using SVG's native transform attribute.\n *\n * @param {Node} node The node to be transformed\n * @param {Object} viewport The page's viewport data\n * @return {Node}\n */\nfunction transform(node, viewport) {\n    let trans = getTranslation(viewport);\n\n    // Let SVG natively transform the element\n    node.setAttribute('transform', `scale(${viewport.scale}) rotate(${viewport.rotation}) translate(${trans.x}, ${trans.y})`);\n\n    // Manually adjust x/y for nested SVG nodes\n    // console.log(node);\n    // console.log(viewport.scale);\n    // if (!isFirefox && node.nodeName.toLowerCase() === 'svg') {\n    //     node.setAttribute('x', parseInt(node.getAttribute('x'), 10) * viewport.scale);\n    //     node.setAttribute('y', parseInt(node.getAttribute('y'), 10) * viewport.scale);\n\n    //     let x = parseInt(node.getAttribute('x', 10));\n    //     let y = parseInt(node.getAttribute('y', 10));\n    //     let width = parseInt(node.getAttribute('width'), 10);\n    //     let height = parseInt(node.getAttribute('height'), 10);\n    //     let path = node.querySelector('path');\n    //     let svg = path.parentNode;\n\n    //     // Scale width/height\n    //     [node, svg, path, node.querySelector('rect')].forEach((n) => {\n    //         n.setAttribute('width', parseInt(n.getAttribute('width'), 10) * viewport.scale);\n    //         n.setAttribute('height', parseInt(n.getAttribute('height'), 10) * viewport.scale);\n    //     });\n\n    //     // Transform path but keep scale at 100% since it will be handled natively\n    //     transform(path, objectAssign({}, viewport, {scale: 1}));\n\n    //     switch (viewport.rotation % 360) {\n    //         case 90:\n    //             node.setAttribute('x', viewport.width - y - width);\n    //             node.setAttribute('y', x);\n    //             svg.setAttribute('x', 1);\n    //             svg.setAttribute('y', 0);\n    //             break;\n    //         case 180:\n    //             node.setAttribute('x', viewport.width - x - width);\n    //             node.setAttribute('y', viewport.height - y - height);\n    //             svg.setAttribute('y', 2);\n    //             break;\n    //         case 270:\n    //             node.setAttribute('x', y);\n    //             node.setAttribute('y', viewport.height - x - height);\n    //             svg.setAttribute('x', -1);\n    //             svg.setAttribute('y', 0);\n    //             break;\n    //     }\n    // }\n    // else{\n    //     Object.keys(node).forEach((key) => {\n    //     node[key] = node[key] * viewport.scale;\n    //     });\n    // }\n\n    return node;\n}\n\n/**\n * Append an annotation as a child of an SVG.\n *\n * @param {SVGElement} svg The SVG element to append the annotation to\n * @param {Object} annotation The annotation definition to render and append\n * @param {Object} viewport The page's viewport data\n * @return {SVGElement} A node that was created and appended by this function\n */\nexport default function appendChild(svg, annotation, viewport) {\n    if (!viewport) {\n        viewport = JSON.parse(svg.getAttribute('data-pdf-annotate-viewport'));\n    }\n\n    let child;\n    switch (annotation.type) {\n        case 'area':\n        case 'highlight':\n            child = renderRect(annotation);\n            break;\n        case 'strikeout':\n            child = renderLine(annotation);\n            break;\n        case 'point':\n            child = renderPoint(annotation);\n            break;\n        case 'textbox':\n            child = renderText(annotation);\n            break;\n        case 'drawing':\n            child = renderPath(annotation);\n            break;\n    }\n\n    // If no type was provided for an annotation it will result in node being null.\n    // Skip appending/transforming if node doesn't exist.\n    if (child) {\n        // Set attributes\n        child.setAttribute('data-pdf-annotate-id', annotation.uuid);\n        child.setAttribute('data-pdf-annotate-type', annotation.type);\n        child.setAttribute('aria-hidden', true);\n\n        svg.appendChild(transform(child, viewport));\n    }\n\n    return child;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/appendChild.js\n **/","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/object-assign/index.js\n ** module id = 42\n ** module chunks = 0\n **/","import setAttributes from '../utils/setAttributes';\nimport normalizeColor from '../utils/normalizeColor';\n\n/**\n * Create SVGLineElements from an annotation definition.\n * This is used for anntations of type `strikeout`.\n *\n * @param {Object} a The annotation definition\n * @return {SVGGElement} A group of all lines to be rendered\n */\nexport default function renderLine(a) {\n  let group = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n  setAttributes(group, {\n    stroke: normalizeColor(a.color || '#f00'),\n    strokeWidth: 1\n  });\n\n  a.rectangles.forEach((r) => {\n    let line = document.createElementNS('http://www.w3.org/2000/svg', 'line');\n\n    setAttributes(line, {\n      x1: r.x,\n      y1: r.y,\n      x2: r.x + r.width,\n      y2: r.y,\n    });\n\n    group.appendChild(line);\n  });\n\n  return group;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/renderLine.js\n **/","const UPPER_REGEX = /[A-Z]/g;\n\n// Don't convert these attributes from camelCase to hyphenated-attributes\nconst BLACKLIST = [\n  'viewBox'\n];\n\nlet keyCase = (key) => {\n  if (BLACKLIST.indexOf(key) === -1) {\n    key = key.replace(UPPER_REGEX, match => '-' + match.toLowerCase());\n  }\n  return key;\n}\n\n/**\n * Set attributes for a node from a map\n *\n * @param {Node} node The node to set attributes on\n * @param {Object} attributes The map of key/value pairs to use for attributes\n */\nexport default function setAttributes(node, attributes) {\n  Object.keys(attributes).forEach((key) => {\n    node.setAttribute(keyCase(key), attributes[key]);\n  });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/setAttributes.js\n **/","const REGEX_HASHLESS_HEX = /^([a-f0-9]{6}|[a-f0-9]{3})$/i;\n\n/**\n * Normalize a color value\n *\n * @param {String} color The color to normalize\n * @return {String}\n */\nexport default function normalizeColor(color) {\n  if (REGEX_HASHLESS_HEX.test(color)) {\n    color = `#${color}`;\n  }\n  return color;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/normalizeColor.js\n **/","import setAttributes from '../utils/setAttributes';\nimport normalizeColor from '../utils/normalizeColor';\n\n/**\n * Create SVGPathElement from an annotation definition.\n * This is used for anntations of type `drawing`.\n *\n * @param {Object} a The annotation definition\n * @return {SVGPathElement} The path to be rendered\n */\nexport default function renderPath(a) {\n  let d = [];\n  let path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n  \n  for (let i=0, l=a.lines.length; i<l; i++) {\n    var p1 = a.lines[i];\n    var p2 = a.lines[i+1];\n    if (p2) {\n      d.push(`M${p1[0]} ${p1[1]} ${p2[0]} ${p2[1]}`);\n    }\n  }\n  \n  setAttributes(path, {\n    d: `${d.join(' ')}Z`,\n    stroke: normalizeColor(a.color || '#000'),\n    strokeWidth: a.width || 1,\n    fill: 'none'\n  });\n\n  return path;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/renderPath.js\n **/","import setAttributes from '../utils/setAttributes';\n\nconst SIZE = 25;\nconst D = 'M499.968 214.336q-113.832 0 -212.877 38.781t-157.356 104.625 -58.311 142.29q0 62.496 39.897 119.133t112.437 97.929l48.546 27.9 -15.066 53.568q-13.392 50.778 -39.06 95.976 84.816 -35.154 153.45 -95.418l23.994 -21.204 31.806 3.348q38.502 4.464 72.54 4.464 113.832 0 212.877 -38.781t157.356 -104.625 58.311 -142.29 -58.311 -142.29 -157.356 -104.625 -212.877 -38.781z';\n\n/**\n * Create SVGElement from an annotation definition.\n * This is used for anntations of type `comment`.\n *\n * @param {Object} a The annotation definition\n * @return {SVGElement} A svg to be rendered\n */\nexport default function renderPoint(a) {\n  let outerSVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  let innerSVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  let rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n  let path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\n  setAttributes(outerSVG,  {\n    width: SIZE,\n    height: SIZE,\n    x: a.x,\n    y: a.y\n  });\n\n  setAttributes(innerSVG, {\n    width: SIZE,\n    height: SIZE,\n    x: 0,\n    y: (SIZE * 0.05) * -1,\n    viewBox: '0 0 1000 1000'\n  });\n\n  setAttributes(rect, {\n    width: SIZE,\n    height: SIZE,\n    stroke: '#000',\n    fill: '#ff0'\n  });\n\n  setAttributes(path, {\n    d: D,\n    strokeWidth: 50,\n    stroke: '#000',\n    fill: '#fff'\n  });\n\n  innerSVG.appendChild(path);\n  outerSVG.appendChild(rect);\n  outerSVG.appendChild(innerSVG);\n\n  return outerSVG;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/renderPoint.js\n **/","import setAttributes from '../utils/setAttributes';\nimport normalizeColor from '../utils/normalizeColor';\n\n/**\n * Create SVGRectElements from an annotation definition.\n * This is used for anntations of type `area` and `highlight`.\n *\n * @param {Object} a The annotation definition\n * @return {SVGGElement|SVGRectElement} A group of all rects to be rendered\n */\nexport default function renderRect(a) {\n  if (a.type === 'highlight') {\n    let group = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n    setAttributes(group, {\n      fill: normalizeColor(a.color || '#ff0'),\n      fillOpacity: 0.2\n    });\n    \n    a.rectangles.forEach((r) => {\n      group.appendChild(createRect(r));\n    });\n\n    return group;\n  } else {\n    let rect = createRect(a);\n    setAttributes(rect, {\n      stroke: normalizeColor(a.color || '#f00'),\n      fill: 'none'\n    });\n\n    return rect;\n  }\n}\n\nfunction createRect(r) {\n  let rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n\n  setAttributes(rect, {\n    x: r.x,\n    y: r.y,\n    width: r.width,\n    height: r.height\n  });\n\n  return rect;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/renderRect.js\n **/","import setAttributes from '../utils/setAttributes';\nimport normalizeColor from '../utils/normalizeColor';\n\n/**\n * Create SVGTextElement from an annotation definition.\n * This is used for anntations of type `textbox`.\n *\n * @param {Object} a The annotation definition\n * @return {SVGTextElement} A text to be rendered\n */\nexport default function renderText(a) {\n  var text = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n\n  setAttributes(text, {\n    x: a.x,\n    y: a.y + parseInt(a.size, 10),\n    fill: normalizeColor(a.color || '#000'),\n    fontSize: a.size\n  });\n  text.innerHTML = a.content;\n\n  return text;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/renderText.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport appendChild from './appendChild';\nimport renderScreenReaderHints from '../a11y/renderScreenReaderHints';\n\n/**\n * Render the response from PDFJSAnnotate.getStoreAdapter().getAnnotations to SVG\n *\n * @param {SVGElement} svg The SVG element to render the annotations to\n * @param {Object} viewport The page viewport data\n * @param {Object} data The response from PDFJSAnnotate.getStoreAdapter().getAnnotations\n * @return {Promise} Settled once rendering has completed\n *  A settled Promise will be either:\n *    - fulfilled: SVGElement\n *    - rejected: Error\n */\nexport default function render(svg, viewport, data) {\n  return new Promise((resolve, reject) => {\n    // Reset the content of the SVG\n    svg.innerHTML = ''; \n    svg.setAttribute('data-pdf-annotate-container', true);\n    svg.setAttribute('data-pdf-annotate-viewport', JSON.stringify(viewport));\n    svg.removeAttribute('data-pdf-annotate-document');\n    svg.removeAttribute('data-pdf-annotate-page');\n\n    // If there's no data nothing can be done\n    if (!data) {\n      return resolve(svg);\n    }\n\n    svg.setAttribute('data-pdf-annotate-document', data.documentId);\n    svg.setAttribute('data-pdf-annotate-page', data.pageNumber);\n  \n    // Make sure annotations is an array\n    if (!Array.isArray(data.annotations) || data.annotations.length === 0) {\n      return resolve(svg);\n    }\n\n    // Append annotation to svg\n    data.annotations.forEach((a) => {\n      appendChild(svg, a, viewport);\n    });\n\n    resolve(svg);\n  });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/index.js\n **/","import insertScreenReaderHint from './insertScreenReaderHint';\nimport initEventHandlers from './initEventHandlers';\n\n// TODO This is not the right place for this to live\ninitEventHandlers();\n\n/**\n * Insert hints into the DOM for screen readers.\n *\n * @param {Array} annotations The annotations that hints are inserted for\n */\nexport default function renderScreenReaderHints(annotations) {\n  annotations = Array.isArray(annotations) ? annotations : [];\n\n  // Insert hints for each type\n  Object.keys(SORT_TYPES).forEach((type) => {\n    let sortBy = SORT_TYPES[type];\n    annotations\n      .filter((a) => a.type === type)\n      .sort(sortBy)\n      .forEach((a, i) => insertScreenReaderHint(a, i + 1));\n  });\n}\n\n// Sort annotations first by y, then by x.\n// This allows hints to be injected in the order they appear,\n// which makes numbering them easier.\nfunction sortByPoint(a, b) {\n  if (a.y < b.y) {\n    return a.x - b.x;\n  } else {\n    return 1;\n  }\n}\n\n// Sort annotation by it's first rectangle\nfunction sortByRectPoint(a, b) {\n  return sortByPoint(a.rectangles[0], b.rectangles[0]);\n}\n\n// Sort annotation by it's first line\nfunction sortByLinePoint(a, b) {\n  let lineA = a.lines[0];\n  let lineB = b.lines[0];\n  return sortByPoint(\n    {x: lineA[0], y: lineA[1]},\n    {x: lineB[0], y: lineB[1]}\n  );\n}\n\n// Arrange supported types and associated sort methods\nconst SORT_TYPES = {\n  'highlight': sortByRectPoint,\n  'strikeout': sortByRectPoint,\n  'drawing': sortByLinePoint,\n  'textbox': sortByPoint,\n  'point': sortByPoint,\n  'area': sortByPoint\n};\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/renderScreenReaderHints.js\n **/","import createScreenReaderOnly from './createScreenReaderOnly';\nimport insertElementWithinChildren from './insertElementWithinChildren';\nimport insertElementWithinElement from './insertElementWithinElement';\nimport renderScreenReaderComments from './renderScreenReaderComments';\n\n// Annotation types that support comments\nconst COMMENT_TYPES = ['highlight', 'point', 'area'];\n\n/**\n * Insert a hint into the DOM for screen readers for a specific annotation.\n *\n * @param {Object} annotation The annotation to insert a hint for\n * @param {Number} num The number of the annotation out of all annotations of the same type\n */\nexport default function insertScreenReaderHint(annotation, num = 0) {\n  switch (annotation.type) {\n    case 'highlight':\n    case 'strikeout':\n      let rects = annotation.rectangles;\n      let first = rects[0];\n      let last = rects[rects.length - 1];\n\n      insertElementWithinElement(\n        createScreenReaderOnly(`Begin ${annotation.type} annotation ${num}`, annotation.uuid),\n        first.x, first.y, annotation.page, true\n      );\n\n      insertElementWithinElement(\n        createScreenReaderOnly(`End ${annotation.type} annotation ${num}`, `${annotation.uuid}-end`),\n        last.x + last.width, last.y, annotation.page, false\n      );\n      break;\n\n    case 'textbox':\n    case 'point':\n      let text = annotation.type === 'textbox' ? ` (content: ${annotation.content})` : '';\n\n      insertElementWithinChildren(\n        createScreenReaderOnly(`${annotation.type} annotation ${num}${text}`, annotation.uuid),\n        annotation.x, annotation.y, annotation.page\n      );\n      break;\n\n    case 'drawing':\n    case 'area':\n      let x = typeof annotation.x !== 'undefined' ? annotation.x : annotation.lines[0][0];\n      let y = typeof annotation.y !== 'undefined' ? annotation.y : annotation.lines[0][1];\n\n      insertElementWithinChildren(\n        createScreenReaderOnly(`Unlabeled drawing`, annotation.uuid),\n        x, y, annotation.page\n      );\n      break;\n  }\n\n  // Include comments in screen reader hint\n  if (COMMENT_TYPES.includes(annotation.type)) {\n    renderScreenReaderComments(annotation.documentId, annotation.uuid);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/insertScreenReaderHint.js\n **/","/**\n * Create a node that is only visible to screen readers\n *\n * @param {String} content The text content that should be read by screen reader\n * @param {String} [annotationId] The ID of the annotation assocaited\n * @return {Element} An Element that is only visible to screen readers\n */\nexport default function createScreenReaderOnly(content, annotationId) {\n  let node = document.createElement('div');\n  let text = document.createTextNode(content);\n  node.appendChild(text);\n  node.setAttribute('id', `pdf-annotate-screenreader-${annotationId}`);\n  node.style.position = 'absolute';\n  node.style.left = '-10000px';\n  node.style.top = 'auto';\n  node.style.width = '1px';\n  node.style.height = '1px';\n  node.style.overflow = 'hidden';\n  return node;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/createScreenReaderOnly.js\n **/","import insertElementWithinElement from './insertElementWithinElement';\nimport { pointIntersectsRect } from '../UI/utils';\nimport { scaleUp } from '../UI/utils'; \n\n/**\n * Insert an element at a point within the document.\n * This algorithm will try to insert between elements if possible.\n * It will however use `insertElementWithinElement` if it is more accurate.\n *\n * @param {Element} el The element to be inserted\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @param {Number} pageNumber The page number to limit elements to\n * @return {Boolean} True if element was able to be inserted, otherwise false\n */\nexport default function insertElementWithinChildren(el, x, y, pageNumber) {\n  // Try and use most accurate method of inserting within an element\n  if (insertElementWithinElement(el, x, y, pageNumber, true)) {\n    return true;\n  }\n\n  // Fall back to inserting between elements\n  let svg = document.querySelector(`svg[data-pdf-annotate-page=\"${pageNumber}\"]`);\n  let rect = svg.getBoundingClientRect();\n  let nodes = [...svg.parentNode.querySelectorAll('.textLayer > div')];\n\n  y = scaleUp(svg, {y}).y + rect.top;\n  x = scaleUp(svg, {x}).x + rect.left;\n\n  // Find the best node to insert before\n  for (let i=0, l=nodes.length; i<l; i++) {\n    let n = nodes[i];\n    let r = n.getBoundingClientRect();\n    if (y <= r.top) {\n      n.parentNode.insertBefore(el, n);\n      return true;\n    }\n  }\n\n  // If all else fails try to append to the bottom\n  let textLayer = svg.parentNode.querySelector('.textLayer');\n  if (textLayer) {\n    let textRect = textLayer.getBoundingClientRect();\n    if (pointIntersectsRect(x, y, textRect)) {\n      textLayer.appendChild(el);\n      return true;\n    }\n  }\n\n  return false;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/insertElementWithinChildren.js\n **/","import {\n  pointIntersectsRect,\n  scaleUp,\n  scaleDown\n} from '../UI/utils'; \n\n/**\n * Insert an element at a point within the document.\n * This algorithm will only insert within an element amidst it's text content.\n *\n * @param {Element} el The element to be inserted\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @param {Number} pageNumber The page number to limit elements to\n * @param {Boolean} insertBefore Whether the element is to be inserted before or after x\n * @return {Boolean} True if element was able to be inserted, otherwise false\n */\nexport default function insertElementWithinElement(el, x, y, pageNumber, insertBefore) {\n  const OFFSET_ADJUST = 2;\n\n  // If inserting before adjust `x` by looking for element a few px to the right\n  // Otherwise adjust a few px to the left\n  // This is to allow a little tolerance by searching within the box, instead\n  // of getting a false negative by testing right on the border.\n  x = Math.max(x + (OFFSET_ADJUST * (insertBefore ? 1 : -1)), 0);\n\n  let node = textLayerElementFromPoint(x, y + OFFSET_ADJUST, pageNumber);\n  if (!node) {\n    return false;\n  }\n  \n  // Now that node has been found inverse the adjustment for `x`.\n  // This is done to accomodate tolerance by cutting off on the outside of the\n  // text boundary, instead of missing a character by cutting off within.\n  x = x + (OFFSET_ADJUST * (insertBefore ? -1 : 1));\n\n  let svg = document.querySelector(`svg[data-pdf-annotate-page=\"${pageNumber}\"]`);\n  let left = scaleDown(svg, {left: node.getBoundingClientRect().left}).left - svg.getBoundingClientRect().left;\n  let temp = node.cloneNode(true);\n  let head = temp.innerHTML.split('');\n  let tail = [];\n\n  // Insert temp off screen\n  temp.style.position = 'absolute';\n  temp.style.top = '-10000px';\n  temp.style.left = '-10000px';\n  document.body.appendChild(temp);\n\n  while (head.length) {\n    // Don't insert within HTML tags\n    if (head[head.length - 1] === '>') {\n      while(head.length) {\n        tail.unshift(head.pop());\n        if (tail[0] === '<') {\n          break;\n        }\n      }\n    }\n    \n    // Check if width of temp based on current head value satisfies x\n    temp.innerHTML = head.join('');\n    let width = scaleDown(svg, {width: temp.getBoundingClientRect().width}).width;\n    if (left + width <= x) {\n      break;\n    }\n    tail.unshift(head.pop());\n  }\n  \n  // Update original node with new markup, including element to be inserted\n  node.innerHTML = head.join('') + el.outerHTML + tail.join('');\n  temp.parentNode.removeChild(temp);\n\n  return true;\n}\n\n/**\n * Get a text layer element at a given point on a page\n *\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @param {Number} pageNumber The page to limit elements to\n * @return {Element} First text layer element found at the point\n */\nfunction textLayerElementFromPoint(x, y, pageNumber) {\n  let svg = document.querySelector(`svg[data-pdf-annotate-page=\"${pageNumber}\"]`);\n  let rect = svg.getBoundingClientRect();\n  y = scaleUp(svg, {y}).y + rect.top;\n  x = scaleUp(svg, {x}).x + rect.left;\n  return [...svg.parentNode.querySelectorAll('.textLayer [data-canvas-width]')].filter((el) => {\n    return pointIntersectsRect(x, y, el.getBoundingClientRect());\n  })[0];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/insertElementWithinElement.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport insertScreenReaderComment from './insertScreenReaderComment';\n\n/**\n * Insert the comments into the DOM to be available by screen reader\n *\n * Example output:\n *   <div class=\"screenReaderOnly\">\n *    <div>Begin highlight 1</div>\n *    <ol aria-label=\"Comments\">\n *      <li>Foo</li>\n *      <li>Bar</li>\n *      <li>Baz</li>\n *      <li>Qux</li>\n *    </ol>\n *  </div>\n *  <div>Some highlighted text goes here...</div>\n *  <div class=\"screenReaderOnly\">End highlight 1</div>\n *\n * NOTE: `screenReaderOnly` is not a real class, just used for brevity\n *\n * @param {String} documentId The ID of the document\n * @param {String} annotationId The ID of the annotation\n * @param {Array} [comments] Optionally preloaded comments to be rendered\n * @return {Promise}\n */\nexport default function renderScreenReaderComments(documentId, annotationId, comments) {\n  let promise;\n\n  if (Array.isArray(comments)) {\n    promise = Promise.resolve(comments);\n  } else {\n    promise = PDFJSAnnotate.getStoreAdapter().getComments(documentId, annotationId);\n  }\n\n  return promise.then((comments) => {\n    // Node needs to be found by querying DOM as it may have been inserted as innerHTML\n    // leaving `screenReaderNode` as an invalid reference (see `insertElementWithinElement`).\n    let node = document.getElementById(`pdf-annotate-screenreader-${annotationId}`);\n    if (node) { \n      let list = document.createElement('ol');\n      list.setAttribute('id', `pdf-annotate-screenreader-comment-list-${annotationId}`);\n      list.setAttribute('aria-label', 'Comments');\n      node.appendChild(list);\n      comments.forEach(insertScreenReaderComment);\n    }\n  });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/renderScreenReaderComments.js\n **/","/**\n * Insert a comment into the DOM to be available by screen reader\n *\n * @param {Object} comment The comment to be inserted\n */\nexport default function insertScreenReaderComment(comment) {\n  if (!comment) {\n    return;\n  }\n\n  let list = document.querySelector(`#pdf-annotate-screenreader-${comment.annotation} ol`);\n  if (list) {\n    let item = document.createElement('li');\n    item.setAttribute('id', `pdf-annotate-screenreader-comment-${comment.uuid}`);\n    item.appendChild(document.createTextNode(`${comment.content}`));\n    list.appendChild(item);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/insertScreenReaderComment.js\n **/","import insertScreenReaderHint from './insertScreenReaderHint';\nimport renderScreenReaderHints from './renderScreenReaderHints';\nimport insertScreenReaderComment from './insertScreenReaderComment';\nimport renderScreenReaderComments from './renderScreenReaderComments';\nimport { addEventListener } from '../UI/event';\nimport PDFJSAnnotate from '../PDFJSAnnotate';\n\n/**\n * Initialize the event handlers for keeping screen reader hints synced with data\n */\nexport default function initEventHandlers() {\n  addEventListener('annotation:add', (documentId, pageNumber, annotation) => {\n    reorderAnnotationsByType(documentId, pageNumber, annotation.type);\n  });\n  addEventListener('annotation:edit', (documentId, annotationId, annotation) => {\n    reorderAnnotationsByType(documentId, annotation.page, annotation.type);\n  });\n  addEventListener('annotation:delete', removeAnnotation);\n  addEventListener('comment:add', insertComment);\n  addEventListener('comment:update', updateComment);\n  addEventListener('comment:delete', removeComment);\n}\n\n/**\n * Reorder the annotation numbers by annotation type\n *\n * @param {String} documentId The ID of the document\n * @param {Number} pageNumber The page number of the annotations\n * @param {Strig} type The annotation type\n */\nfunction reorderAnnotationsByType(documentId, pageNumber, type) {\n  PDFJSAnnotate.getStoreAdapter().getAnnotations(documentId)\n    .then((annotationsByPage) => {\n      let annotations = [];\n      for(const page of Object.keys(annotationsByPage))\n        for(const annotation in annotationsByPage[page]){\n          if(annotation.type == type)\n            annotations.push(annotation)\n        }\n        return annotations;\n      //   annotationsByPage(page) =\n      //       return annotationsByPage[page].filter((a) => {\n      //         return a.type === type;\n      //       });\n      // return annotationsByPage;\n    })\n    .then((annotations) => {\n      annotations.forEach((a) => {\n        removeAnnotation(documentId, a.uuid);\n      });\n\n      return annotations;\n    })\n    .then(renderScreenReaderHints);\n}\n\n/**\n * Remove the screen reader hint for an annotation\n *\n * @param {String} documentId The ID of the document\n * @param {String} annotationId The Id of the annotation\n */\nfunction removeAnnotation(documentId, annotationId) {\n  removeElementById(`pdf-annotate-screenreader-${annotationId}`);\n  removeElementById(`pdf-annotate-screenreader-${annotationId}-end`);\n}\n\n/**\n * Insert a screen reader hint for a comment\n *\n * @param {String} documentId The ID of the document\n * @param {String} annotationId The ID of tha assocated annotation\n * @param {Object} comment The comment to insert a hint for\n */\nfunction insertComment(documentId, annotationId, comment) {\n  let list = document.querySelector(`pdf-annotate-screenreader-comment-list-${annotationId}`);\n  let promise;\n\n  if (!list) {\n    promise = renderScreenReaderComments(documentId, annotationId, []).then(() => {\n      list = document.querySelector(`pdf-annotate-screenreader-comment-list-${annotationId}`);\n      return true;\n    });\n  } else {\n    promise = Promise.resolve(true);\n  }\n\n  promise.then(() => {\n    insertScreenReaderComment(comment);\n  });\n}\n\n\n/**\n * Update a comment content\n *\n * @param {String} documentId The ID of the document\n * @param {String} annotationId The ID of tha assocated annotation\n * @param {Object} comment The comment to insert a hint for\n */\nfunction updateComment(documentId, annotationId, comment) {\n  alert('updateComment')\n}\n\n/**\n * Remove a screen reader hint for a comment\n *\n * @param {String} documentId The ID of the document\n * @param {String} commentId The ID of the comment\n */\nfunction removeComment(documentId, commentId) {\n  removeElementById(`pdf-annotate-screenreader-comment-${commentId}`);\n}\n\n/**\n * Remove an element from the DOM by it's ID if it exists\n *\n * @param {String} elementID The ID of the element to be removed\n */\nfunction removeElementById(elementId) {\n  let el = document.getElementById(elementId);\n  if (el) {\n    el.parentNode.removeChild(el);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/initEventHandlers.js\n **/","import { addEventListener, removeEventListener, fireEvent } from './event';\nimport { disableEdit, enableEdit } from './edit';\nimport { disablePen, enablePen, setPen } from './pen';\nimport { disablePoint, enablePoint } from './point';\nimport { disableRect, enableRect } from './rect';\nimport { disableText, enableText, setText } from './text';\nimport { createPage, renderPage } from './page';\nimport { setActiveToolbarItem } from './utils';\n\n\nexport default {\n  addEventListener, removeEventListener, fireEvent,\n  disableEdit, enableEdit,\n  disablePen, enablePen, setPen,\n  disablePoint, enablePoint,\n  disableRect, enableRect,\n  disableText, enableText, setText,\n  createPage, renderPage,\n  setActiveToolbarItem\n};\n\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/index.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport appendChild from '../render/appendChild';\nimport {\n  disableUserSelect,\n  enableUserSelect,\n  findSVGAtPoint,\n  getMetadata,\n  scaleDown\n} from './utils';\n\nlet _enabled = false;\nlet _penSize;\nlet _penColor;\nlet path;\nlet lines;\n\n/**\n * Handle document.mousedown event\n */\nfunction handleDocumentMousedown() {\n  path = null;\n  lines = [];\n\n  document.addEventListener('mousemove', handleDocumentMousemove);\n  document.addEventListener('mouseup', handleDocumentMouseup);\n}\n\n/**\n * Handle document.mouseup event\n *\n * @param {Event} e The DOM event to be handled\n */\nfunction handleDocumentMouseup(e) {\n  let svg;\n  if (lines.length > 1 && (svg = findSVGAtPoint(e.clientX, e.clientY))) {\n    let { documentId, pageNumber } = getMetadata(svg);\n\n    PDFJSAnnotate.getStoreAdapter().addAnnotation(documentId, pageNumber, {\n        type: 'drawing',\n        width: _penSize,\n        color: _penColor,\n        lines\n      }\n    ).then((annotation) => {\n      if (path) {\n        svg.removeChild(path);\n      }\n\n      appendChild(svg, annotation);\n    });\n  }\n\n  document.removeEventListener('mousemove', handleDocumentMousemove);\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n}\n\n/**\n * Handle document.mousemove event\n *\n * @param {Event} e The DOM event to be handled\n */\nfunction handleDocumentMousemove(e) {\n  savePoint(e.clientX, e.clientY);\n}\n\n/**\n * Handle document.keyup event\n *\n * @param {Event} e The DOM event to be handled\n */\nfunction handleDocumentKeyup(e) {\n  // Cancel rect if Esc is pressed\n  if (e.keyCode === 27) {\n    lines = null;\n    path.parentNode.removeChild(path);\n    document.removeEventListener('mousemove', handleDocumentMousemove);\n    document.removeEventListener('mouseup', handleDocumentMouseup);\n  }\n}\n\n/**\n * Save a point to the line being drawn.\n *\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n */\nfunction savePoint(x, y) {\n  let svg = findSVGAtPoint(x, y);\n  if (!svg) {\n    return;\n  }\n\n  let rect = svg.getBoundingClientRect();\n  let point = scaleDown(svg, {\n    x: x - rect.left,\n    y: y - rect.top\n  });\n\n  lines.push([point.x, point.y]);\n\n  if (lines.length <= 1) {\n    return;\n  }\n\n  if (path) {\n    svg.removeChild(path);\n  }\n\n  path = appendChild(svg, {\n    type: 'drawing',\n    color: _penColor,\n    width: _penSize,\n    lines\n  });\n}\n\n/**\n * Set the attributes of the pen.\n *\n * @param {Number} penSize The size of the lines drawn by the pen\n * @param {String} penColor The color of the lines drawn by the pen\n */\nexport function setPen(penSize = 1, penColor = '000000') {\n  _penSize = parseInt(penSize, 10);\n  _penColor = penColor;\n}\n\n/**\n * Enable the pen behavior\n */\nexport function enablePen() {\n  if (_enabled) { return; }\n\n  _enabled = true;\n  document.addEventListener('mousedown', handleDocumentMousedown);\n  document.addEventListener('keyup', handleDocumentKeyup);\n  disableUserSelect();\n}\n\n/**\n * Disable the pen behavior\n */\nexport function disablePen() {\n  if (!_enabled) { return; }\n\n  _enabled = false;\n  document.removeEventListener('mousedown', handleDocumentMousedown);\n  document.removeEventListener('keyup', handleDocumentKeyup);\n  enableUserSelect();\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/pen.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport appendChild from '../render/appendChild';\nimport {\n  BORDER_COLOR,\n  findSVGAtPoint,\n  getMetadata,\n  scaleDown\n} from './utils';\n\nlet _enabled = false;\nlet input;\n\n/**\n * Handle document.mouseup event\n *\n * @param {Event} The DOM event to be handled\n */\nfunction handleDocumentMouseup(e) {\n\n  if (input || !findSVGAtPoint(e.clientX, e.clientY)) {\n    return\n  }\n  \n  input = document.createElement('textarea');\n  input.setAttribute('id', 'pdf-annotate-point-input');\n  input.setAttribute('placeholder', 'Saisir un commentaire');\n  input.style.border = `3px solid ${BORDER_COLOR}`;\n  input.style.borderRadius = '3px';\n  input.style.position = 'absolute';\n  input.style.top = `${e.clientY}px`;\n  input.style.left = `${e.clientX}px`;\n  input.style.width = '220px';\n  input.style.height = '130px';\n\n  input.addEventListener('blur', handleInputBlur);\n  input.addEventListener('keyup', handleInputKeyup);\n\n  document.body.appendChild(input);\n  input.focus();\n}\n\n/**\n * Handle input.blur event\n */\nfunction handleInputBlur() {\n  savePoint();\n}\n\n/**\n * Handle input.keyup event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleInputKeyup(e) {\n  if (e.keyCode === 27) {\n    closeInput();\n  } else if (e.keyCode === 13) {\n    savePoint();\n  }\n}\n\n/**\n * Save a new point annotation from input\n */\nfunction savePoint() {\n  if (input.value.trim().length > 0) {\n    let clientX = parseInt(input.style.left, 10);\n    let clientY = parseInt(input.style.top, 10);\n    let content = input.value.trim();\n    let svg = findSVGAtPoint(clientX, clientY);\n    if (!svg) {\n      return;\n    }\n\n    let rect = svg.getBoundingClientRect();\n    let { documentId, pageNumber } = getMetadata(svg);\n    let annotation = Object.assign({\n        type: 'point'\n      }, scaleDown(svg, {\n        x: clientX - rect.left,\n        y: clientY - rect.top\n      })\n    );\n\n    PDFJSAnnotate.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation)\n      .then((annotation) => {\n        PDFJSAnnotate.getStoreAdapter().addComment(\n          documentId,\n          annotation.uuid,\n          content\n        );\n\n        appendChild(svg, annotation);\n      });\n  }\n\n  closeInput();\n}\n\n/**\n * Close the input element\n */\nfunction closeInput() {\n  input.removeEventListener('blur', handleInputBlur);\n  input.removeEventListener('keyup', handleInputKeyup);\n  document.body.removeChild(input);\n  input = null;\n}\n\n/**\n * Enable point annotation behavior\n */\nexport function enablePoint() {\n  if (_enabled) { return; }\n\n  _enabled = true;\n  document.addEventListener('mouseup', handleDocumentMouseup);\n}\n\n/**\n * Disable point annotation behavior\n */\nexport function disablePoint() {\n  if (!_enabled) { return; }\n\n  _enabled = false;\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/point.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport appendChild from '../render/appendChild';\nimport {\n  BORDER_COLOR,\n  disableUserSelect,\n  enableUserSelect,\n  findSVGAtPoint,\n  getMetadata,\n  getOffset,\n  scaleDown,\n  scaleUp\n} from './utils';\n\nlet _enabled = false;\nlet _type;\nlet overlay;\nlet originY;\nlet originX;\n\n/**\n * Get the current window selection as rects\n *\n * @return {Array} An Array of rects\n */\nfunction getSelectionRects() {\n  try {\n    let selection = window.getSelection();\n    let range = selection.getRangeAt(0);\n    let rects = range.getClientRects();\n\n    if (rects.length > 0 &&\n        rects[0].width > 0 &&\n        rects[0].height > 0) {\n      return rects;\n    }\n  } catch (e) {}\n  \n  return null;\n}\n\n/**\n * Handle document.mousedown event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleDocumentMousedown(e) {\n  let svg;\n  if (_type !== 'area' || !(svg = findSVGAtPoint(e.clientX, e.clientY))) {\n    return;\n  }\n\n  let rect = svg.getBoundingClientRect();\n  originY = e.clientY;\n  originX = e.clientX;\n\n  overlay = document.createElement('div');\n  overlay.style.position = 'absolute';\n  overlay.style.top = `${originY - rect.top}px`;\n  overlay.style.left = `${originX - rect.left}px`;\n  overlay.style.border = `3px solid ${BORDER_COLOR}`;\n  overlay.style.borderRadius = '3px';\n  svg.parentNode.appendChild(overlay);\n  \n  document.addEventListener('mousemove', handleDocumentMousemove);\n  disableUserSelect();\n}\n\n/**\n * Handle document.mousemove event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleDocumentMousemove(e) {\n  let svg = overlay.parentNode.querySelector('svg.annotationLayer');\n  let rect = svg.getBoundingClientRect();\n\n  if (originX + (e.clientX - originX) < rect.right) {\n    overlay.style.width = `${e.clientX - originX}px`;\n  }\n\n  if (originY + (e.clientY - originY) < rect.bottom) {\n    overlay.style.height = `${e.clientY - originY}px`;\n  }\n}\n\n/**\n * Handle document.mouseup event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleDocumentMouseup(e) {\n  let rects;\n  if (_type !== 'area' && (rects = getSelectionRects())) {\n    let svg = findSVGAtPoint(rects[0].left, rects[0].top);\n    saveRect(_type, [...rects].map((r) => {\n      return {\n        top: r.top,\n        left: r.left,\n        width: r.width,\n        height: r.height\n      };\n    }));\n  } else if (_type === 'area' && overlay) {\n    let svg = overlay.parentNode.querySelector('svg.annotationLayer');\n    let rect = svg.getBoundingClientRect();\n    saveRect(_type, [{\n      top: parseInt(overlay.style.top, 10) + rect.top,\n      left: parseInt(overlay.style.left, 10) + rect.left,\n      width: parseInt(overlay.style.width, 10),\n      height: parseInt(overlay.style.height, 10)\n    }]);\n\n    overlay.parentNode.removeChild(overlay);\n    overlay = null;\n\n    document.removeEventListener('mousemove', handleDocumentMousemove);\n    enableUserSelect();\n  }\n}\n\n/**\n * Handle document.keyup event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleDocumentKeyup(e) {\n  // Cancel rect if Esc is pressed\n  if (e.keyCode === 27) {\n    let selection = window.getSelection();\n    selection.removeAllRanges();\n    if (overlay && overlay.parentNode) {\n      overlay.parentNode.removeChild(overlay);\n      overlay = null;\n      document.removeEventListener('mousemove', handleDocumentMousemove);\n    }\n  }\n}\n\n/**\n * Save a rect annotation\n *\n * @param {String} type The type of rect (area, highlight, strikeout)\n * @param {Array} rects The rects to use for annotation\n * @param {String} color The color of the rects\n */\nfunction saveRect(type, rects, color) {\n  let svg = findSVGAtPoint(rects[0].left, rects[0].top);\n  let node;\n  let annotation;\n\n  if (!svg) {\n    return;\n  }\n\n  let boundingRect = svg.getBoundingClientRect();\n\n  if (!color) {\n    if (type === 'highlight') {\n      color = 'FFFF00';\n    } else if (type === 'strikeout') {\n      color = 'FF0000';\n    }\n  }\n\n  // Initialize the annotation\n  annotation = {\n    type,\n    color,\n    rectangles: [...rects].map((r) => {\n      let offset = 0;\n\n      if (type === 'strikeout') {\n        offset = r.height / 2;\n      }\n\n      return scaleDown(svg, {\n        y: (r.top + offset) - boundingRect.top,\n        x: r.left - boundingRect.left,\n        width: r.width,\n        height: r.height\n      });\n    }).filter((r) => r.width > 0 && r.height > 0 && r.x > -1 && r.y > -1)\n  };\n  \n  // Short circuit if no rectangles exist\n  if (annotation.rectangles.length === 0) {\n    return;\n  }\n\n  // Special treatment for area as it only supports a single rect\n  if (type === 'area') {\n    let rect = annotation.rectangles[0];\n    delete annotation.rectangles;\n    annotation.x = rect.x;\n    annotation.y = rect.y;\n    annotation.width = rect.width;\n    annotation.height = rect.height;\n  }\n\n  let { documentId, pageNumber } = getMetadata(svg);\n\n  // Add the annotation\n  PDFJSAnnotate.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation)\n    .then((annotation) => {\n      appendChild(svg, annotation);\n    });\n}\n\n/**\n * Enable rect behavior\n */\nexport function enableRect(type) {\n  _type = type;\n  \n  if (_enabled) { return; }\n\n  _enabled = true;\n  document.addEventListener('mouseup', handleDocumentMouseup);\n  document.addEventListener('mousedown', handleDocumentMousedown);\n  document.addEventListener('keyup', handleDocumentKeyup);\n}\n\n/**\n * Disable rect behavior\n */\nexport function disableRect() {\n  if (!_enabled) { return; }\n\n  _enabled = false;\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n  document.removeEventListener('mousedown', handleDocumentMousedown);\n  document.removeEventListener('keyup', handleDocumentKeyup);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/rect.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport appendChild from '../render/appendChild';\nimport {\n  BORDER_COLOR,\n  findSVGAtPoint,\n  getMetadata,\n  scaleDown\n} from './utils';\n\nlet _enabled = false;\nlet input;\nlet _textSize;\nlet _textColor;\n\n/**\n * Handle document.mouseup event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleDocumentMouseup(e) {\n  if (input || !findSVGAtPoint(e.clientX, e.clientY)) {\n    return;\n  }\n\n  input = document.createElement('input');\n  input.setAttribute('id', 'pdf-annotate-text-input');\n  input.setAttribute('placeholder', 'Enter text');\n  input.style.border = `3px solid ${BORDER_COLOR}`;\n  input.style.borderRadius = '3px';\n  input.style.position = 'absolute';\n  input.style.top = `${e.clientY}px`;\n  input.style.left = `${e.clientX}px`;\n  input.style.fontSize = `${_textSize}px`;\n\n  input.addEventListener('blur', handleInputBlur);\n  input.addEventListener('keyup', handleInputKeyup);\n\n  document.body.appendChild(input);\n  input.focus();\n}\n\n/**\n * Handle input.blur event\n */\nfunction handleInputBlur() {\n  saveText();\n}\n\n/**\n * Handle input.keyup event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleInputKeyup(e) {\n  if (e.keyCode === 27) {\n    closeInput();\n  } else if (e.keyCode === 13) {\n    saveText();\n  }\n}\n\n/**\n * Save a text annotation from input\n */\nfunction saveText() {\n  if (input.value.trim().length > 0) {\n    let clientX = parseInt(input.style.left, 10);\n    let clientY = parseInt(input.style.top, 10);\n    let svg = findSVGAtPoint(clientX, clientY);\n    if (!svg) {\n      return;\n    }\n\n    let { documentId, pageNumber } = getMetadata(svg);\n    let rect = svg.getBoundingClientRect();\n    let annotation = Object.assign({\n      type: 'textbox',\n      size: _textSize,\n      color: _textColor,\n      content: input.value.trim()\n    }, scaleDown(svg, {\n      x: clientX - rect.left,\n      y: clientY - rect.top,\n      width: input.offsetWidth,\n      height: input.offsetHeight\n    })\n    );\n\n    PDFJSAnnotate.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation)\n      .then((annotation) => {\n        appendChild(svg, annotation);\n      });\n  }\n\n  closeInput();\n}\n\n/**\n * Close the input\n */\nfunction closeInput() {\n  try {\n    if (input) {\n      input.removeEventListener('blur', handleInputBlur);\n      input.removeEventListener('keyup', handleInputKeyup);\n      document.body.removeChild(input);\n      input = null;\n    }\n  } catch(e){\n    console.log('Try/catch is necessary because exist a error in Safari');\n  }\n}\n\n/**\n * Set the text attributes\n *\n * @param {Number} textSize The size of the text\n * @param {String} textColor The color of the text\n */\nexport function setText(textSize = 12, textColor = '000000') {\n  _textSize = parseInt(textSize, 10);\n  _textColor = textColor;\n}\n\n\n/**\n * Enable text behavior\n */\nexport function enableText() {\n  if (_enabled) { return; }\n\n  _enabled = true;\n  document.addEventListener('mouseup', handleDocumentMouseup);\n}\n\n\n/**\n * Disable text behavior\n */\nexport function disableText() {\n  if (!_enabled) { return; }\n\n  _enabled = false;\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/text.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport renderScreenReaderHints from '../a11y/renderScreenReaderHints';\n\n// Template for creating a new page\nconst PAGE_TEMPLATE = `\n  <div style=\"visibility: hidden;\" class=\"page\" data-loaded=\"false\">\n    <div class=\"canvasWrapper\">\n      <canvas></canvas>\n    </div>\n    <svg class=\"annotationLayer\"></svg>\n    <div class=\"textLayer\"></div>\n  </div>\n`;\n\n/**\n * Create a new page to be appended to the DOM.\n *\n * @param {Number} pageNumber The page number that is being created\n * @return {HTMLElement}\n */\nexport function createPage(pageNumber) {\n  let temp = document.createElement('div');\n  temp.innerHTML = PAGE_TEMPLATE;\n\n  let page = temp.children[0];\n  let canvas = page.querySelector('canvas');\n\n  page.setAttribute('id', `pageContainer${pageNumber}`);\n  page.setAttribute('data-page-number', pageNumber);\n\n  canvas.mozOpaque = true;\n  canvas.setAttribute('id', `page${pageNumber}`);\n\n  // let svg = page.querySelector('.');\n  //   // let svg = document.body;\n  // console.log(svg)\n  // // let svg = document.getElementById();\n  //\n  // document.addEventListener('click', function handleDocumentClick(e) {\n  //   console.log(click)\n  //     if (!findSVGAtPoint(e.clientX, e.clientY)) {\n  //         return;\n  //     }\n  //\n  //     let target = findAnnotationAtPoint(e.clientX, e.clientY);\n  //\n  //     // Emit annotation:blur if clickNode is no longer clicked\n  //     if (clickNode && clickNode !== target) {\n  //         emitter.emit('annotation:blur', clickNode);\n  //     }\n  //\n  //     // Emit annotation:click if target was clicked\n  //     if (target) {\n  //         emitter.emit('annotation:click', target);\n  //     }\n  //\n  //     clickNode = target;\n  // });\n\n  return page;\n}\n\n/**\n * Render a page that has already been created.\n *\n * @param {Number} pageNumber The page number to be rendered\n * @param {Object} renderOptions The options for rendering\n * @return {Promise} Settled once rendering has completed\n *  A settled Promise will be either:\n *    - fulfilled: [pdfPage, annotations]\n *    - rejected: Error\n */\nexport function renderPage(pageNumber, annotations, renderOptions) {\n  let {\n    documentId,\n    pdfDocument,\n    scale,\n    rotate\n  } = renderOptions;\n\n  // Load the page and annotations\n  return Promise.all([\n    pdfDocument.getPage(pageNumber),\n  ]).then(([pdfPage]) => {\n    let page = document.getElementById(`pageContainer${pageNumber}`);\n    let svg = page.querySelector('.annotationLayer');\n    let canvas = page.querySelector('.canvasWrapper canvas');\n    let canvasContext = canvas.getContext('2d', {alpha: false});\n    let viewport = pdfPage.getViewport(scale);\n    let transform = scalePage(pageNumber, viewport, canvasContext);\n\n    // Render the page\n    return Promise.all([\n      pdfPage.render({ canvasContext, viewport, transform }),\n      PDFJSAnnotate.render(svg, viewport, {pageNumber, documentId, annotations:annotations[pageNumber]})\n    ]).then(() => {\n      // Text content is needed for a11y, but is also necessary for creating\n      // highlight and strikeout annotations which require selecting text.\n      return pdfPage.getTextContent({normalizeWhitespace: true}).then((textContent) => {\n        return new Promise((resolve, reject) => {\n          // Render text layer for a11y of text content\n          let textLayer = page.querySelector(`.textLayer`);\n          let textLayerFactory = new pdfjsViewer.DefaultTextLayerFactory();\n          let textLayerBuilder = textLayerFactory.createTextLayerBuilder(textLayer, pageNumber -1, viewport);\n          textLayerBuilder.setTextContent(textContent);\n          textLayerBuilder.render();\n\n          // Enable a11y for annotations\n          // Timeout is needed to wait for `textLayerBuilder.render`\n          setTimeout(() => {\n            try {\n              renderScreenReaderHints(annotations.annotations);\n              resolve();\n            } catch (e) {\n              reject(e);\n            }\n          });\n        });\n      });\n    }).then(() => {\n      // Indicate that the page was loaded\n      page.setAttribute('data-loaded', 'true');\n\n      return [pdfPage, annotations];\n    });\n  });\n}\n\n/**\n * Scale the elements of a page.\n *\n * @param {Number} pageNumber The page number to be scaled\n * @param {Object} viewport The viewport of the PDF page (see pdfPage.getViewport(scale, rotate))\n * @param {Object} context The canvas context that the PDF page is rendered to\n * @return {Array} The transform data for rendering the PDF page\n */\nfunction scalePage(pageNumber, viewport, context) {\n  let page = document.getElementById(`pageContainer${pageNumber}`);\n  let canvas = page.querySelector('.canvasWrapper canvas');\n  let svg = page.querySelector('.annotationLayer');\n  let wrapper = page.querySelector('.canvasWrapper');\n  let textLayer = page.querySelector('.textLayer');\n  let outputScale = getOutputScale(context);\n  let transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0];\n  let sfx = approximateFraction(outputScale.sx);\n  let sfy = approximateFraction(outputScale.sy);\n\n  // Adjust width/height for scale\n  page.style.visibility = '';\n  canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]);\n  canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]);\n  canvas.style.width = roundToDivide(viewport.width, sfx[1]) + 'px';\n  canvas.style.height = roundToDivide(viewport.height, sfx[1]) + 'px';\n  svg.setAttribute('width', viewport.width);\n  svg.setAttribute('height', viewport.height);\n  svg.style.width = `${viewport.width}px`;\n  svg.style.height = `${viewport.height}px`;\n  page.style.width = `${viewport.width}px`;\n  page.style.height = `${viewport.height}px`;\n  wrapper.style.width = `${viewport.width}px`;\n  wrapper.style.height = `${viewport.height}px`;\n  textLayer.style.width = `${viewport.width}px`;\n  textLayer.style.height = `${viewport.height}px`;\n\n  return transform;\n}\n\n/**\n * The following methods are taken from mozilla/pdf.js and as such fall under\n * the Apache License (http://www.apache.org/licenses/).\n *\n * Original source can be found at mozilla/pdf.js:\n * https://github.com/mozilla/pdf.js/blob/master/web/ui_utils.js\n */\n\n/**\n * Approximates a float number as a fraction using Farey sequence (max order\n * of 8).\n *\n * @param {Number} x Positive float number\n * @return {Array} Estimated fraction: the first array item is a numerator,\n *                 the second one is a denominator.\n */\nfunction approximateFraction(x) {\n  // Fast path for int numbers or their inversions.\n  if (Math.floor(x) === x) {\n    return [x, 1];\n  }\n\n  const xinv = 1 / x;\n  const limit = 8;\n  if (xinv > limit) {\n    return [1, limit];\n  } else if (Math.floor(xinv) === xinv) {\n    return [1, xinv];\n  }\n\n  const x_ = x > 1 ? xinv : x;\n  \n  // a/b and c/d are neighbours in Farey sequence.\n  let a = 0, b = 1, c = 1, d = 1;\n  \n  // Limit search to order 8.\n  while (true) {\n    // Generating next term in sequence (order of q).\n    let p = a + c, q = b + d;\n    if (q > limit) {\n      break;\n    }\n    if (x_ <= p / q) {\n      c = p; d = q;\n    } else {\n      a = p; b = q;\n    }\n  }\n\n  // Select closest of neighbours to x.\n  if (x_ - a / b < c / d - x_) {\n    return x_ === x ? [a, b] : [b, a];\n  } else {\n    return x_ === x ? [c, d] : [d, c];\n  }\n}\n\nfunction getOutputScale(ctx) {\n  let devicePixelRatio = window.devicePixelRatio || 1;\n  let backingStoreRatio = ctx.webkitBackingStorePixelRatio ||\n                          ctx.mozBackingStorePixelRatio ||\n                          ctx.msBackingStorePixelRatio ||\n                          ctx.oBackingStorePixelRatio ||\n                          ctx.backingStorePixelRatio || 1;\n  let pixelRatio = devicePixelRatio / backingStoreRatio;\n  return {\n    sx: pixelRatio,\n    sy: pixelRatio,\n    scaled: pixelRatio !== 1\n  };\n}\n\nfunction roundToDivide(x, div) {\n  let r = x % div;\n  return r === 0 ? x : Math.round(x - r + div);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/page.js\n **/","// Color picker component\nconst COLORS = [\n  {hex: '#000000', name: 'Black'},\n  {hex: '#EF4437', name: 'Red'},\n  {hex: '#E71F63', name: 'Pink'},\n  {hex: '#8F3E97', name: 'Purple'},\n  {hex: '#65499D', name: 'Deep Purple'},\n  {hex: '#4554A4', name: 'Indigo'},\n  {hex: '#2083C5', name: 'Blue'},\n  {hex: '#35A4DC', name: 'Light Blue'},\n  {hex: '#09BCD3', name: 'Cyan'},\n  {hex: '#009688', name: 'Teal'},\n  {hex: '#43A047', name: 'Green'},\n  {hex: '#8BC34A', name: 'Light Green'},\n  {hex: '#FDC010', name: 'Yellow'},\n  {hex: '#F8971C', name: 'Orange'},\n  {hex: '#F0592B', name: 'Deep Orange'},\n  {hex: '#F06291', name: 'Light Pink'}\n];\n\nexport default function initColorPicker(el, value, onChange) {\n  function setColor(value, fireOnChange = true) {\n    currentValue = value;\n    a.setAttribute('data-color', value);\n    a.style.background = value;\n    if (fireOnChange && typeof onChange === 'function') {\n      onChange(value);\n    }\n    closePicker();\n  }\n\n  function togglePicker() {\n    if (isPickerOpen) {\n      closePicker();\n    } else {\n      openPicker();\n    }\n  }\n\n  function closePicker() {\n    document.removeEventListener('keyup', handleDocumentKeyup);\n    if (picker && picker.parentNode) {\n      picker.parentNode.removeChild(picker);\n    }\n    isPickerOpen = false;\n    a.focus();\n  }\n\n  function openPicker() {\n    if (!picker) {\n      picker = document.createElement('div');\n      picker.style.background = '#fff';\n      picker.style.border = '1px solid #ccc';\n      picker.style.padding = '2px';\n      picker.style.position = 'absolute';\n      picker.style.width = '122px';\n      el.style.position = 'relative';\n\n      COLORS.map(createColorOption).forEach((c) => {\n        c.style.margin = '2px';\n        c.onclick = function () { setColor(c.getAttribute('data-color')); };\n        picker.appendChild(c);\n      });\n    }\n\n    document.addEventListener('keyup', handleDocumentKeyup);\n    el.appendChild(picker);\n    isPickerOpen = true;\n  }\n\n  function createColorOption(color) {\n    let e = document.createElement('a');\n    e.className = 'color';\n    e.setAttribute('href', 'javascript://');\n\n    if(color.name)\n      e.setAttribute('title', color.name);\n    else\n      e.setAttribute('title', 'Choisir une couleur');\n\n    e.setAttribute('data-color', color.hex);\n    e.style.background = color.hex;\n    return e;\n  }\n\n  function handleDocumentKeyup(e) {\n    if (e.keyCode === 27) {\n      closePicker();\n    }\n  }\n\n  let picker;\n  let isPickerOpen = false;\n  let currentValue;\n  let a = createColorOption({hex: value});\n  a.onclick = togglePicker;\n  el.appendChild(a);\n  setColor(value, false);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/initColorPicker.js\n **/"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///static/pdfannotator/pdf-annotate.min.js","webpack:///webpack/bootstrap aa1cfb15d0a2927f54bd","webpack:///./src/index.js","webpack:///./src/PDFJSAnnotate.js","webpack:///./src/adapter/StoreAdapter.js","webpack:///./src/utils/abstractFunction.js","webpack:///./src/UI/event.js","webpack:///./~/events/events.js","webpack:///./src/UI/utils.js","webpack:///./~/create-stylesheet/index.js","webpack:///./src/adapter/CRFPAStoreAdapter.js","webpack:///./~/axios/index.js","webpack:///./~/axios/lib/axios.js","webpack:///./~/axios/lib/utils.js","webpack:///./~/axios/lib/helpers/bind.js","webpack:///./~/is-buffer/index.js","webpack:///./~/axios/lib/core/Axios.js","webpack:///./~/axios/lib/defaults.js","webpack:///./~/process/browser.js","webpack:///./~/axios/lib/helpers/normalizeHeaderName.js","webpack:///./~/axios/lib/adapters/xhr.js","webpack:///./~/axios/lib/core/settle.js","webpack:///./~/axios/lib/core/createError.js","webpack:///./~/axios/lib/core/enhanceError.js","webpack:///./~/axios/lib/helpers/buildURL.js","webpack:///./~/axios/lib/helpers/parseHeaders.js","webpack:///./~/axios/lib/helpers/isURLSameOrigin.js","webpack:///./~/axios/lib/helpers/btoa.js","webpack:///./~/axios/lib/helpers/cookies.js","webpack:///./~/axios/lib/core/InterceptorManager.js","webpack:///./~/axios/lib/core/dispatchRequest.js","webpack:///./~/axios/lib/core/transformData.js","webpack:///./~/axios/lib/cancel/isCancel.js","webpack:///./~/axios/lib/helpers/isAbsoluteURL.js","webpack:///./~/axios/lib/helpers/combineURLs.js","webpack:///./~/axios/lib/cancel/Cancel.js","webpack:///./~/axios/lib/cancel/CancelToken.js","webpack:///./~/axios/lib/helpers/spread.js","webpack:///./src/utils/uuid.js","webpack:///./src/initFile.js","webpack:///./src/UI/comments.js","webpack:///./~/twitter-text/twitter-text.js","webpack:///./src/UI/edit.js","webpack:///./src/render/appendChild.js","webpack:///./~/object-assign/index.js","webpack:///./src/render/renderLine.js","webpack:///./src/utils/setAttributes.js","webpack:///./src/utils/normalizeColor.js","webpack:///./src/render/renderPath.js","webpack:///./src/render/renderPoint.js","webpack:///./src/render/renderRect.js","webpack:///./src/render/renderText.js","webpack:///./src/UI/index.js","webpack:///./src/UI/pen.js","webpack:///./src/UI/point.js","webpack:///./src/UI/rect.js","webpack:///./src/UI/text.js","webpack:///./src/UI/page.js","webpack:///./src/a11y/renderScreenReaderHints.js","webpack:///./src/a11y/insertScreenReaderHint.js","webpack:///./src/a11y/createScreenReaderOnly.js","webpack:///./src/a11y/insertElementWithinChildren.js","webpack:///./src/a11y/insertElementWithinElement.js","webpack:///./src/a11y/renderScreenReaderComments.js","webpack:///./src/a11y/insertScreenReaderComment.js","webpack:///./src/a11y/initEventHandlers.js","webpack:///./src/render/index.js","webpack:///./src/initColorPicker.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","render","pdfjsLib","getDocument","RENDER_OPTIONS","documentId","then","pdf","pdfDocument","viewer","document","getElementById","innerHTML","NUM_PAGES","_pdfInfo","numPages","i","page","UI","createPage","appendChild","PDFJSAnnotate","getAnnotations","annotations","_loop","num","getPage","renderPage","_ref","_ref2","_slicedToArray","pdfPage","viewport","getViewport","scale","PAGE_HEIGHT","height","$","browser","mozilla","remove","Object","defineProperty","value","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","length","err","Array","isArray","TypeError","_PDFJSAnnotate","_PDFJSAnnotate2","_initFile","_twitterText","_initColorPicker","_initColorPicker2","_comments","documentUrl","enhanceTextSelection","parseFloat","localStorage","getItem","setStoreAdapter","CRFPAStoreAdapter","setActiveToolbarItem","type","button","tooltype","active","querySelector","classList","disableEdit","disablePen","disableText","disablePoint","disableRect","add","setItem","enableEdit","enablePen","enableText","enablePoint","enableRect","readonly","initText","setText","size","color","initPen","Option","setPen","penColor","penSize","modified","selected","removeAttribute","setAttribute","handlePenSizeChange","e","target","addEventListener","handleToolbarClick","nodeName","getAttribute","setScaleRotate","rotate","parseInt","handleScaleChange","renderComments","_StoreAdapter","_StoreAdapter2","_CRFPAStoreAdapter","_CRFPAStoreAdapter2","_render","_render2","_UI","_UI2","StoreAdapter","__storeAdapter","getStoreAdapter","adapter","_getStoreAdapter","apply","arguments","_classCallCheck","instance","Constructor","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","_abstractFunction","_abstractFunction2","_event","_this","definition","keys","forEach","annotationId","pageNumber","annotation","content","commentId","get","__getAnnotations","set","fn","__addAnnotation","fireEvent","__editAnnotation","__deleteAnnotation","success","__addComment","comment","__updateComment","__deleteComment","abstractFunction","name","Error","emitter","emit","on","removeEventListener","removeListener","_events","_events2","_utils","EventEmitter","clickNode","findSVGAtPoint","clientX","clientY","findAnnotationAtPoint","_maxListeners","isFunction","arg","isNumber","isObject","isUndefined","defaultMaxListeners","setMaxListeners","n","isNaN","er","handler","len","args","listeners","error","context","slice","addListener","listener","newListener","warned","console","trace","once","g","fired","list","position","splice","removeAllListeners","ret","listenerCount","evlistener","findSVGContainer","node","parentNode","toUpperCase","x","y","elements","querySelectorAll","l","el","rect","getBoundingClientRect","pointIntersectsRect","svg","getOffsetAnnotationRect","top","bottom","left","right","getAnnotationRect","_getOffset","getOffset","offsetLeft","offsetTop","h","w","LINE_OFFSET","toLowerCase","minX","maxX","minY","maxY","replace","split","s","map","width","_getOffset2","result","includes","scaleUp","_getMetadata","getMetadata","scaleDown","_getMetadata2","getScroll","scrollTop","scrollLeft","disableUserSelect","userSelectStyleSheet","head","enableUserSelect","removeChild","JSON","parse","BORDER_COLOR","_createStylesheet","_createStylesheet2","body","-webkit-user-select","-moz-user-select","-ms-user-select","user-select","processRuleSet","selector","block","processDeclarationBlock","prop","processDeclaration","join","hyphenate","match","blocks","style","createElement","text","createTextNode","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","_axios","_axios2","_uuid","_uuid2","_StoreAdapter3","axios","defaults","xsrfCookieName","xsrfHeaderName","API","baseURL","timeout","withCredentials","headers","Accept","Content-Type","Access-Control-Allow-Origin","getPrototypeOf","params","fileUuid","response","data","log","alert","getAnnotation","addAnnotation","uuid","post","editAnnotation","deleteAnnotation","getComments","addComment","updateComment","createInstance","defaultConfig","Axios","bind","request","utils","extend","instanceConfig","merge","Cancel","CancelToken","isCancel","all","promises","Promise","spread","val","toString","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","trim","str","isStandardBrowserEnv","navigator","product","window","hasOwnProperty","assignValue","a","b","thisArg","isBuffer","isSlowBuffer","readFloatLE","_isBuffer","interceptors","InterceptorManager","dispatchRequest","config","url","method","chain","promise","resolve","interceptor","unshift","fulfilled","rejected","shift","process","setContentTypeIfUnset","getDefaultAdapter","XMLHttpRequest","normalizeHeaderName","DEFAULT_CONTENT_TYPE","transformRequest","stringify","transformResponse","maxContentLength","validateStatus","status","common","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","run","Item","array","noop","nextTick","title","env","argv","version","versions","off","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","normalizedName","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","reject","requestData","requestHeaders","loadEvent","xDomain","NODE_ENV","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","paramsSerializer","readyState","responseURL","indexOf","responseHeaders","getAllResponseHeaders","responseData","responseType","responseText","statusText","onerror","cookies","xsrfValue","read","setRequestHeader","onDownloadProgress","onUploadProgress","upload","cancelToken","cancel","abort","send","enhanceError","message","code","encode","encodeURIComponent","serializedParams","parts","v","toISOString","ignoreDuplicateOf","parsed","line","substr","resolveURL","href","msie","urlParsingNode","protocol","host","search","hash","hostname","port","pathname","charAt","originURL","test","userAgent","location","requestURL","E","input","charCode","String","output","idx","chars","charCodeAt","write","expires","path","domain","secure","cookie","Date","toGMTString","RegExp","decodeURIComponent","now","handlers","use","eject","throwIfCancellationRequested","throwIfRequested","transformData","isAbsoluteURL","combineURLs","reason","fns","__CANCEL__","relativeURL","executor","resolvePromise","token","source","callback","replacement","r","Math","random","PATTERN","REGEXP","dataset","filepath","comments","commentList","html","commentForm","hide","insertComment","child","view","addClass","attr","twitter","autoLink","htmlEscape","handleCommentClick","editBtn","handleEditClick","append","textarea","textareaWrapper","saveBtn","saveComment","cancelBtn","cancelCommentEdit","closest","selectComment","preventDefault","find","edit","show","scrollToView","element","offset","is","css","visibility","display","visible_area_start","visible_area_end","innerHeight","hasClass","animate","removeClass","_edit","createEditOverlay","_twitterText2","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","regexSupplant","regex","flags","global","ignoreCase","multiline","newRegex","twttr","txt","regexen","stringSupplant","values","clone","o","k","isValidMatch","string","optional","HTML_ENTITIES","&",">","<","\"","'","character","spaces_group","spaces","invalid_chars_group","invalid_chars","punct","rtl_chars","non_bmp_code_pairs","latinAccentChars","bmpLetterAndMarks","astralLetterAndMarks","bmpNumerals","astralNumerals","hashtagSpecialChars","hashSigns","hashtagAlpha","hashtagAlphaNumeric","endHashtagMatch","codePoint","hashtagBoundary","validHashtag","validMentionPrecedingChars","atSigns","validMentionOrList","validReply","endMentionMatch","validUrlPrecedingChars","invalidUrlWithoutProtocolPrecedingChars","invalidDomainChars","validDomainChars","validSubdomain","validDomainName","validGTLD","validCCTLD","validPunycode","validSpecialCCTLD","validDomain","validAsciiDomain","invalidShortDomain","validSpecialShortDomain","validPortNumber","cyrillicLettersAndMarks","validGeneralUrlPathChars","validUrlBalancedParens","validUrlPathEndingChars","validUrlPath","validUrlQueryChars","validUrlQueryEndingChars","extractUrl","validTcoUrl","urlHasProtocol","urlHasHttps","cashtag","validCashtag","validateUrlUnreserved","validateUrlPctEncoded","validateUrlSubDelims","validateUrlPchar","validateUrlScheme","validateUrlUserinfo","validateUrlDecOctet","validateUrlIpv4","validateUrlIpv6","validateUrlIp","validateUrlSubDomainSegment","validateUrlDomainSegment","validateUrlDomainTld","validateUrlDomain","validateUrlHost","validateUrlUnicodeSubDomainSegment","validateUrlUnicodeDomainSegment","validateUrlUnicodeDomainTld","validateUrlUnicodeDomain","validateUrlUnicodeHost","validateUrlPort","validateUrlUnicodeAuthority","validateUrlAuthority","validateUrlPath","validateUrlQuery","validateUrlFragment","validateUrlUnencoded","DEFAULT_LIST_CLASS","DEFAULT_USERNAME_CLASS","DEFAULT_HASHTAG_CLASS","DEFAULT_CASHTAG_CLASS","OPTIONS_NOT_ATTRIBUTES","urlClass","listClass","usernameClass","hashtagClass","cashtagClass","usernameUrlBase","listUrlBase","hashtagUrlBase","cashtagUrlBase","usernameUrlBlock","listUrlBlock","hashtagUrlBlock","linkUrlBlock","usernameIncludeSymbol","suppressLists","suppressNoFollow","targetBlank","suppressDataScreenName","urlEntities","symbolTag","textWithSymbolTag","urlTarget","invisibleTagAttrs","linkAttributeBlock","linkTextBlock","htmlEscapeNonEntities","BOOLEAN_ATTRIBUTES","disabled","multiple","checked","tagAttrs","attributes","htmlAttrs","linkToText","entity","options","rel","d","linkToTextWithSymbol","symbol","taggedSymbol","taggedText","linkToHashtag","substring","indices","hashtag","attrs","linkToCashtag","linkToMentionAndList","at","user","screenName","slashListname","listSlug","isList","linkToUrl","displayUrl","linkText","urlEntity","display_url","linkTextWithEntity","expanded_url","expandedUrl","displayUrlSansEllipses","displayUrlIndex","beforeDisplayUrl","afterDisplayUrl","precedingEllipsis","followingEllipsis","autoLinkEntities","entities","extractHtmlAttrsFromOptions","beginIndex","sort","nonEntity","autoLinkWithJSON","json","user_mentions","screen_name","hashtags","symbols","modifyIndicesFromUnicodeToUTF16","extractEntitiesWithIndices","extractUrlsWithoutProtocol","autoLinkUsernamesOrLists","extractMentionsOrListsWithIndices","autoLinkHashtags","extractHashtagsWithIndices","autoLinkCashtags","extractCashtagsWithIndices","autoLinkUrlsCustom","extractUrlsWithIndices","removeOverlappingEntities","prev","checkUrlOverlap","extractMentions","screenNamesOnly","screenNamesWithIndices","extractMentionsWithIndices","mentionOrList","mentions","mentionsOrLists","possibleNames","before","atSign","chunk","after","startPosition","endPosition","extractReplies","possibleScreenName","rightContext","extractUrls","urlsOnly","urlsWithIndices","urls","exec","$2","$3","$4","$5","$7","lastIndex","lastMatch","lastUrl","asciiEndPosition","asciiDomain","asciiStartPosition","extractHashtags","hashtagsOnly","hashtagsWithIndices","tags","hashText","extractCashtags","cashtagsOnly","cashtagsWithIndices","dollar","convertUnicodeIndices","modifyIndicesFromUTF16ToUnicode","getUnicodeTextLength","indicesInUTF16","charIndex","codePointIndex","entityIndex","splitTags","secondSplits","firstSplits","allSplits","j","hitHighlight","hits","defaultHighlightTag","index","hit","tag","placed","hitSpot","tagName","chunks","chunkIndex","prevChunksLen","chunkCursor","startInChunk","chunkChars","flatHits","MAX_LENGTH","getTweetLength","short_url_length","short_url_length_https","textLength","isInvalidTweet","hasInvalidCharacters","isValidTweetText","isValidUsername","extracted","VALID_LIST_RE","isValidList","usernameList","isValidHashtag","isValidUrl","unicodeDomains","requireProtocol","urlParts","scheme","authority","query","fragment","_toConsumableArray","arr2","from","destroyEditOverlay","overlay","anchor","styleLeft","OVERLAY_BORDER_SIZE","styleTop","boxSizing","border","borderRadius","background","fontSize","padding","textAlign","textDecoration","handleDocumentClick","handleDocumentKeyup","handleDocumentMousedown","borderColor","boxShadow","isDragging","handleDocumentMousemove","handleDocumentMouseup","nodes","keyCode","dragOffsetX","dragOffsetY","dragStartX","dragStartY","cursor","offsetHeight","offsetWidth","getDelta","propX","propY","calcDelta","deltaX","deltaY","_getDelta","t","modelY","viewY","rectangles","modelX","viewX","_annotation$lines$","lines","originX","originY","_calcDelta","_annotation$lines$i","_appendChild2","handleAnnotationClick","_enabled","_appendChild","getTranslation","rotation","transform","trans","_renderRect2","_renderLine2","_renderPoint2","_renderText2","_renderPath2","_objectAssign","_renderLine","_renderPath","_renderPoint","_renderRect","_renderText","toObject","shouldUseNative","assign","test1","getOwnPropertyNames","test2","fromCharCode","order2","test3","letter","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","to","renderLine","group","createElementNS","_setAttributes2","stroke","_normalizeColor2","strokeWidth","x1","y1","x2","y2","_setAttributes","_normalizeColor","setAttributes","keyCase","UPPER_REGEX","BLACKLIST","normalizeColor","REGEX_HASHLESS_HEX","renderPath","p1","p2","fill","renderPoint","outerSVG","innerSVG","SIZE","viewBox","D","renderRect","fillOpacity","createRect","renderText","_pen","_point","_rect","_text","_page","_penSize","_penColor","savePoint","point","handleInputBlur","handleInputKeyup","focus","closeInput","getSelectionRects","selection","getSelection","range","getRangeAt","rects","getClientRects","_type","saveRect","removeAllRanges","boundingRect","filter","_textSize","saveText","_textColor","textSize","textColor","temp","PAGE_TEMPLATE","children","canvas","mozOpaque","renderOptions","canvasContext","getContext","alpha","scalePage","getTextContent","normalizeWhitespace","textContent","textLayer","textLayerFactory","pdfjsViewer","DefaultTextLayerFactory","textLayerBuilder","createTextLayerBuilder","setTextContent","_renderScreenReaderHints2","wrapper","outputScale","getOutputScale","scaled","sx","sy","sfx","approximateFraction","sfy","roundToDivide","floor","xinv","limit","x_","q","ctx","devicePixelRatio","backingStoreRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","pixelRatio","div","round","_renderScreenReaderHints","renderScreenReaderHints","SORT_TYPES","sortBy","_insertScreenReaderHint2","sortByPoint","sortByRectPoint","sortByLinePoint","lineA","lineB","_insertScreenReaderHint","_initEventHandlers","_initEventHandlers2","highlight","strikeout","drawing","textbox","area","insertScreenReaderHint","first","last","_insertElementWithinElement2","_createScreenReaderOnly2","_insertElementWithinChildren2","COMMENT_TYPES","_renderScreenReaderComments2","_createScreenReaderOnly","_insertElementWithinChildren","_insertElementWithinElement","_renderScreenReaderComments","createScreenReaderOnly","overflow","insertElementWithinChildren","insertBefore","textRect","insertElementWithinElement","OFFSET_ADJUST","max","textLayerElementFromPoint","cloneNode","tail","pop","outerHTML","renderScreenReaderComments","insertScreenReaderComment","_insertScreenReaderComment","_insertScreenReaderComment2","item","initEventHandlers","reorderAnnotationsByType","removeAnnotation","removeComment","annotationsByPage","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","removeElementById","elementId","initColorPicker","onChange","setColor","fireOnChange","currentValue","closePicker","togglePicker","isPickerOpen","openPicker","picker","COLORS","createColorOption","margin","onclick","className","hex"],"mappings":"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","file":"static/pdfannotator/pdf-annotate.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PDFAnnotate\"] = factory();\n\telse\n\t\troot[\"PDFAnnotate\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PDFAnnotate\"] = factory();\n\telse\n\t\troot[\"PDFAnnotate\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _initFile = __webpack_require__(37);\n\t\n\tvar _twitterText = __webpack_require__(39);\n\t\n\tvar _twitterText2 = _interopRequireDefault(_twitterText);\n\t\n\tvar _initColorPicker = __webpack_require__(65);\n\t\n\tvar _initColorPicker2 = _interopRequireDefault(_initColorPicker);\n\t\n\tvar _comments = __webpack_require__(38);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar UI = _PDFJSAnnotate2.default.UI;\n\t\n\t\n\tvar PAGE_HEIGHT = void 0;\n\tvar RENDER_OPTIONS = {\n\t    documentId: _initFile.documentUrl,\n\t    pdfDocument: null,\n\t    enhanceTextSelection: true,\n\t    scale: parseFloat(localStorage.getItem(_initFile.documentId + '/scale'), 10) || 1.0\n\t    // rotate: parseInt(localStorage.getItem(`${documentId}/rotate`), 10) || 0\n\t};\n\t\n\t_PDFJSAnnotate2.default.setStoreAdapter(new _PDFJSAnnotate2.default.CRFPAStoreAdapter());\n\t// pdfjsLib.workerSrc = '/static/pdfannotator/pdf.worker.js';\n\t\n\t// Render stuff\n\t\n\t// let renderedPages = {};\n\t// document.getElementById('content-wrapper').addEventListener('scroll', function (e) {\n\t//   let visiblePageNum = Math.round(e.target.scrollTop / PAGE_HEIGHT) + 1;\n\t//   let visiblePage = document.querySelector(`.page[data-page-number=\"${visiblePageNum}\"][data-loaded=\"false\"]`);\n\t//   if (visiblePage) {\n\t//     // Prevent invoking UI.renderPage on the same page more than once.\n\t// \tif ( !renderedPages[visiblePageNum] ) {\n\t// \t  renderedPages[visiblePageNum] = true;\n\t// \t  setTimeout(function () {\n\t// \t\tUI.renderPage(visiblePageNum, RENDER_OPTIONS);\n\t// \t  });\n\t// \t}\n\t//   }\n\t// });\n\t\n\tvar NUM_PAGES = 0;\n\tfunction render() {\n\t\n\t    pdfjsLib.getDocument(RENDER_OPTIONS.documentId).then(function (pdf) {\n\t        RENDER_OPTIONS.pdfDocument = pdf;\n\t\n\t        var viewer = document.getElementById('viewer');\n\t        viewer.innerHTML = '';\n\t        NUM_PAGES = pdf._pdfInfo.numPages;\n\t        for (var i = 0; i < NUM_PAGES; i++) {\n\t            var page = UI.createPage(i + 1);\n\t            viewer.appendChild(page);\n\t        }\n\t\n\t        _PDFJSAnnotate2.default.getAnnotations(_initFile.documentId).then(function (annotations) {\n\t            var _loop = function _loop(num) {\n\t                pdf.getPage(num).then(function () {\n\t                    UI.renderPage(num, annotations, RENDER_OPTIONS).then(function (_ref) {\n\t                        var _ref2 = _slicedToArray(_ref, 2),\n\t                            pdfPage = _ref2[0],\n\t                            annotations = _ref2[1];\n\t\n\t                        var viewport = pdfPage.getViewport(RENDER_OPTIONS.scale);\n\t                        PAGE_HEIGHT = viewport.height;\n\t                        if ($.browser.mozilla) $('.textLayer>.endOfContent').remove();\n\t                    });\n\t                });\n\t            };\n\t\n\t            for (var num = 1; num <= NUM_PAGES; num++) {\n\t                _loop(num);\n\t            }\n\t        });\n\t    });\n\t}\n\trender();\n\t\n\tvar setActiveToolbarItem = function setActiveToolbarItem(type, button) {\n\t    var tooltype = localStorage.getItem(RENDER_OPTIONS.documentId + '/tooltype') || 'cursor';\n\t    var active = document.querySelector('.toolbar button.active');\n\t    if (active) {\n\t        active.classList.remove('active');\n\t\n\t        switch (tooltype) {\n\t            case 'cursor':\n\t                UI.disableEdit();\n\t                break;\n\t            case 'draw':\n\t                UI.disablePen();\n\t                break;\n\t            case 'text':\n\t                UI.disableText();\n\t                break;\n\t            case 'point':\n\t                UI.disablePoint();\n\t                break;\n\t            case 'area':\n\t            case 'highlight':\n\t            case 'strikeout':\n\t                UI.disableRect();\n\t                break;\n\t        }\n\t    }\n\t\n\t    if (button) {\n\t        button.classList.add('active');\n\t    }\n\t    if (tooltype !== type) {\n\t        localStorage.setItem(RENDER_OPTIONS.documentId + '/tooltype', type);\n\t    }\n\t    tooltype = type;\n\t\n\t    switch (type) {\n\t        case 'cursor':\n\t            UI.enableEdit();\n\t            break;\n\t        case 'draw':\n\t            UI.enablePen();\n\t            break;\n\t        case 'text':\n\t            UI.enableText();\n\t            break;\n\t        case 'point':\n\t            UI.enablePoint();\n\t            break;\n\t        case 'area':\n\t        case 'highlight':\n\t        case 'strikeout':\n\t            UI.enableRect(type);\n\t            break;\n\t    }\n\t};\n\t_PDFJSAnnotate2.default.setActiveToolbarItem = setActiveToolbarItem;\n\t\n\tif (!_initFile.readonly) {\n\t    // Text stuff\n\t    (function () {\n\t        var textSize = void 0;\n\t        var textColor = void 0;\n\t\n\t        function initText() {\n\t            // let size = document.querySelector('.toolbar .text-size');\n\t            // [8, 9, 10, 11, 12, 14, 18, 24, 30, 36, 48, 60, 72, 96].forEach((s) => {\n\t            //     size.appendChild(new Option(s, s));\n\t            // });\n\t            //\n\t            // setText(\n\t            //     localStorage.getItem(`${RENDER_OPTIONS.documentId}/text/size`) || 12,\n\t            //     localStorage.getItem(`${RENDER_OPTIONS.documentId}/text/color`) || '#EF4437'\n\t            // );\n\t            setText(12, '#EF4437');\n\t\n\t            // initColorPicker(document.querySelector('.text-color'), textColor, function (value) {\n\t            //     setText(textSize, value);\n\t            // });\n\t        }\n\t\n\t        function setText(size, color) {\n\t            // let modified = false;\n\t            //\n\t            // if (textSize !== size) {\n\t            //     modified = true;\n\t            //     textSize = size;\n\t            //     localStorage.setItem(`${RENDER_OPTIONS.documentId}/text/size`, textSize);\n\t            //     // document.querySelector('.toolbar .text-size').value = textSize;\n\t            // }\n\t            //\n\t            // if (textColor !== color) {\n\t            //     modified = true;\n\t            //     textColor = color;\n\t            //     localStorage.setItem(`${RENDER_OPTIONS.documentId}/text/color`, textColor);\n\t            //\n\t            //     let selected = document.querySelector('.toolbar .text-color.color-selected');\n\t            //     if (selected) {\n\t            //         selected.classList.remove('color-selected');\n\t            //         selected.removeAttribute('aria-selected');\n\t            //     }\n\t            //\n\t            //     selected = document.querySelector(`.toolbar .text-color[data-color=\"${color}\"]`);\n\t            //     if (selected) {\n\t            //         selected.classList.add('color-selected');\n\t            //         selected.setAttribute('aria-selected', true);\n\t            //     }\n\t            //\n\t            // }\n\t\n\t            // if (modified) {\n\t            UI.setText(size, color);\n\t            // }\n\t        }\n\t\n\t        // function handleTextSizeChange(e) {\n\t        //     setText(e.target.value, textColor);\n\t        // }\n\t\n\t        // document.querySelector('.toolbar .text-size').addEventListener('change', handleTextSizeChange);\n\t\n\t        initText();\n\t    })();\n\t\n\t    // Pen stuff\n\t    (function () {\n\t        var penSize = void 0;\n\t        var penColor = void 0;\n\t\n\t        function initPen() {\n\t            var size = document.querySelector('.toolbar .pen-size');\n\t            for (var i = 0; i < 20; i++) {\n\t                size.appendChild(new Option(i + 1, i + 1));\n\t            }\n\t\n\t            setPen(localStorage.getItem(RENDER_OPTIONS.documentId + '/pen/size') || 1, localStorage.getItem(RENDER_OPTIONS.documentId + '/pen/color') || '#000000');\n\t\n\t            (0, _initColorPicker2.default)(document.querySelector('.pen-color'), penColor, function (value) {\n\t                setPen(penSize, value);\n\t            });\n\t        }\n\t\n\t        function setPen(size, color) {\n\t            var modified = false;\n\t\n\t            if (penSize !== size) {\n\t                modified = true;\n\t                penSize = size;\n\t                localStorage.setItem(RENDER_OPTIONS.documentId + '/pen/size', penSize);\n\t                document.querySelector('.toolbar .pen-size').value = penSize;\n\t            }\n\t\n\t            if (penColor !== color) {\n\t                modified = true;\n\t                penColor = color;\n\t                localStorage.setItem(RENDER_OPTIONS.documentId + '/pen/color', penColor);\n\t\n\t                var selected = document.querySelector('.toolbar .pen-color.color-selected');\n\t                if (selected) {\n\t                    selected.classList.remove('color-selected');\n\t                    selected.removeAttribute('aria-selected');\n\t                }\n\t\n\t                selected = document.querySelector('.toolbar .pen-color[data-color=\"' + color + '\"]');\n\t                if (selected) {\n\t                    selected.classList.add('color-selected');\n\t                    selected.setAttribute('aria-selected', true);\n\t                }\n\t            }\n\t\n\t            if (modified) {\n\t                UI.setPen(penSize, penColor);\n\t            }\n\t        }\n\t\n\t        function handlePenSizeChange(e) {\n\t            setPen(e.target.value, penColor);\n\t        }\n\t\n\t        document.querySelector('.toolbar .pen-size').addEventListener('change', handlePenSizeChange);\n\t\n\t        initPen();\n\t    })();\n\t\n\t    // Toolbar buttons\n\t    (function () {\n\t        var tooltype = localStorage.getItem(RENDER_OPTIONS.documentId + '/tooltype') || 'cursor';\n\t        if (tooltype) {\n\t            setActiveToolbarItem(tooltype, document.querySelector('.toolbar button[data-tooltype=' + tooltype + ']'));\n\t        }\n\t\n\t        function handleToolbarClick(e) {\n\t            if (e.target.nodeName === 'BUTTON') {\n\t                setActiveToolbarItem(e.target.getAttribute('data-tooltype'), e.target);\n\t            }\n\t        }\n\t\n\t        document.querySelector('.toolbar').addEventListener('click', handleToolbarClick);\n\t    })();\n\t}\n\t\n\tif (_initFile.readonly) UI.enableEdit();\n\t\n\t// Scale/rotate\n\t(function () {\n\t    function setScaleRotate(scale, rotate) {\n\t        scale = parseFloat(scale, 10);\n\t        rotate = parseInt(rotate, 10);\n\t\n\t        if (RENDER_OPTIONS.scale !== scale || RENDER_OPTIONS.rotate !== rotate) {\n\t            RENDER_OPTIONS.scale = scale;\n\t            RENDER_OPTIONS.rotate = rotate;\n\t\n\t            localStorage.setItem(RENDER_OPTIONS.documentId + '/scale', RENDER_OPTIONS.scale);\n\t            localStorage.setItem(RENDER_OPTIONS.documentId + '/rotate', RENDER_OPTIONS.rotate % 360);\n\t\n\t            render();\n\t        }\n\t    }\n\t\n\t    function handleScaleChange(e) {\n\t        setScaleRotate(e.target.value, RENDER_OPTIONS.rotate);\n\t    }\n\t\n\t    function handleRotateCWClick() {\n\t        setScaleRotate(RENDER_OPTIONS.scale, RENDER_OPTIONS.rotate + 90);\n\t    }\n\t\n\t    function handleRotateCCWClick() {\n\t        setScaleRotate(RENDER_OPTIONS.scale, RENDER_OPTIONS.rotate - 90);\n\t    }\n\t\n\t    document.querySelector('.toolbar select.scale').value = RENDER_OPTIONS.scale;\n\t    document.querySelector('.toolbar select.scale').addEventListener('change', handleScaleChange);\n\t    // document.querySelector('.toolbar .rotate-ccw').addEventListener('click', handleRotateCCWClick);\n\t    // document.querySelector('.toolbar .rotate-cw').addEventListener('click', handleRotateCWClick);\n\t})();\n\t\n\t(0, _comments.renderComments)(_initFile.documentId);\n\t\n\texports.default = _PDFJSAnnotate2.default;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _StoreAdapter = __webpack_require__(2);\n\t\n\tvar _StoreAdapter2 = _interopRequireDefault(_StoreAdapter);\n\t\n\tvar _CRFPAStoreAdapter = __webpack_require__(8);\n\t\n\tvar _CRFPAStoreAdapter2 = _interopRequireDefault(_CRFPAStoreAdapter);\n\t\n\tvar _render = __webpack_require__(64);\n\t\n\tvar _render2 = _interopRequireDefault(_render);\n\t\n\tvar _UI = __webpack_require__(50);\n\t\n\tvar _UI2 = _interopRequireDefault(_UI);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = {\n\t  /**\n\t   * Abstract class that needs to be defined so PDFJSAnnotate\n\t   * knows how to communicate with your server.\n\t   */\n\t  StoreAdapter: _StoreAdapter2.default,\n\t\n\t  /**\n\t   * Implementation of StoreAdapter that stores annotation data to localStorage.\n\t   */\n\t  CRFPAStoreAdapter: _CRFPAStoreAdapter2.default,\n\t\n\t  /**\n\t   * Abstract instance of StoreAdapter\n\t   */\n\t  __storeAdapter: new _StoreAdapter2.default(),\n\t\n\t  /**\n\t   * Getter for the underlying StoreAdapter property\n\t   *\n\t   * @return {StoreAdapter}\n\t   */\n\t  getStoreAdapter: function getStoreAdapter() {\n\t    return this.__storeAdapter;\n\t  },\n\t\n\t\n\t  /**\n\t   * Setter for the underlying StoreAdapter property\n\t   *\n\t   * @param {StoreAdapter} adapter The StoreAdapter implementation to be used.\n\t   */\n\t  setStoreAdapter: function setStoreAdapter(adapter) {\n\t    // TODO this throws an error when bundled\n\t    // if (!(adapter instanceof StoreAdapter)) {\n\t    //   throw new Error('adapter must be an instance of StoreAdapter');\n\t    // }\n\t\n\t    this.__storeAdapter = adapter;\n\t  },\n\t\n\t\n\t  /**\n\t   * UI is a helper for instrumenting UI interactions for creating,\n\t   * editing, and deleting annotations in the browser.\n\t   */\n\t  UI: _UI2.default,\n\t\n\t  /**\n\t   * Render the annotations for a page in the PDF Document\n\t   *\n\t   * @param {SVGElement} svg The SVG element that annotations should be rendered to\n\t   * @param {PageViewport} viewport The PDFPage.getViewport data\n\t   * @param {Object} data The StoreAdapter.getAnnotations data\n\t   * @return {Promise}\n\t   */\n\t  render: _render2.default,\n\t\n\t  /**\n\t   * Convenience method for getting annotation data\n\t   *\n\t   * @alias StoreAdapter.getAnnotations\n\t   * @param {String} documentId The ID of the document\n\t   * @return {Promise}\n\t   */\n\t  getAnnotations: function getAnnotations(documentId) {\n\t    var _getStoreAdapter;\n\t\n\t    return (_getStoreAdapter = this.getStoreAdapter()).getAnnotations.apply(_getStoreAdapter, arguments);\n\t  }\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _abstractFunction = __webpack_require__(3);\n\t\n\tvar _abstractFunction2 = _interopRequireDefault(_abstractFunction);\n\t\n\tvar _event = __webpack_require__(4);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\t// Adapter should never be invoked publicly\n\tvar StoreAdapter = function () {\n\t  /**\n\t   * Create a new StoreAdapter instance\n\t   *\n\t   * @param {Object} [definition] The definition to use for overriding abstract methods\n\t   */\n\t  function StoreAdapter() {\n\t    var _this = this;\n\t\n\t    var definition = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\t\n\t    _classCallCheck(this, StoreAdapter);\n\t\n\t    // Copy each function from definition if it is a function we know about\n\t    Object.keys(definition).forEach(function (key) {\n\t      if (typeof definition[key] === 'function' && typeof _this[key] === 'function') {\n\t        _this[key] = definition[key];\n\t      }\n\t    });\n\t  }\n\t\n\t  /**\n\t   * Get all the annotations for a given document and page number.\n\t   *\n\t   * @param {String} documentId The ID for the document the annotations belong to\n\t   * @param {Number} pageNumber The number of the page the annotations belong to\n\t   * @return {Promise}\n\t   */\n\t\n\t\n\t  _createClass(StoreAdapter, [{\n\t    key: '__getAnnotations',\n\t    value: function __getAnnotations(documentId) {\n\t      (0, _abstractFunction2.default)('getAnnotations');\n\t    }\n\t  }, {\n\t    key: 'getAnnotation',\n\t\n\t\n\t    /**\n\t     * Get the definition for a specific annotation.\n\t     *\n\t     * @param {String} documentId The ID for the document the annotation belongs to\n\t     * @param {String} annotationId The ID for the annotation\n\t     * @return {Promise}\n\t     */\n\t    value: function getAnnotation(documentId, annotationId) {\n\t      (0, _abstractFunction2.default)('getAnnotation');\n\t    }\n\t\n\t    /**\n\t     * Add an annotation\n\t     *\n\t     * @param {String} documentId The ID for the document to add the annotation to\n\t     * @param {String} pageNumber The page number to add the annotation to\n\t     * @param {Object} annotation The definition for the new annotation\n\t     * @return {Promise}\n\t     */\n\t\n\t  }, {\n\t    key: '__addAnnotation',\n\t    value: function __addAnnotation(documentId, pageNumber, annotation) {\n\t      (0, _abstractFunction2.default)('addAnnotation');\n\t    }\n\t  }, {\n\t    key: '__editAnnotation',\n\t\n\t\n\t    /**\n\t     * Edit an annotation\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} pageNumber the page number of the annotation\n\t     * @param {Object} annotation The definition of the modified annotation\n\t     * @return {Promise}\n\t     */\n\t    value: function __editAnnotation(documentId, pageNumber, annotation) {\n\t      (0, _abstractFunction2.default)('editAnnotation');\n\t    }\n\t  }, {\n\t    key: '__deleteAnnotation',\n\t\n\t\n\t    /**\n\t     * Delete an annotation\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} annotationId The ID for the annotation\n\t     * @return {Promise}\n\t     */\n\t    value: function __deleteAnnotation(documentId, annotationId) {\n\t      (0, _abstractFunction2.default)('deleteAnnotation');\n\t    }\n\t  }, {\n\t    key: 'getComments',\n\t\n\t\n\t    /**\n\t     * Get all the comments for an annotation\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} annotationId The ID for the annotation\n\t     * @return {Promise}\n\t     */\n\t    value: function getComments(documentId, annotationId) {\n\t      (0, _abstractFunction2.default)('getComments');\n\t    }\n\t\n\t    /**\n\t     * Add a new comment\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} annotationId The ID for the annotation\n\t     * @param {Object} content The definition of the comment\n\t     * @return {Promise}\n\t     */\n\t\n\t  }, {\n\t    key: '__addComment',\n\t    value: function __addComment(documentId, annotationId, content) {\n\t      (0, _abstractFunction2.default)('addComment');\n\t    }\n\t  }, {\n\t    key: '__updateComment',\n\t\n\t\n\t    /**\n\t     * Update a new comment\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} annotationId The ID for the annotation\n\t     * @param {Object} content The definition of the comment\n\t     * @return {Promise}\n\t     */\n\t    value: function __updateComment(documentId, annotationId, content) {\n\t      (0, _abstractFunction2.default)('addComment');\n\t    }\n\t  }, {\n\t    key: '__deleteComment',\n\t\n\t\n\t    /**\n\t     * Delete a comment\n\t     *\n\t     * @param {String} documentId The ID for the document\n\t     * @param {String} commentId The ID for the comment\n\t     * @return {Promise}\n\t     */\n\t    value: function __deleteComment(documentId, commentId) {\n\t      (0, _abstractFunction2.default)('deleteComment');\n\t    }\n\t  }, {\n\t    key: 'getAnnotations',\n\t    get: function get() {\n\t      return this.__getAnnotations;\n\t    },\n\t    set: function set(fn) {\n\t      this.__getAnnotations = function getAnnotations(documentId) {\n\t        return fn.apply(undefined, arguments).then(function (annotations) {\n\t          // TODO may be best to have this happen on the server\n\t          // if (annotations) {\n\t          //   annotations.forEach((a) => {\n\t          //     a.documentId = documentId;\n\t          //   });\n\t          // }\n\t          return annotations;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'addAnnotation',\n\t    get: function get() {\n\t      return this.__addAnnotation;\n\t    },\n\t    set: function set(fn) {\n\t      this.__addAnnotation = function addAnnotation(documentId, pageNumber, annotation) {\n\t        return fn.apply(undefined, arguments).then(function (annotation) {\n\t          (0, _event.fireEvent)('annotation:add', documentId, pageNumber, annotation);\n\t          return annotation;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'editAnnotation',\n\t    get: function get() {\n\t      return this.__editAnnotation;\n\t    },\n\t    set: function set(fn) {\n\t      this.__editAnnotation = function editAnnotation(documentId, annotationId, annotation) {\n\t        return fn.apply(undefined, arguments).then(function (annotation) {\n\t          (0, _event.fireEvent)('annotation:edit', documentId, annotationId, annotation);\n\t          return annotation;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'deleteAnnotation',\n\t    get: function get() {\n\t      return this.__deleteAnnotation;\n\t    },\n\t    set: function set(fn) {\n\t      this.__deleteAnnotation = function deleteAnnotation(documentId, annotationId) {\n\t        return fn.apply(undefined, arguments).then(function (success) {\n\t          if (success) {\n\t            (0, _event.fireEvent)('annotation:delete', documentId, annotationId);\n\t          }\n\t          return success;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'addComment',\n\t    get: function get() {\n\t      return this.__addComment;\n\t    },\n\t    set: function set(fn) {\n\t      this.__addComment = function addComment(documentId, annotationId, content) {\n\t        return fn.apply(undefined, arguments).then(function (comment) {\n\t          (0, _event.fireEvent)('comment:add', documentId, annotationId, comment);\n\t          return comment;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'updateComment',\n\t    get: function get() {\n\t      return this.__updateComment;\n\t    },\n\t    set: function set(fn) {\n\t      this.__updateComment = function updateComment(documentId, annotationId, content) {\n\t        return fn.apply(undefined, arguments).then(function (comment) {\n\t          (0, _event.fireEvent)('comment:updated', documentId, annotationId, comment);\n\t          return comment;\n\t        });\n\t      };\n\t    }\n\t  }, {\n\t    key: 'deleteComment',\n\t    get: function get() {\n\t      return this.__deleteComment;\n\t    },\n\t    set: function set(fn) {\n\t      this.__deleteComment = function deleteComment(documentId, commentId) {\n\t        return fn.apply(undefined, arguments).then(function (success) {\n\t          if (success) {\n\t            (0, _event.fireEvent)('comment:delete', documentId, commentId);\n\t          }\n\t          return success;\n\t        });\n\t      };\n\t    }\n\t  }]);\n\t\n\t  return StoreAdapter;\n\t}();\n\t\n\texports.default = StoreAdapter;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = abstractFunction;\n\t/**\n\t * Throw an Error for an abstract function that hasn't been implemented.\n\t *\n\t * @param {String} name The name of the abstract function\n\t */\n\tfunction abstractFunction(name) {\n\t  throw new Error(name + ' is not implemented');\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.fireEvent = fireEvent;\n\texports.addEventListener = addEventListener;\n\texports.removeEventListener = removeEventListener;\n\t\n\tvar _events = __webpack_require__(5);\n\t\n\tvar _events2 = _interopRequireDefault(_events);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar emitter = new _events2.default();\n\t\n\tvar clickNode = void 0;\n\t\n\t/**\n\t * Handle document.click event\n\t *\n\t * @param {Event} e The DOM event to be handled\n\t */\n\t// document.addEventListener('mousedown', function handleDocumentClick(e) {\n\t\n\tdocument.addEventListener('click', function handleDocumentClick(e) {\n\t  if (!(0, _utils.findSVGAtPoint)(e.clientX, e.clientY)) {\n\t    return;\n\t  }\n\t\n\t  var target = (0, _utils.findAnnotationAtPoint)(e.clientX, e.clientY);\n\t\n\t  // Emit annotation:blur if clickNode is no longer clicked\n\t  if (clickNode && clickNode !== target) {\n\t    emitter.emit('annotation:blur', clickNode);\n\t  }\n\t\n\t  // Emit annotation:click if target was clicked\n\t  if (target) {\n\t    emitter.emit('annotation:click', target);\n\t  }\n\t\n\t  clickNode = target;\n\t});\n\t\n\t// let mouseOverNode;\n\t// document.addEventListener('mousemove', function handleDocumentMousemove(e) {\n\t//   let target = findAnnotationAtPoint(e.clientX, e.clientY);\n\t//\n\t//   // Emit annotation:mouseout if target was mouseout'd\n\t//   if (mouseOverNode && !target) {\n\t//     emitter.emit('annotation:mouseout', mouseOverNode);\n\t//   }\n\t//\n\t//   // Emit annotation:mouseover if target was mouseover'd\n\t//   if (target && mouseOverNode !== target) {\n\t//     emitter.emit('annotation:mouseover', target);\n\t//   }\n\t//\n\t//   mouseOverNode = target;\n\t// });\n\t\n\tfunction fireEvent() {\n\t  emitter.emit.apply(emitter, arguments);\n\t};\n\tfunction addEventListener() {\n\t  emitter.on.apply(emitter, arguments);\n\t};\n\tfunction removeEventListener() {\n\t  emitter.removeListener.apply(emitter, arguments);\n\t};\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t// Copyright Joyent, Inc. and other Node contributors.\n\t//\n\t// Permission is hereby granted, free of charge, to any person obtaining a\n\t// copy of this software and associated documentation files (the\n\t// \"Software\"), to deal in the Software without restriction, including\n\t// without limitation the rights to use, copy, modify, merge, publish,\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\n\t// persons to whom the Software is furnished to do so, subject to the\n\t// following conditions:\n\t//\n\t// The above copyright notice and this permission notice shall be included\n\t// in all copies or substantial portions of the Software.\n\t//\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\t\n\tfunction EventEmitter() {\n\t  this._events = this._events || {};\n\t  this._maxListeners = this._maxListeners || undefined;\n\t}\n\tmodule.exports = EventEmitter;\n\t\n\t// Backwards-compat with node 0.10.x\n\tEventEmitter.EventEmitter = EventEmitter;\n\t\n\tEventEmitter.prototype._events = undefined;\n\tEventEmitter.prototype._maxListeners = undefined;\n\t\n\t// By default EventEmitters will print a warning if more than 10 listeners are\n\t// added to it. This is a useful default which helps finding memory leaks.\n\tEventEmitter.defaultMaxListeners = 10;\n\t\n\t// Obviously not all Emitters should be limited to 10. This function allows\n\t// that to be increased. Set to zero for unlimited.\n\tEventEmitter.prototype.setMaxListeners = function(n) {\n\t  if (!isNumber(n) || n < 0 || isNaN(n))\n\t    throw TypeError('n must be a positive number');\n\t  this._maxListeners = n;\n\t  return this;\n\t};\n\t\n\tEventEmitter.prototype.emit = function(type) {\n\t  var er, handler, len, args, i, listeners;\n\t\n\t  if (!this._events)\n\t    this._events = {};\n\t\n\t  // If there is no 'error' event listener then throw.\n\t  if (type === 'error') {\n\t    if (!this._events.error ||\n\t        (isObject(this._events.error) && !this._events.error.length)) {\n\t      er = arguments[1];\n\t      if (er instanceof Error) {\n\t        throw er; // Unhandled 'error' event\n\t      } else {\n\t        // At least give some kind of context to the user\n\t        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n\t        err.context = er;\n\t        throw err;\n\t      }\n\t    }\n\t  }\n\t\n\t  handler = this._events[type];\n\t\n\t  if (isUndefined(handler))\n\t    return false;\n\t\n\t  if (isFunction(handler)) {\n\t    switch (arguments.length) {\n\t      // fast cases\n\t      case 1:\n\t        handler.call(this);\n\t        break;\n\t      case 2:\n\t        handler.call(this, arguments[1]);\n\t        break;\n\t      case 3:\n\t        handler.call(this, arguments[1], arguments[2]);\n\t        break;\n\t      // slower\n\t      default:\n\t        args = Array.prototype.slice.call(arguments, 1);\n\t        handler.apply(this, args);\n\t    }\n\t  } else if (isObject(handler)) {\n\t    args = Array.prototype.slice.call(arguments, 1);\n\t    listeners = handler.slice();\n\t    len = listeners.length;\n\t    for (i = 0; i < len; i++)\n\t      listeners[i].apply(this, args);\n\t  }\n\t\n\t  return true;\n\t};\n\t\n\tEventEmitter.prototype.addListener = function(type, listener) {\n\t  var m;\n\t\n\t  if (!isFunction(listener))\n\t    throw TypeError('listener must be a function');\n\t\n\t  if (!this._events)\n\t    this._events = {};\n\t\n\t  // To avoid recursion in the case that type === \"newListener\"! Before\n\t  // adding it to the listeners, first emit \"newListener\".\n\t  if (this._events.newListener)\n\t    this.emit('newListener', type,\n\t              isFunction(listener.listener) ?\n\t              listener.listener : listener);\n\t\n\t  if (!this._events[type])\n\t    // Optimize the case of one listener. Don't need the extra array object.\n\t    this._events[type] = listener;\n\t  else if (isObject(this._events[type]))\n\t    // If we've already got an array, just append.\n\t    this._events[type].push(listener);\n\t  else\n\t    // Adding the second element, need to change to array.\n\t    this._events[type] = [this._events[type], listener];\n\t\n\t  // Check for listener leak\n\t  if (isObject(this._events[type]) && !this._events[type].warned) {\n\t    if (!isUndefined(this._maxListeners)) {\n\t      m = this._maxListeners;\n\t    } else {\n\t      m = EventEmitter.defaultMaxListeners;\n\t    }\n\t\n\t    if (m && m > 0 && this._events[type].length > m) {\n\t      this._events[type].warned = true;\n\t      console.error('(node) warning: possible EventEmitter memory ' +\n\t                    'leak detected. %d listeners added. ' +\n\t                    'Use emitter.setMaxListeners() to increase limit.',\n\t                    this._events[type].length);\n\t      if (typeof console.trace === 'function') {\n\t        // not supported in IE 10\n\t        console.trace();\n\t      }\n\t    }\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\tEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\t\n\tEventEmitter.prototype.once = function(type, listener) {\n\t  if (!isFunction(listener))\n\t    throw TypeError('listener must be a function');\n\t\n\t  var fired = false;\n\t\n\t  function g() {\n\t    this.removeListener(type, g);\n\t\n\t    if (!fired) {\n\t      fired = true;\n\t      listener.apply(this, arguments);\n\t    }\n\t  }\n\t\n\t  g.listener = listener;\n\t  this.on(type, g);\n\t\n\t  return this;\n\t};\n\t\n\t// emits a 'removeListener' event iff the listener was removed\n\tEventEmitter.prototype.removeListener = function(type, listener) {\n\t  var list, position, length, i;\n\t\n\t  if (!isFunction(listener))\n\t    throw TypeError('listener must be a function');\n\t\n\t  if (!this._events || !this._events[type])\n\t    return this;\n\t\n\t  list = this._events[type];\n\t  length = list.length;\n\t  position = -1;\n\t\n\t  if (list === listener ||\n\t      (isFunction(list.listener) && list.listener === listener)) {\n\t    delete this._events[type];\n\t    if (this._events.removeListener)\n\t      this.emit('removeListener', type, listener);\n\t\n\t  } else if (isObject(list)) {\n\t    for (i = length; i-- > 0;) {\n\t      if (list[i] === listener ||\n\t          (list[i].listener && list[i].listener === listener)) {\n\t        position = i;\n\t        break;\n\t      }\n\t    }\n\t\n\t    if (position < 0)\n\t      return this;\n\t\n\t    if (list.length === 1) {\n\t      list.length = 0;\n\t      delete this._events[type];\n\t    } else {\n\t      list.splice(position, 1);\n\t    }\n\t\n\t    if (this._events.removeListener)\n\t      this.emit('removeListener', type, listener);\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\tEventEmitter.prototype.removeAllListeners = function(type) {\n\t  var key, listeners;\n\t\n\t  if (!this._events)\n\t    return this;\n\t\n\t  // not listening for removeListener, no need to emit\n\t  if (!this._events.removeListener) {\n\t    if (arguments.length === 0)\n\t      this._events = {};\n\t    else if (this._events[type])\n\t      delete this._events[type];\n\t    return this;\n\t  }\n\t\n\t  // emit removeListener for all listeners on all events\n\t  if (arguments.length === 0) {\n\t    for (key in this._events) {\n\t      if (key === 'removeListener') continue;\n\t      this.removeAllListeners(key);\n\t    }\n\t    this.removeAllListeners('removeListener');\n\t    this._events = {};\n\t    return this;\n\t  }\n\t\n\t  listeners = this._events[type];\n\t\n\t  if (isFunction(listeners)) {\n\t    this.removeListener(type, listeners);\n\t  } else if (listeners) {\n\t    // LIFO order\n\t    while (listeners.length)\n\t      this.removeListener(type, listeners[listeners.length - 1]);\n\t  }\n\t  delete this._events[type];\n\t\n\t  return this;\n\t};\n\t\n\tEventEmitter.prototype.listeners = function(type) {\n\t  var ret;\n\t  if (!this._events || !this._events[type])\n\t    ret = [];\n\t  else if (isFunction(this._events[type]))\n\t    ret = [this._events[type]];\n\t  else\n\t    ret = this._events[type].slice();\n\t  return ret;\n\t};\n\t\n\tEventEmitter.prototype.listenerCount = function(type) {\n\t  if (this._events) {\n\t    var evlistener = this._events[type];\n\t\n\t    if (isFunction(evlistener))\n\t      return 1;\n\t    else if (evlistener)\n\t      return evlistener.length;\n\t  }\n\t  return 0;\n\t};\n\t\n\tEventEmitter.listenerCount = function(emitter, type) {\n\t  return emitter.listenerCount(type);\n\t};\n\t\n\tfunction isFunction(arg) {\n\t  return typeof arg === 'function';\n\t}\n\t\n\tfunction isNumber(arg) {\n\t  return typeof arg === 'number';\n\t}\n\t\n\tfunction isObject(arg) {\n\t  return typeof arg === 'object' && arg !== null;\n\t}\n\t\n\tfunction isUndefined(arg) {\n\t  return arg === void 0;\n\t}\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.BORDER_COLOR = undefined;\n\texports.findSVGContainer = findSVGContainer;\n\texports.findSVGAtPoint = findSVGAtPoint;\n\texports.findAnnotationAtPoint = findAnnotationAtPoint;\n\texports.pointIntersectsRect = pointIntersectsRect;\n\texports.getOffsetAnnotationRect = getOffsetAnnotationRect;\n\texports.getAnnotationRect = getAnnotationRect;\n\texports.scaleUp = scaleUp;\n\texports.scaleDown = scaleDown;\n\texports.getScroll = getScroll;\n\texports.getOffset = getOffset;\n\texports.disableUserSelect = disableUserSelect;\n\texports.enableUserSelect = enableUserSelect;\n\texports.getMetadata = getMetadata;\n\t\n\tvar _createStylesheet = __webpack_require__(7);\n\t\n\tvar _createStylesheet2 = _interopRequireDefault(_createStylesheet);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar BORDER_COLOR = exports.BORDER_COLOR = '#00BFFF';\n\t\n\tvar userSelectStyleSheet = (0, _createStylesheet2.default)({\n\t  body: {\n\t    '-webkit-user-select': 'none',\n\t    '-moz-user-select': 'none',\n\t    '-ms-user-select': 'none',\n\t    'user-select': 'none'\n\t  }\n\t});\n\tuserSelectStyleSheet.setAttribute('data-pdf-annotate-user-select', 'true');\n\t\n\t/**\n\t * Find the SVGElement that contains all the annotations for a page\n\t *\n\t * @param {Element} node An annotation within that container\n\t * @return {SVGElement} The container SVG or null if it can't be found\n\t */\n\tfunction findSVGContainer(node) {\n\t  var parentNode = node;\n\t\n\t  while ((parentNode = parentNode.parentNode) && parentNode !== document) {\n\t    if (parentNode.nodeName.toUpperCase() === 'SVG' && parentNode.getAttribute('data-pdf-annotate-container') === 'true') {\n\t      return parentNode;\n\t    }\n\t  }\n\t\n\t  return null;\n\t}\n\t\n\t/**\n\t * Find an SVGElement container at a given point\n\t *\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @return {SVGElement} The container SVG or null if one can't be found\n\t */\n\tfunction findSVGAtPoint(x, y) {\n\t  var elements = document.querySelectorAll('svg[data-pdf-annotate-container=\"true\"]');\n\t  for (var i = 0, l = elements.length; i < l; i++) {\n\t    var el = elements[i];\n\t    var rect = el.getBoundingClientRect();\n\t\n\t    if (pointIntersectsRect(x, y, rect)) {\n\t      return el;\n\t    }\n\t  }\n\t\n\t  return null;\n\t}\n\t\n\t/**\n\t * Find an Element that represents an annotation at a given point\n\t *\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @return {Element} The annotation element or null if one can't be found\n\t */\n\tfunction findAnnotationAtPoint(x, y) {\n\t  var svg = findSVGAtPoint(x, y);\n\t  if (!svg) {\n\t    return;\n\t  }\n\t  var elements = svg.querySelectorAll('[data-pdf-annotate-type]');\n\t\n\t  // Find a target element within SVG\n\t  for (var i = 0, l = elements.length; i < l; i++) {\n\t    var el = elements[i];\n\t    if (pointIntersectsRect(x, y, getOffsetAnnotationRect(el))) {\n\t      return el;\n\t    }\n\t  }\n\t\n\t  return null;\n\t}\n\t\n\t/**\n\t * Determine if a point intersects a rect\n\t *\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @param {Object} rect The points of a rect (likely from getBoundingClientRect)\n\t * @return {Boolean} True if a collision occurs, otherwise false\n\t */\n\tfunction pointIntersectsRect(x, y, rect) {\n\t  return y >= rect.top && y <= rect.bottom && x >= rect.left && x <= rect.right;\n\t}\n\t\n\t/**\n\t * Get the rect of an annotation element accounting for offset.\n\t *\n\t * @param {Element} el The element to get the rect of\n\t * @return {Object} The dimensions of the element\n\t */\n\tfunction getOffsetAnnotationRect(el) {\n\t  var rect = getAnnotationRect(el);\n\t\n\t  var _getOffset = getOffset(el),\n\t      offsetLeft = _getOffset.offsetLeft,\n\t      offsetTop = _getOffset.offsetTop;\n\t\n\t  return {\n\t    top: rect.top + offsetTop,\n\t    left: rect.left + offsetLeft,\n\t    right: rect.right + offsetLeft,\n\t    bottom: rect.bottom + offsetTop\n\t  };\n\t}\n\t\n\t/**\n\t * Get the rect of an annotation element.\n\t *\n\t * @param {Element} el The element to get the rect of\n\t * @return {Object} The dimensions of the element\n\t */\n\tfunction getAnnotationRect(el) {\n\t  var h = 0,\n\t      w = 0,\n\t      x = 0,\n\t      y = 0;\n\t  var rect = el.getBoundingClientRect();\n\t  // TODO this should be calculated somehow\n\t  var LINE_OFFSET = 16;\n\t  // debugger;\n\t  switch (el.nodeName.toLowerCase()) {\n\t    case 'path':\n\t      var minX = void 0,\n\t          maxX = void 0,\n\t          minY = void 0,\n\t          maxY = void 0;\n\t\n\t      el.getAttribute('d').replace(/Z/, '').split('M').splice(1).forEach(function (p) {\n\t        var s = p.split(' ').map(function (i) {\n\t          return parseInt(i, 10);\n\t        });\n\t\n\t        if (typeof minX === 'undefined' || s[0] < minX) {\n\t          minX = s[0];\n\t        }\n\t        if (typeof maxX === 'undefined' || s[2] > maxX) {\n\t          maxX = s[2];\n\t        }\n\t        if (typeof minY === 'undefined' || s[1] < minY) {\n\t          minY = s[1];\n\t        }\n\t        if (typeof maxY === 'undefined' || s[3] > maxY) {\n\t          maxY = s[3];\n\t        }\n\t      });\n\t\n\t      h = maxY - minY;\n\t      w = maxX - minX;\n\t      x = minX;\n\t      y = minY;\n\t      break;\n\t\n\t    case 'line':\n\t      h = parseInt(el.getAttribute('y2'), 10) - parseInt(el.getAttribute('y1'), 10);\n\t      w = parseInt(el.getAttribute('x2'), 10) - parseInt(el.getAttribute('x1'), 10);\n\t      x = parseInt(el.getAttribute('x1'), 10);\n\t      y = parseInt(el.getAttribute('y1'), 10);\n\t\n\t      if (h === 0) {\n\t        h += LINE_OFFSET;\n\t        y -= LINE_OFFSET / 2;\n\t      }\n\t      break;\n\t\n\t    case 'text':\n\t      h = rect.height;\n\t      w = rect.width;\n\t      x = parseInt(el.getAttribute('x'), 10);\n\t      y = parseInt(el.getAttribute('y'), 10) - h;\n\t      break;\n\t\n\t    case 'g':\n\t      var _getOffset2 = getOffset(el),\n\t          offsetLeft = _getOffset2.offsetLeft,\n\t          offsetTop = _getOffset2.offsetTop;\n\t\n\t      h = rect.height;\n\t      w = rect.width;\n\t      x = rect.left - offsetLeft;\n\t      y = rect.top - offsetTop;\n\t\n\t      if (el.getAttribute('data-pdf-annotate-type') === 'strikeout') {\n\t        h += LINE_OFFSET;\n\t        y -= LINE_OFFSET / 2;\n\t      }\n\t      break;\n\t\n\t    case 'rect':\n\t    case 'svg':\n\t      h = parseInt(el.getAttribute('height'), 10);\n\t      w = parseInt(el.getAttribute('width'), 10);\n\t      x = parseInt(el.getAttribute('x'), 10);\n\t      y = parseInt(el.getAttribute('y'), 10);\n\t      break;\n\t  }\n\t\n\t  // Result provides same properties as getBoundingClientRect\n\t  var result = {\n\t    top: y,\n\t    left: x,\n\t    width: w,\n\t    height: h,\n\t    right: x + w,\n\t    bottom: y + h\n\t  };\n\t\n\t  // For the case of nested SVG (point annotations) and grouped\n\t  // lines or rects no adjustment needs to be made for scale.\n\t  // I assume that the scale is already being handled\n\t  // natively by virtue of the `transform` attribute.\n\t  if (!['svg', 'g'].includes(el.nodeName.toLowerCase())) {\n\t    result = scaleUp(findSVGAtPoint(rect.left, rect.top), result);\n\t  }\n\t\n\t  // // comment point need to be scaled on FF\n\t  if (el.nodeName.toLowerCase() == 'svg' && $.browser.mozilla) {\n\t    result = scaleUp(findSVGAtPoint(rect.left, rect.top), result);\n\t  }\n\t\n\t  return result;\n\t}\n\t\n\t/**\n\t * Adjust scale from normalized scale (100%) to rendered scale.\n\t *\n\t * @param {SVGElement} svg The SVG to gather metadata from\n\t * @param {Object} rect A map of numeric values to scale\n\t * @return {Object} A copy of `rect` with values scaled up\n\t */\n\tfunction scaleUp(svg, rect) {\n\t  var result = {};\n\t\n\t  var _getMetadata = getMetadata(svg),\n\t      viewport = _getMetadata.viewport;\n\t\n\t  Object.keys(rect).forEach(function (key) {\n\t    result[key] = rect[key] * viewport.scale;\n\t  });\n\t\n\t  return result;\n\t}\n\t\n\t/**\n\t * Adjust scale from rendered scale to a normalized scale (100%).\n\t *\n\t * @param {SVGElement} svg The SVG to gather metadata from\n\t * @param {Object} rect A map of numeric values to scale\n\t * @return {Object} A copy of `rect` with values scaled down\n\t */\n\tfunction scaleDown(svg, rect) {\n\t  var result = {};\n\t\n\t  var _getMetadata2 = getMetadata(svg),\n\t      viewport = _getMetadata2.viewport;\n\t\n\t  Object.keys(rect).forEach(function (key) {\n\t    result[key] = rect[key] / viewport.scale;\n\t  });\n\t\n\t  return result;\n\t}\n\t\n\t/**\n\t * Get the scroll position of an element, accounting for parent elements\n\t *\n\t * @param {Element} el The element to get the scroll position for\n\t * @return {Object} The scrollTop and scrollLeft position\n\t */\n\tfunction getScroll(el) {\n\t  var scrollTop = 0;\n\t  var scrollLeft = 0;\n\t  var parentNode = el;\n\t\n\t  while ((parentNode = parentNode.parentNode) && parentNode !== document) {\n\t    scrollTop += parentNode.scrollTop;\n\t    scrollLeft += parentNode.scrollLeft;\n\t  }\n\t\n\t  return { scrollTop: scrollTop, scrollLeft: scrollLeft };\n\t}\n\t\n\t/**\n\t * Get the offset position of an element, accounting for parent elements\n\t *\n\t * @param {Element} el The element to get the offset position for\n\t * @return {Object} The offsetTop and offsetLeft position\n\t */\n\tfunction getOffset(el) {\n\t  var parentNode = el;\n\t\n\t  while ((parentNode = parentNode.parentNode) && parentNode !== document) {\n\t    if (parentNode.nodeName.toUpperCase() === 'SVG') {\n\t      break;\n\t    }\n\t  }\n\t\n\t  var rect = parentNode.getBoundingClientRect();\n\t\n\t  return { offsetLeft: rect.left, offsetTop: rect.top };\n\t}\n\t\n\t/**\n\t * Disable user ability to select text on page\n\t */\n\tfunction disableUserSelect() {\n\t  if (!userSelectStyleSheet.parentNode) {\n\t    document.head.appendChild(userSelectStyleSheet);\n\t  }\n\t}\n\t\n\t/**\n\t * Enable user ability to select text on page\n\t */\n\tfunction enableUserSelect() {\n\t  if (userSelectStyleSheet.parentNode) {\n\t    userSelectStyleSheet.parentNode.removeChild(userSelectStyleSheet);\n\t  }\n\t}\n\t\n\t/**\n\t * Get the metadata for a SVG container\n\t *\n\t * @param {SVGElement} svg The SVG container to get metadata for\n\t */\n\tfunction getMetadata(svg) {\n\t  return {\n\t    documentId: svg.getAttribute('data-pdf-annotate-document'),\n\t    pageNumber: parseInt(svg.getAttribute('data-pdf-annotate-page'), 10),\n\t    viewport: JSON.parse(svg.getAttribute('data-pdf-annotate-viewport'))\n\t  };\n\t}\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function createStyleSheet(blocks) {\n\t  var style = document.createElement('style');\n\t  var text = Object.keys(blocks).map(function (selector) {\n\t    return processRuleSet(selector, blocks[selector]);\n\t  }).join('\\n');\n\t  \n\t  style.setAttribute('type', 'text/css');\n\t  style.appendChild(document.createTextNode(text));\n\t\n\t  return style;\n\t}\n\t\n\tfunction processRuleSet(selector, block) {\n\t  return selector + ' {\\n' + processDeclarationBlock(block) + '\\n}';\n\t}\n\t\n\tfunction processDeclarationBlock(block) {\n\t  return Object.keys(block).map(function (prop) {\n\t    return processDeclaration(prop, block[prop]);\n\t  }).join('\\n');\n\t}\n\t\n\tfunction processDeclaration(prop, value) {\n\t  if (!isNaN(value) && value != 0) {\n\t    value = value + 'px';\n\t  }\n\t\n\t  return hyphenate(prop) + ': ' + value + ';';\n\t}\n\t\n\tfunction hyphenate(prop) {\n\t  return prop.replace(/[A-Z]/g, function (match) {\n\t    return '-' + match.toLowerCase();\n\t  });\n\t}\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\t\n\tvar _axios = __webpack_require__(9);\n\t\n\tvar _axios2 = _interopRequireDefault(_axios);\n\t\n\tvar _uuid = __webpack_require__(36);\n\t\n\tvar _uuid2 = _interopRequireDefault(_uuid);\n\t\n\tvar _StoreAdapter2 = __webpack_require__(2);\n\t\n\tvar _StoreAdapter3 = _interopRequireDefault(_StoreAdapter2);\n\t\n\tvar _initFile = __webpack_require__(37);\n\t\n\tvar _comments = __webpack_require__(38);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\t_axios2.default.defaults.xsrfCookieName = 'csrftoken';\n\t_axios2.default.defaults.xsrfHeaderName = 'X-CSRFToken';\n\t\n\tvar CRFPAStoreAdapter = function (_StoreAdapter) {\n\t    _inherits(CRFPAStoreAdapter, _StoreAdapter);\n\t\n\t    function CRFPAStoreAdapter() {\n\t        _classCallCheck(this, CRFPAStoreAdapter);\n\t\n\t        var API = _axios2.default.create({\n\t            baseURL: '/pdfannotator',\n\t            timeout: 60000,\n\t            withCredentials: true,\n\t            headers: {\n\t                'Accept': 'application/json',\n\t                'Content-Type': 'application/json',\n\t                'Access-Control-Allow-Origin': '*'\n\t            }\n\t        });\n\t\n\t        return _possibleConstructorReturn(this, (CRFPAStoreAdapter.__proto__ || Object.getPrototypeOf(CRFPAStoreAdapter)).call(this, {\n\t            getAnnotations: function getAnnotations(documentId) {\n\t\n\t                return API.get('/get-annotations/', {\n\t                    params: {\n\t                        fileUuid: _initFile.documentId\n\t                    }\n\t                }).then(function (response) {\n\t                    return response.data;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et les annotations n'ont pas pu être téléchargées depuis le serveur.\");\n\t                });\n\t\n\t                // return new Promise((resolve, reject) => {\n\t                //   let annotations = getAnnotations(documentId).filter((i) => {\n\t                //     return i.page === pageNumber && i.class === 'Annotation';\n\t                //   });\n\t                //\n\t                //   resolve({\n\t                //     documentId,\n\t                //     pageNumber,\n\t                //     annotations\n\t                //   });\n\t                // });\n\t            },\n\t            getAnnotation: function getAnnotation(documentId, annotationId) {\n\t                return API.get('/get-annotation/', {\n\t                    params: {\n\t                        fileUuid: _initFile.documentId,\n\t                        annotationId: annotationId\n\t                    }\n\t                }).then(function (response) {\n\t                    return response.data;\n\t                });\n\t            },\n\t            addAnnotation: function addAnnotation(documentId, pageNumber, annotation) {\n\t\n\t                annotation.class = 'Annotation';\n\t                annotation.page = pageNumber;\n\t                annotation.uuid = (0, _uuid2.default)();\n\t\n\t                return API.post('/add-annotation/', {\n\t                    fileUuid: _initFile.documentId,\n\t                    page: pageNumber,\n\t                    annotation: annotation\n\t                }).then(function (response) {\n\t                    return annotation;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et votre annotation n'a pas pu être enregistrée.\");\n\t                });\n\t\n\t                // return new Promise((resolve, reject) => {\n\t\n\t                // annotation.class = 'Annotation';\n\t                // annotation.uuid = uuid();\n\t                // annotation.page = pageNumber;\n\t\n\t                // let annotations = getAnnotations(documentId);\n\t                // annotations.push(annotation);\n\t                // updateAnnotations(documentId, annotations);\n\t\n\t                // resolve(annotation);\n\t                // });\n\t            },\n\t            editAnnotation: function editAnnotation(documentId, annotationId, annotation) {\n\t                return API.post('/update-annotation/', {\n\t                    fileUuid: _initFile.documentId,\n\t                    annotationId: annotationId,\n\t                    annotation: annotation\n\t                }).then(function (response) {\n\t                    if (annotation.type === 'point') (0, _comments.renderComments)();\n\t                    return response;\n\t                }).then(function (response) {\n\t                    return annotation;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et l'annotation n'a pas pu être enregistrée.\");\n\t                });\n\t\n\t                // return new Promise((resolve, reject) => {\n\t                //   let annotations = getAnnotations(documentId);\n\t                //   annotations[findAnnotation(documentId, annotationId)] = annotation;\n\t                //   updateAnnotations(documentId, annotations);\n\t                //\n\t                //   resolve(annotation);\n\t                // });\n\t            },\n\t            deleteAnnotation: function deleteAnnotation(documentId, annotationId) {\n\t                return API.post('/delete-annotation/', {\n\t                    annotationId: annotationId,\n\t                    fileUuid: _initFile.documentId\n\t                }).then(function (response) {\n\t                    (0, _comments.renderComments)();\n\t                    return response;\n\t                }).then(function (response) {\n\t                    return true;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et l'annotation n'a pas pu être supprimée.\");\n\t                });;\n\t\n\t                // return new Promise((resolve, reject) => {\n\t                //   let index = findAnnotation(documentId, annotationId);\n\t                //   if (index > -1) {\n\t                //     let annotations = getAnnotations(documentId);\n\t                //     annotations.splice(index, 1);\n\t                //     updateAnnotations(documentId, annotations);\n\t                //   }\n\t                //\n\t                //   resolve(true);\n\t                // });\n\t            },\n\t            getComments: function getComments(documentId) {\n\t                return API.get('/get-comments/', {\n\t                    params: {\n\t                        fileUuid: _initFile.documentId\n\t                    }\n\t                }).then(function (response) {\n\t                    return response.data;\n\t                });\n\t\n\t                // return new Promise((resolve, reject) => {\n\t                //   resolve(getAnnotations(documentId).filter((i) => {\n\t                //     return i.class === 'Comment' && i.annotation === annotationId;\n\t                //   }));\n\t                // });\n\t            },\n\t            addComment: function addComment(documentId, annotationId, content) {\n\t\n\t                return API.post('/add-comment/', {\n\t                    fileUuid: _initFile.documentId,\n\t                    annotationId: annotationId,\n\t                    content: content\n\t                }).then(function (response) {\n\t                    (0, _comments.renderComments)();\n\t                    return response;\n\t                }).then(function (response) {\n\t                    return content;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et votre commentaire n'a pas pu être enregistré.\");\n\t                });;\n\t\n\t                // return new Promise((resolve, reject) => {\n\t                //   let comment = {\n\t                //     class: 'Comment',\n\t                //     uuid: uuid(),\n\t                //     annotation: annotationId,\n\t                //     content: content\n\t                //   };\n\t                //\n\t                //\n\t                //\n\t                //   let annotations = getAnnotations(documentId);\n\t                //   annotations.push(comment);\n\t                //   updateAnnotations(documentId, annotations);\n\t                //\n\t                //   resolve(comment);\n\t                // });\n\t            },\n\t            updateComment: function updateComment(documentId, annotationId, comment) {\n\t                return API.post('/update-comment/', {\n\t                    fileUuid: _initFile.documentId,\n\t                    annotationId: annotationId,\n\t                    comment: comment\n\t                }).then(function (response) {\n\t                    (0, _comments.renderComments)();\n\t                    return response;\n\t                }).then(function (response) {\n\t                    return comment;\n\t                }).catch(function (error) {\n\t                    console.log(error);\n\t                    alert(\"Une erreur est survenue et votre commentaire n'a pas pu être enregistrée.\");\n\t                });;\n\t            }\n\t        }\n\t\n\t        // deleteComment(documentId, commentId) {\n\t        //\n\t        //     return API.post('/delete-comment/', {\n\t        //         fileUuid,\n\t        //         commentId,\n\t        //     }).then(function (response) {\n\t        //         return true;\n\t        //     });\n\t        // }\n\t        ));\n\t    }\n\t\n\t    return CRFPAStoreAdapter;\n\t}(_StoreAdapter3.default);\n\t//\n\t// function getAnnotations(documentId) {\n\t//   return JSON.parse(localStorage.getItem(`${documentId}/annotations`)) || [];\n\t// }\n\t//\n\t// function updateAnnotations(documentId, annotations) {\n\t//   localStorage.setItem(`${documentId}/annotations`, JSON.stringify(annotations));\n\t// }\n\t\n\t// function findAnnotation(documentId, annotationId) {\n\t//   let index = -1;\n\t//   let annotations = getAnnotations(documentId);\n\t//   for (let i=0, l=annotations.length; i<l; i++) {\n\t//     if (annotations[i].uuid === annotationId) {\n\t//       index = i;\n\t//       break;\n\t//     }\n\t//   }\n\t//   return index;\n\t// }\n\t\n\t\n\texports.default = CRFPAStoreAdapter;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(10);\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\tvar bind = __webpack_require__(12);\n\tvar Axios = __webpack_require__(14);\n\tvar defaults = __webpack_require__(15);\n\t\n\t/**\n\t * Create an instance of Axios\n\t *\n\t * @param {Object} defaultConfig The default config for the instance\n\t * @return {Axios} A new instance of Axios\n\t */\n\tfunction createInstance(defaultConfig) {\n\t  var context = new Axios(defaultConfig);\n\t  var instance = bind(Axios.prototype.request, context);\n\t\n\t  // Copy axios.prototype to instance\n\t  utils.extend(instance, Axios.prototype, context);\n\t\n\t  // Copy context to instance\n\t  utils.extend(instance, context);\n\t\n\t  return instance;\n\t}\n\t\n\t// Create the default instance to be exported\n\tvar axios = createInstance(defaults);\n\t\n\t// Expose Axios class to allow class inheritance\n\taxios.Axios = Axios;\n\t\n\t// Factory for creating new instances\n\taxios.create = function create(instanceConfig) {\n\t  return createInstance(utils.merge(defaults, instanceConfig));\n\t};\n\t\n\t// Expose Cancel & CancelToken\n\taxios.Cancel = __webpack_require__(33);\n\taxios.CancelToken = __webpack_require__(34);\n\taxios.isCancel = __webpack_require__(30);\n\t\n\t// Expose all/spread\n\taxios.all = function all(promises) {\n\t  return Promise.all(promises);\n\t};\n\taxios.spread = __webpack_require__(35);\n\t\n\tmodule.exports = axios;\n\t\n\t// Allow use of default import syntax in TypeScript\n\tmodule.exports.default = axios;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(12);\n\tvar isBuffer = __webpack_require__(13);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t  return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t  return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t  var result;\n\t  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t    result = ArrayBuffer.isView(val);\n\t  } else {\n\t    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t  }\n\t  return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t  return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t  return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t  return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t  return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t  return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t  return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t  return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t  return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t  return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t *  typeof window -> undefined\n\t *  typeof document -> undefined\n\t *\n\t * react-native:\n\t *  navigator.product -> 'ReactNative'\n\t */\n\tfunction isStandardBrowserEnv() {\n\t  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n\t    return false;\n\t  }\n\t  return (\n\t    typeof window !== 'undefined' &&\n\t    typeof document !== 'undefined'\n\t  );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t  // Don't bother if no value provided\n\t  if (obj === null || typeof obj === 'undefined') {\n\t    return;\n\t  }\n\t\n\t  // Force an array if not already something iterable\n\t  if (typeof obj !== 'object') {\n\t    /*eslint no-param-reassign:0*/\n\t    obj = [obj];\n\t  }\n\t\n\t  if (isArray(obj)) {\n\t    // Iterate over array values\n\t    for (var i = 0, l = obj.length; i < l; i++) {\n\t      fn.call(null, obj[i], i, obj);\n\t    }\n\t  } else {\n\t    // Iterate over object keys\n\t    for (var key in obj) {\n\t      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t        fn.call(null, obj[key], key, obj);\n\t      }\n\t    }\n\t  }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t  var result = {};\n\t  function assignValue(val, key) {\n\t    if (typeof result[key] === 'object' && typeof val === 'object') {\n\t      result[key] = merge(result[key], val);\n\t    } else {\n\t      result[key] = val;\n\t    }\n\t  }\n\t\n\t  for (var i = 0, l = arguments.length; i < l; i++) {\n\t    forEach(arguments[i], assignValue);\n\t  }\n\t  return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t  forEach(b, function assignValue(val, key) {\n\t    if (thisArg && typeof val === 'function') {\n\t      a[key] = bind(val, thisArg);\n\t    } else {\n\t      a[key] = val;\n\t    }\n\t  });\n\t  return a;\n\t}\n\t\n\tmodule.exports = {\n\t  isArray: isArray,\n\t  isArrayBuffer: isArrayBuffer,\n\t  isBuffer: isBuffer,\n\t  isFormData: isFormData,\n\t  isArrayBufferView: isArrayBufferView,\n\t  isString: isString,\n\t  isNumber: isNumber,\n\t  isObject: isObject,\n\t  isUndefined: isUndefined,\n\t  isDate: isDate,\n\t  isFile: isFile,\n\t  isBlob: isBlob,\n\t  isFunction: isFunction,\n\t  isStream: isStream,\n\t  isURLSearchParams: isURLSearchParams,\n\t  isStandardBrowserEnv: isStandardBrowserEnv,\n\t  forEach: forEach,\n\t  merge: merge,\n\t  extend: extend,\n\t  trim: trim\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function bind(fn, thisArg) {\n\t  return function wrap() {\n\t    var args = new Array(arguments.length);\n\t    for (var i = 0; i < args.length; i++) {\n\t      args[i] = arguments[i];\n\t    }\n\t    return fn.apply(thisArg, args);\n\t  };\n\t};\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * Determine if an object is a Buffer\n\t *\n\t * @author   Feross Aboukhadijeh <https://feross.org>\n\t * @license  MIT\n\t */\n\t\n\t// The _isBuffer check is for Safari 5-7 support, because it's missing\n\t// Object.prototype.constructor. Remove this eventually\n\tmodule.exports = function (obj) {\n\t  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n\t}\n\t\n\tfunction isBuffer (obj) {\n\t  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n\t}\n\t\n\t// For Node v0.10 support. Remove this eventually.\n\tfunction isSlowBuffer (obj) {\n\t  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n\t}\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar defaults = __webpack_require__(15);\n\tvar utils = __webpack_require__(11);\n\tvar InterceptorManager = __webpack_require__(27);\n\tvar dispatchRequest = __webpack_require__(28);\n\t\n\t/**\n\t * Create a new instance of Axios\n\t *\n\t * @param {Object} instanceConfig The default config for the instance\n\t */\n\tfunction Axios(instanceConfig) {\n\t  this.defaults = instanceConfig;\n\t  this.interceptors = {\n\t    request: new InterceptorManager(),\n\t    response: new InterceptorManager()\n\t  };\n\t}\n\t\n\t/**\n\t * Dispatch a request\n\t *\n\t * @param {Object} config The config specific for this request (merged with this.defaults)\n\t */\n\tAxios.prototype.request = function request(config) {\n\t  /*eslint no-param-reassign:0*/\n\t  // Allow for axios('example/url'[, config]) a la fetch API\n\t  if (typeof config === 'string') {\n\t    config = utils.merge({\n\t      url: arguments[0]\n\t    }, arguments[1]);\n\t  }\n\t\n\t  config = utils.merge(defaults, {method: 'get'}, this.defaults, config);\n\t  config.method = config.method.toLowerCase();\n\t\n\t  // Hook up interceptors middleware\n\t  var chain = [dispatchRequest, undefined];\n\t  var promise = Promise.resolve(config);\n\t\n\t  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n\t    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n\t  });\n\t\n\t  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n\t    chain.push(interceptor.fulfilled, interceptor.rejected);\n\t  });\n\t\n\t  while (chain.length) {\n\t    promise = promise.then(chain.shift(), chain.shift());\n\t  }\n\t\n\t  return promise;\n\t};\n\t\n\t// Provide aliases for supported request methods\n\tutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n\t  /*eslint func-names:0*/\n\t  Axios.prototype[method] = function(url, config) {\n\t    return this.request(utils.merge(config || {}, {\n\t      method: method,\n\t      url: url\n\t    }));\n\t  };\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t  /*eslint func-names:0*/\n\t  Axios.prototype[method] = function(url, data, config) {\n\t    return this.request(utils.merge(config || {}, {\n\t      method: method,\n\t      url: url,\n\t      data: data\n\t    }));\n\t  };\n\t});\n\t\n\tmodule.exports = Axios;\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\tvar normalizeHeaderName = __webpack_require__(17);\n\t\n\tvar DEFAULT_CONTENT_TYPE = {\n\t  'Content-Type': 'application/x-www-form-urlencoded'\n\t};\n\t\n\tfunction setContentTypeIfUnset(headers, value) {\n\t  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n\t    headers['Content-Type'] = value;\n\t  }\n\t}\n\t\n\tfunction getDefaultAdapter() {\n\t  var adapter;\n\t  if (typeof XMLHttpRequest !== 'undefined') {\n\t    // For browsers use XHR adapter\n\t    adapter = __webpack_require__(18);\n\t  } else if (typeof process !== 'undefined') {\n\t    // For node use HTTP adapter\n\t    adapter = __webpack_require__(18);\n\t  }\n\t  return adapter;\n\t}\n\t\n\tvar defaults = {\n\t  adapter: getDefaultAdapter(),\n\t\n\t  transformRequest: [function transformRequest(data, headers) {\n\t    normalizeHeaderName(headers, 'Content-Type');\n\t    if (utils.isFormData(data) ||\n\t      utils.isArrayBuffer(data) ||\n\t      utils.isBuffer(data) ||\n\t      utils.isStream(data) ||\n\t      utils.isFile(data) ||\n\t      utils.isBlob(data)\n\t    ) {\n\t      return data;\n\t    }\n\t    if (utils.isArrayBufferView(data)) {\n\t      return data.buffer;\n\t    }\n\t    if (utils.isURLSearchParams(data)) {\n\t      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n\t      return data.toString();\n\t    }\n\t    if (utils.isObject(data)) {\n\t      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n\t      return JSON.stringify(data);\n\t    }\n\t    return data;\n\t  }],\n\t\n\t  transformResponse: [function transformResponse(data) {\n\t    /*eslint no-param-reassign:0*/\n\t    if (typeof data === 'string') {\n\t      try {\n\t        data = JSON.parse(data);\n\t      } catch (e) { /* Ignore */ }\n\t    }\n\t    return data;\n\t  }],\n\t\n\t  /**\n\t   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n\t   * timeout is not created.\n\t   */\n\t  timeout: 0,\n\t\n\t  xsrfCookieName: 'XSRF-TOKEN',\n\t  xsrfHeaderName: 'X-XSRF-TOKEN',\n\t\n\t  maxContentLength: -1,\n\t\n\t  validateStatus: function validateStatus(status) {\n\t    return status >= 200 && status < 300;\n\t  }\n\t};\n\t\n\tdefaults.headers = {\n\t  common: {\n\t    'Accept': 'application/json, text/plain, */*'\n\t  }\n\t};\n\t\n\tutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n\t  defaults.headers[method] = {};\n\t});\n\t\n\tutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n\t  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n\t});\n\t\n\tmodule.exports = defaults;\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(16)))\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things.  But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals.  It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t    throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t    throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t    try {\n\t        if (typeof setTimeout === 'function') {\n\t            cachedSetTimeout = setTimeout;\n\t        } else {\n\t            cachedSetTimeout = defaultSetTimout;\n\t        }\n\t    } catch (e) {\n\t        cachedSetTimeout = defaultSetTimout;\n\t    }\n\t    try {\n\t        if (typeof clearTimeout === 'function') {\n\t            cachedClearTimeout = clearTimeout;\n\t        } else {\n\t            cachedClearTimeout = defaultClearTimeout;\n\t        }\n\t    } catch (e) {\n\t        cachedClearTimeout = defaultClearTimeout;\n\t    }\n\t} ())\n\tfunction runTimeout(fun) {\n\t    if (cachedSetTimeout === setTimeout) {\n\t        //normal enviroments in sane situations\n\t        return setTimeout(fun, 0);\n\t    }\n\t    // if setTimeout wasn't available but was latter defined\n\t    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t        cachedSetTimeout = setTimeout;\n\t        return setTimeout(fun, 0);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedSetTimeout(fun, 0);\n\t    } catch(e){\n\t        try {\n\t            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t            return cachedSetTimeout.call(null, fun, 0);\n\t        } catch(e){\n\t            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t            return cachedSetTimeout.call(this, fun, 0);\n\t        }\n\t    }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t    if (cachedClearTimeout === clearTimeout) {\n\t        //normal enviroments in sane situations\n\t        return clearTimeout(marker);\n\t    }\n\t    // if clearTimeout wasn't available but was latter defined\n\t    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t        cachedClearTimeout = clearTimeout;\n\t        return clearTimeout(marker);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedClearTimeout(marker);\n\t    } catch (e){\n\t        try {\n\t            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n\t            return cachedClearTimeout.call(null, marker);\n\t        } catch (e){\n\t            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t            return cachedClearTimeout.call(this, marker);\n\t        }\n\t    }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t    if (!draining || !currentQueue) {\n\t        return;\n\t    }\n\t    draining = false;\n\t    if (currentQueue.length) {\n\t        queue = currentQueue.concat(queue);\n\t    } else {\n\t        queueIndex = -1;\n\t    }\n\t    if (queue.length) {\n\t        drainQueue();\n\t    }\n\t}\n\t\n\tfunction drainQueue() {\n\t    if (draining) {\n\t        return;\n\t    }\n\t    var timeout = runTimeout(cleanUpNextTick);\n\t    draining = true;\n\t\n\t    var len = queue.length;\n\t    while(len) {\n\t        currentQueue = queue;\n\t        queue = [];\n\t        while (++queueIndex < len) {\n\t            if (currentQueue) {\n\t                currentQueue[queueIndex].run();\n\t            }\n\t        }\n\t        queueIndex = -1;\n\t        len = queue.length;\n\t    }\n\t    currentQueue = null;\n\t    draining = false;\n\t    runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t    var args = new Array(arguments.length - 1);\n\t    if (arguments.length > 1) {\n\t        for (var i = 1; i < arguments.length; i++) {\n\t            args[i - 1] = arguments[i];\n\t        }\n\t    }\n\t    queue.push(new Item(fun, args));\n\t    if (queue.length === 1 && !draining) {\n\t        runTimeout(drainQueue);\n\t    }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t    this.fun = fun;\n\t    this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t    this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\tprocess.prependListener = noop;\n\tprocess.prependOnceListener = noop;\n\t\n\tprocess.listeners = function (name) { return [] }\n\t\n\tprocess.binding = function (name) {\n\t    throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t    throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\tmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n\t  utils.forEach(headers, function processHeader(value, name) {\n\t    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n\t      headers[normalizedName] = value;\n\t      delete headers[name];\n\t    }\n\t  });\n\t};\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\tvar settle = __webpack_require__(19);\n\tvar buildURL = __webpack_require__(22);\n\tvar parseHeaders = __webpack_require__(23);\n\tvar isURLSameOrigin = __webpack_require__(24);\n\tvar createError = __webpack_require__(20);\n\tvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__(25);\n\t\n\tmodule.exports = function xhrAdapter(config) {\n\t  return new Promise(function dispatchXhrRequest(resolve, reject) {\n\t    var requestData = config.data;\n\t    var requestHeaders = config.headers;\n\t\n\t    if (utils.isFormData(requestData)) {\n\t      delete requestHeaders['Content-Type']; // Let the browser set it\n\t    }\n\t\n\t    var request = new XMLHttpRequest();\n\t    var loadEvent = 'onreadystatechange';\n\t    var xDomain = false;\n\t\n\t    // For IE 8/9 CORS support\n\t    // Only supports POST and GET calls and doesn't returns the response headers.\n\t    // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n\t    if (process.env.NODE_ENV !== 'test' &&\n\t        typeof window !== 'undefined' &&\n\t        window.XDomainRequest && !('withCredentials' in request) &&\n\t        !isURLSameOrigin(config.url)) {\n\t      request = new window.XDomainRequest();\n\t      loadEvent = 'onload';\n\t      xDomain = true;\n\t      request.onprogress = function handleProgress() {};\n\t      request.ontimeout = function handleTimeout() {};\n\t    }\n\t\n\t    // HTTP basic authentication\n\t    if (config.auth) {\n\t      var username = config.auth.username || '';\n\t      var password = config.auth.password || '';\n\t      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n\t    }\n\t\n\t    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\t\n\t    // Set the request timeout in MS\n\t    request.timeout = config.timeout;\n\t\n\t    // Listen for ready state\n\t    request[loadEvent] = function handleLoad() {\n\t      if (!request || (request.readyState !== 4 && !xDomain)) {\n\t        return;\n\t      }\n\t\n\t      // The request errored out and we didn't get a response, this will be\n\t      // handled by onerror instead\n\t      // With one exception: request that using file: protocol, most browsers\n\t      // will return status as 0 even though it's a successful request\n\t      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n\t        return;\n\t      }\n\t\n\t      // Prepare the response\n\t      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n\t      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n\t      var response = {\n\t        data: responseData,\n\t        // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n\t        status: request.status === 1223 ? 204 : request.status,\n\t        statusText: request.status === 1223 ? 'No Content' : request.statusText,\n\t        headers: responseHeaders,\n\t        config: config,\n\t        request: request\n\t      };\n\t\n\t      settle(resolve, reject, response);\n\t\n\t      // Clean up request\n\t      request = null;\n\t    };\n\t\n\t    // Handle low level network errors\n\t    request.onerror = function handleError() {\n\t      // Real errors are hidden from us by the browser\n\t      // onerror should only fire if it's a network error\n\t      reject(createError('Network Error', config, null, request));\n\t\n\t      // Clean up request\n\t      request = null;\n\t    };\n\t\n\t    // Handle timeout\n\t    request.ontimeout = function handleTimeout() {\n\t      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n\t        request));\n\t\n\t      // Clean up request\n\t      request = null;\n\t    };\n\t\n\t    // Add xsrf header\n\t    // This is only done if running in a standard browser environment.\n\t    // Specifically not if we're in a web worker, or react-native.\n\t    if (utils.isStandardBrowserEnv()) {\n\t      var cookies = __webpack_require__(26);\n\t\n\t      // Add xsrf header\n\t      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n\t          cookies.read(config.xsrfCookieName) :\n\t          undefined;\n\t\n\t      if (xsrfValue) {\n\t        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n\t      }\n\t    }\n\t\n\t    // Add headers to the request\n\t    if ('setRequestHeader' in request) {\n\t      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n\t        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n\t          // Remove Content-Type if data is undefined\n\t          delete requestHeaders[key];\n\t        } else {\n\t          // Otherwise add header to the request\n\t          request.setRequestHeader(key, val);\n\t        }\n\t      });\n\t    }\n\t\n\t    // Add withCredentials to request if needed\n\t    if (config.withCredentials) {\n\t      request.withCredentials = true;\n\t    }\n\t\n\t    // Add responseType to request if needed\n\t    if (config.responseType) {\n\t      try {\n\t        request.responseType = config.responseType;\n\t      } catch (e) {\n\t        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n\t        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n\t        if (config.responseType !== 'json') {\n\t          throw e;\n\t        }\n\t      }\n\t    }\n\t\n\t    // Handle progress if needed\n\t    if (typeof config.onDownloadProgress === 'function') {\n\t      request.addEventListener('progress', config.onDownloadProgress);\n\t    }\n\t\n\t    // Not all browsers support upload events\n\t    if (typeof config.onUploadProgress === 'function' && request.upload) {\n\t      request.upload.addEventListener('progress', config.onUploadProgress);\n\t    }\n\t\n\t    if (config.cancelToken) {\n\t      // Handle cancellation\n\t      config.cancelToken.promise.then(function onCanceled(cancel) {\n\t        if (!request) {\n\t          return;\n\t        }\n\t\n\t        request.abort();\n\t        reject(cancel);\n\t        // Clean up request\n\t        request = null;\n\t      });\n\t    }\n\t\n\t    if (requestData === undefined) {\n\t      requestData = null;\n\t    }\n\t\n\t    // Send the request\n\t    request.send(requestData);\n\t  });\n\t};\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(16)))\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar createError = __webpack_require__(20);\n\t\n\t/**\n\t * Resolve or reject a Promise based on response status.\n\t *\n\t * @param {Function} resolve A function that resolves the promise.\n\t * @param {Function} reject A function that rejects the promise.\n\t * @param {object} response The response.\n\t */\n\tmodule.exports = function settle(resolve, reject, response) {\n\t  var validateStatus = response.config.validateStatus;\n\t  // Note: status is not exposed by XDomainRequest\n\t  if (!response.status || !validateStatus || validateStatus(response.status)) {\n\t    resolve(response);\n\t  } else {\n\t    reject(createError(\n\t      'Request failed with status code ' + response.status,\n\t      response.config,\n\t      null,\n\t      response.request,\n\t      response\n\t    ));\n\t  }\n\t};\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar enhanceError = __webpack_require__(21);\n\t\n\t/**\n\t * Create an Error with the specified message, config, error code, request and response.\n\t *\n\t * @param {string} message The error message.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t * @param {Object} [request] The request.\n\t * @param {Object} [response] The response.\n\t * @returns {Error} The created error.\n\t */\n\tmodule.exports = function createError(message, config, code, request, response) {\n\t  var error = new Error(message);\n\t  return enhanceError(error, config, code, request, response);\n\t};\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Update an Error with the specified config, error code, and response.\n\t *\n\t * @param {Error} error The error to update.\n\t * @param {Object} config The config.\n\t * @param {string} [code] The error code (for example, 'ECONNABORTED').\n\t * @param {Object} [request] The request.\n\t * @param {Object} [response] The response.\n\t * @returns {Error} The error.\n\t */\n\tmodule.exports = function enhanceError(error, config, code, request, response) {\n\t  error.config = config;\n\t  if (code) {\n\t    error.code = code;\n\t  }\n\t  error.request = request;\n\t  error.response = response;\n\t  return error;\n\t};\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\tfunction encode(val) {\n\t  return encodeURIComponent(val).\n\t    replace(/%40/gi, '@').\n\t    replace(/%3A/gi, ':').\n\t    replace(/%24/g, '$').\n\t    replace(/%2C/gi, ',').\n\t    replace(/%20/g, '+').\n\t    replace(/%5B/gi, '[').\n\t    replace(/%5D/gi, ']');\n\t}\n\t\n\t/**\n\t * Build a URL by appending params to the end\n\t *\n\t * @param {string} url The base of the url (e.g., http://www.google.com)\n\t * @param {object} [params] The params to be appended\n\t * @returns {string} The formatted url\n\t */\n\tmodule.exports = function buildURL(url, params, paramsSerializer) {\n\t  /*eslint no-param-reassign:0*/\n\t  if (!params) {\n\t    return url;\n\t  }\n\t\n\t  var serializedParams;\n\t  if (paramsSerializer) {\n\t    serializedParams = paramsSerializer(params);\n\t  } else if (utils.isURLSearchParams(params)) {\n\t    serializedParams = params.toString();\n\t  } else {\n\t    var parts = [];\n\t\n\t    utils.forEach(params, function serialize(val, key) {\n\t      if (val === null || typeof val === 'undefined') {\n\t        return;\n\t      }\n\t\n\t      if (utils.isArray(val)) {\n\t        key = key + '[]';\n\t      } else {\n\t        val = [val];\n\t      }\n\t\n\t      utils.forEach(val, function parseValue(v) {\n\t        if (utils.isDate(v)) {\n\t          v = v.toISOString();\n\t        } else if (utils.isObject(v)) {\n\t          v = JSON.stringify(v);\n\t        }\n\t        parts.push(encode(key) + '=' + encode(v));\n\t      });\n\t    });\n\t\n\t    serializedParams = parts.join('&');\n\t  }\n\t\n\t  if (serializedParams) {\n\t    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n\t  }\n\t\n\t  return url;\n\t};\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\t// Headers whose duplicates are ignored by node\n\t// c.f. https://nodejs.org/api/http.html#http_message_headers\n\tvar ignoreDuplicateOf = [\n\t  'age', 'authorization', 'content-length', 'content-type', 'etag',\n\t  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n\t  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n\t  'referer', 'retry-after', 'user-agent'\n\t];\n\t\n\t/**\n\t * Parse headers into an object\n\t *\n\t * ```\n\t * Date: Wed, 27 Aug 2014 08:58:49 GMT\n\t * Content-Type: application/json\n\t * Connection: keep-alive\n\t * Transfer-Encoding: chunked\n\t * ```\n\t *\n\t * @param {String} headers Headers needing to be parsed\n\t * @returns {Object} Headers parsed into an object\n\t */\n\tmodule.exports = function parseHeaders(headers) {\n\t  var parsed = {};\n\t  var key;\n\t  var val;\n\t  var i;\n\t\n\t  if (!headers) { return parsed; }\n\t\n\t  utils.forEach(headers.split('\\n'), function parser(line) {\n\t    i = line.indexOf(':');\n\t    key = utils.trim(line.substr(0, i)).toLowerCase();\n\t    val = utils.trim(line.substr(i + 1));\n\t\n\t    if (key) {\n\t      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n\t        return;\n\t      }\n\t      if (key === 'set-cookie') {\n\t        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n\t      } else {\n\t        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n\t      }\n\t    }\n\t  });\n\t\n\t  return parsed;\n\t};\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\tmodule.exports = (\n\t  utils.isStandardBrowserEnv() ?\n\t\n\t  // Standard browser envs have full support of the APIs needed to test\n\t  // whether the request URL is of the same origin as current location.\n\t  (function standardBrowserEnv() {\n\t    var msie = /(msie|trident)/i.test(navigator.userAgent);\n\t    var urlParsingNode = document.createElement('a');\n\t    var originURL;\n\t\n\t    /**\n\t    * Parse a URL to discover it's components\n\t    *\n\t    * @param {String} url The URL to be parsed\n\t    * @returns {Object}\n\t    */\n\t    function resolveURL(url) {\n\t      var href = url;\n\t\n\t      if (msie) {\n\t        // IE needs attribute set twice to normalize properties\n\t        urlParsingNode.setAttribute('href', href);\n\t        href = urlParsingNode.href;\n\t      }\n\t\n\t      urlParsingNode.setAttribute('href', href);\n\t\n\t      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\t      return {\n\t        href: urlParsingNode.href,\n\t        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n\t        host: urlParsingNode.host,\n\t        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n\t        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n\t        hostname: urlParsingNode.hostname,\n\t        port: urlParsingNode.port,\n\t        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n\t                  urlParsingNode.pathname :\n\t                  '/' + urlParsingNode.pathname\n\t      };\n\t    }\n\t\n\t    originURL = resolveURL(window.location.href);\n\t\n\t    /**\n\t    * Determine if a URL shares the same origin as the current location\n\t    *\n\t    * @param {String} requestURL The URL to test\n\t    * @returns {boolean} True if URL shares the same origin, otherwise false\n\t    */\n\t    return function isURLSameOrigin(requestURL) {\n\t      var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n\t      return (parsed.protocol === originURL.protocol &&\n\t            parsed.host === originURL.host);\n\t    };\n\t  })() :\n\t\n\t  // Non standard browser envs (web workers, react-native) lack needed support.\n\t  (function nonStandardBrowserEnv() {\n\t    return function isURLSameOrigin() {\n\t      return true;\n\t    };\n\t  })()\n\t);\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\t\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t\n\tfunction E() {\n\t  this.message = 'String contains an invalid character';\n\t}\n\tE.prototype = new Error;\n\tE.prototype.code = 5;\n\tE.prototype.name = 'InvalidCharacterError';\n\t\n\tfunction btoa(input) {\n\t  var str = String(input);\n\t  var output = '';\n\t  for (\n\t    // initialize result and counter\n\t    var block, charCode, idx = 0, map = chars;\n\t    // if the next str index does not exist:\n\t    //   change the mapping table to \"=\"\n\t    //   check if d has no fractional digits\n\t    str.charAt(idx | 0) || (map = '=', idx % 1);\n\t    // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n\t    output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n\t  ) {\n\t    charCode = str.charCodeAt(idx += 3 / 4);\n\t    if (charCode > 0xFF) {\n\t      throw new E();\n\t    }\n\t    block = block << 8 | charCode;\n\t  }\n\t  return output;\n\t}\n\t\n\tmodule.exports = btoa;\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\tmodule.exports = (\n\t  utils.isStandardBrowserEnv() ?\n\t\n\t  // Standard browser envs support document.cookie\n\t  (function standardBrowserEnv() {\n\t    return {\n\t      write: function write(name, value, expires, path, domain, secure) {\n\t        var cookie = [];\n\t        cookie.push(name + '=' + encodeURIComponent(value));\n\t\n\t        if (utils.isNumber(expires)) {\n\t          cookie.push('expires=' + new Date(expires).toGMTString());\n\t        }\n\t\n\t        if (utils.isString(path)) {\n\t          cookie.push('path=' + path);\n\t        }\n\t\n\t        if (utils.isString(domain)) {\n\t          cookie.push('domain=' + domain);\n\t        }\n\t\n\t        if (secure === true) {\n\t          cookie.push('secure');\n\t        }\n\t\n\t        document.cookie = cookie.join('; ');\n\t      },\n\t\n\t      read: function read(name) {\n\t        var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n\t        return (match ? decodeURIComponent(match[3]) : null);\n\t      },\n\t\n\t      remove: function remove(name) {\n\t        this.write(name, '', Date.now() - 86400000);\n\t      }\n\t    };\n\t  })() :\n\t\n\t  // Non standard browser env (web workers, react-native) lack needed support.\n\t  (function nonStandardBrowserEnv() {\n\t    return {\n\t      write: function write() {},\n\t      read: function read() { return null; },\n\t      remove: function remove() {}\n\t    };\n\t  })()\n\t);\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\tfunction InterceptorManager() {\n\t  this.handlers = [];\n\t}\n\t\n\t/**\n\t * Add a new interceptor to the stack\n\t *\n\t * @param {Function} fulfilled The function to handle `then` for a `Promise`\n\t * @param {Function} rejected The function to handle `reject` for a `Promise`\n\t *\n\t * @return {Number} An ID used to remove interceptor later\n\t */\n\tInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n\t  this.handlers.push({\n\t    fulfilled: fulfilled,\n\t    rejected: rejected\n\t  });\n\t  return this.handlers.length - 1;\n\t};\n\t\n\t/**\n\t * Remove an interceptor from the stack\n\t *\n\t * @param {Number} id The ID that was returned by `use`\n\t */\n\tInterceptorManager.prototype.eject = function eject(id) {\n\t  if (this.handlers[id]) {\n\t    this.handlers[id] = null;\n\t  }\n\t};\n\t\n\t/**\n\t * Iterate over all the registered interceptors\n\t *\n\t * This method is particularly useful for skipping over any\n\t * interceptors that may have become `null` calling `eject`.\n\t *\n\t * @param {Function} fn The function to call for each interceptor\n\t */\n\tInterceptorManager.prototype.forEach = function forEach(fn) {\n\t  utils.forEach(this.handlers, function forEachHandler(h) {\n\t    if (h !== null) {\n\t      fn(h);\n\t    }\n\t  });\n\t};\n\t\n\tmodule.exports = InterceptorManager;\n\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\tvar transformData = __webpack_require__(29);\n\tvar isCancel = __webpack_require__(30);\n\tvar defaults = __webpack_require__(15);\n\tvar isAbsoluteURL = __webpack_require__(31);\n\tvar combineURLs = __webpack_require__(32);\n\t\n\t/**\n\t * Throws a `Cancel` if cancellation has been requested.\n\t */\n\tfunction throwIfCancellationRequested(config) {\n\t  if (config.cancelToken) {\n\t    config.cancelToken.throwIfRequested();\n\t  }\n\t}\n\t\n\t/**\n\t * Dispatch a request to the server using the configured adapter.\n\t *\n\t * @param {object} config The config that is to be used for the request\n\t * @returns {Promise} The Promise to be fulfilled\n\t */\n\tmodule.exports = function dispatchRequest(config) {\n\t  throwIfCancellationRequested(config);\n\t\n\t  // Support baseURL config\n\t  if (config.baseURL && !isAbsoluteURL(config.url)) {\n\t    config.url = combineURLs(config.baseURL, config.url);\n\t  }\n\t\n\t  // Ensure headers exist\n\t  config.headers = config.headers || {};\n\t\n\t  // Transform request data\n\t  config.data = transformData(\n\t    config.data,\n\t    config.headers,\n\t    config.transformRequest\n\t  );\n\t\n\t  // Flatten headers\n\t  config.headers = utils.merge(\n\t    config.headers.common || {},\n\t    config.headers[config.method] || {},\n\t    config.headers || {}\n\t  );\n\t\n\t  utils.forEach(\n\t    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n\t    function cleanHeaderConfig(method) {\n\t      delete config.headers[method];\n\t    }\n\t  );\n\t\n\t  var adapter = config.adapter || defaults.adapter;\n\t\n\t  return adapter(config).then(function onAdapterResolution(response) {\n\t    throwIfCancellationRequested(config);\n\t\n\t    // Transform response data\n\t    response.data = transformData(\n\t      response.data,\n\t      response.headers,\n\t      config.transformResponse\n\t    );\n\t\n\t    return response;\n\t  }, function onAdapterRejection(reason) {\n\t    if (!isCancel(reason)) {\n\t      throwIfCancellationRequested(config);\n\t\n\t      // Transform response data\n\t      if (reason && reason.response) {\n\t        reason.response.data = transformData(\n\t          reason.response.data,\n\t          reason.response.headers,\n\t          config.transformResponse\n\t        );\n\t      }\n\t    }\n\t\n\t    return Promise.reject(reason);\n\t  });\n\t};\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar utils = __webpack_require__(11);\n\t\n\t/**\n\t * Transform the data for a request or a response\n\t *\n\t * @param {Object|String} data The data to be transformed\n\t * @param {Array} headers The headers for the request or response\n\t * @param {Array|Function} fns A single function or Array of functions\n\t * @returns {*} The resulting transformed data\n\t */\n\tmodule.exports = function transformData(data, headers, fns) {\n\t  /*eslint no-param-reassign:0*/\n\t  utils.forEach(fns, function transform(fn) {\n\t    data = fn(data, headers);\n\t  });\n\t\n\t  return data;\n\t};\n\n\n/***/ },\n/* 30 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = function isCancel(value) {\n\t  return !!(value && value.__CANCEL__);\n\t};\n\n\n/***/ },\n/* 31 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Determines whether the specified URL is absolute\n\t *\n\t * @param {string} url The URL to test\n\t * @returns {boolean} True if the specified URL is absolute, otherwise false\n\t */\n\tmodule.exports = function isAbsoluteURL(url) {\n\t  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n\t  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n\t  // by any combination of letters, digits, plus, period, or hyphen.\n\t  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n\t};\n\n\n/***/ },\n/* 32 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Creates a new URL by combining the specified URLs\n\t *\n\t * @param {string} baseURL The base URL\n\t * @param {string} relativeURL The relative URL\n\t * @returns {string} The combined URL\n\t */\n\tmodule.exports = function combineURLs(baseURL, relativeURL) {\n\t  return relativeURL\n\t    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n\t    : baseURL;\n\t};\n\n\n/***/ },\n/* 33 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * A `Cancel` is an object that is thrown when an operation is canceled.\n\t *\n\t * @class\n\t * @param {string=} message The message.\n\t */\n\tfunction Cancel(message) {\n\t  this.message = message;\n\t}\n\t\n\tCancel.prototype.toString = function toString() {\n\t  return 'Cancel' + (this.message ? ': ' + this.message : '');\n\t};\n\t\n\tCancel.prototype.__CANCEL__ = true;\n\t\n\tmodule.exports = Cancel;\n\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Cancel = __webpack_require__(33);\n\t\n\t/**\n\t * A `CancelToken` is an object that can be used to request cancellation of an operation.\n\t *\n\t * @class\n\t * @param {Function} executor The executor function.\n\t */\n\tfunction CancelToken(executor) {\n\t  if (typeof executor !== 'function') {\n\t    throw new TypeError('executor must be a function.');\n\t  }\n\t\n\t  var resolvePromise;\n\t  this.promise = new Promise(function promiseExecutor(resolve) {\n\t    resolvePromise = resolve;\n\t  });\n\t\n\t  var token = this;\n\t  executor(function cancel(message) {\n\t    if (token.reason) {\n\t      // Cancellation has already been requested\n\t      return;\n\t    }\n\t\n\t    token.reason = new Cancel(message);\n\t    resolvePromise(token.reason);\n\t  });\n\t}\n\t\n\t/**\n\t * Throws a `Cancel` if cancellation has been requested.\n\t */\n\tCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n\t  if (this.reason) {\n\t    throw this.reason;\n\t  }\n\t};\n\t\n\t/**\n\t * Returns an object that contains a new `CancelToken` and a function that, when called,\n\t * cancels the `CancelToken`.\n\t */\n\tCancelToken.source = function source() {\n\t  var cancel;\n\t  var token = new CancelToken(function executor(c) {\n\t    cancel = c;\n\t  });\n\t  return {\n\t    token: token,\n\t    cancel: cancel\n\t  };\n\t};\n\t\n\tmodule.exports = CancelToken;\n\n\n/***/ },\n/* 35 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t/**\n\t * Syntactic sugar for invoking a function and expanding an array for arguments.\n\t *\n\t * Common use case would be to use `Function.prototype.apply`.\n\t *\n\t *  ```js\n\t *  function f(x, y, z) {}\n\t *  var args = [1, 2, 3];\n\t *  f.apply(null, args);\n\t *  ```\n\t *\n\t * With `spread` this example can be re-written.\n\t *\n\t *  ```js\n\t *  spread(function(x, y, z) {})([1, 2, 3]);\n\t *  ```\n\t *\n\t * @param {Function} callback\n\t * @returns {Function}\n\t */\n\tmodule.exports = function spread(callback) {\n\t  return function wrap(arr) {\n\t    return callback.apply(null, arr);\n\t  };\n\t};\n\n\n/***/ },\n/* 36 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = uuid;\n\tvar REGEXP = /[xy]/g;\n\tvar PATTERN = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n\t\n\tfunction replacement(c) {\n\t  var r = Math.random() * 16 | 0;\n\t  var v = c == 'x' ? r : r & 0x3 | 0x8;\n\t  return v.toString(16);\n\t}\n\t\n\t/**\n\t * Generate a univierally unique identifier\n\t *\n\t * @return {String}\n\t */\n\tfunction uuid() {\n\t  return PATTERN.replace(REGEXP, replacement);\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 37 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\tvar documentUrl = exports.documentUrl = document.getElementById('pdf-data').dataset.filepath;\n\tvar documentId = exports.documentId = document.getElementById('pdf-data').dataset.uuid;\n\tvar readonly = exports.readonly = document.getElementById('pdf-data').dataset.readonly === 'True';\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\texports.renderComments = renderComments;\n\texports.selectComment = selectComment;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _twitterText = __webpack_require__(39);\n\t\n\tvar _twitterText2 = _interopRequireDefault(_twitterText);\n\t\n\tvar _event = __webpack_require__(4);\n\t\n\tvar _edit = __webpack_require__(40);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tvar _initFile = __webpack_require__(37);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar commentList = $('#comment-wrapper .comment-list-container');\n\tvar commentForm = $('#comment-wrapper .comment-list-form');\n\t\n\t// let commentText = commentForm.querySelector('input[type=\"text\"]');\n\t\n\tfunction renderComments(documentId) {\n\t    _PDFJSAnnotate2.default.getStoreAdapter().getComments(documentId).then(function (comments) {\n\t\n\t        commentList.html('');\n\t        commentForm.hide();\n\t        // commentText.focus();\n\t\n\t        // commentForm.onsubmit = function () {\n\t        //     PDFJSAnnotate.getStoreAdapter().addComment(documentId, annotationId, commentText.value.trim())\n\t        //         .then(insertComment)\n\t        //         .then(() => {\n\t        //             commentText.value = '';\n\t        //             commentText.focus();\n\t        //         });\n\t        //\n\t        //     return false;\n\t        // };\n\t\n\t        comments.forEach(insertComment);\n\t    });\n\t}\n\t\n\tfunction supportsComments(target) {\n\t    var type = target.getAttribute('data-pdf-annotate-type');\n\t    return ['point', 'highlight', 'area'].indexOf(type) > -1;\n\t}\n\t\n\tfunction insertComment(comment) {\n\t    var child = $('<div></div>');\n\t    var view = $('<div class=\"view\"></div>');\n\t    child.addClass('comment-list-item');\n\t    child.attr('uuid', comment.annotation);\n\t    view.html(_twitterText2.default.autoLink(_twitterText2.default.htmlEscape(comment.content).replace(/\\n/g, '<br/>')));\n\t    view.bind('click', handleCommentClick);\n\t\n\t    if (!_initFile.readonly) {\n\t        var editBtn = $('<button>Modifier</button>');\n\t        editBtn.bind('click', handleEditClick);\n\t        view.append($('<br/>'));\n\t        view.append(editBtn);\n\t    }\n\t    child.append(view);\n\t\n\t    if (!_initFile.readonly) {\n\t        var textarea = $('<textarea></textarea>');\n\t        textarea.text(comment.content);\n\t        var textareaWrapper = $('<div class=\"edit\" style=\"display:none\">');\n\t        var saveBtn = $('<button>Enregistrer</button>');\n\t        saveBtn.bind('click', saveComment);\n\t        var cancelBtn = $('<button>Annuler</button>');\n\t        cancelBtn.bind('click', cancelCommentEdit);\n\t        textareaWrapper.append(textarea);\n\t        textareaWrapper.append(saveBtn);\n\t        textareaWrapper.append(cancelBtn);\n\t        child.append(textareaWrapper);\n\t    }\n\t    commentList.append(child);\n\t}\n\t\n\tfunction handleCommentClick(e) {\n\t    var comment = $(e.target).closest('.comment-list-item');\n\t    selectComment(comment.attr('uuid'));\n\t}\n\t\n\tfunction saveComment(e) {\n\t    e.preventDefault();\n\t    var button = $(e.target);\n\t    var comment = button.closest('.comment-list-item');\n\t    var uuid = comment.attr('uuid');\n\t    var text = comment.find('textarea').val();\n\t    var documentId = $('#pdf-data').data('uuid');\n\t    _PDFJSAnnotate2.default.getStoreAdapter().updateComment(documentId, uuid, text).then(function (comment) {\n\t        cancelCommentEdit(e);\n\t    });\n\t}\n\t\n\tfunction cancelCommentEdit(e) {\n\t    e.preventDefault();\n\t    var button = $(e.target);\n\t    var comment = button.closest('.comment-list-item');\n\t    var view = comment.find('.view');\n\t    var edit = comment.find('.edit');\n\t    edit.hide();\n\t    view.show();\n\t}\n\t\n\t// replace comment text by textarea to edit the comment\n\tfunction handleEditClick(e) {\n\t    e.preventDefault();\n\t    var button = $(e.target);\n\t    var comment = button.closest('.comment-list-item');\n\t    var view = comment.find('.view');\n\t    var edit = comment.find('.edit');\n\t    edit.show();\n\t    edit.find('textarea').width(view.width() - 10).height(view.height() + 20);\n\t    view.hide();\n\t}\n\t\n\tfunction scrollToView(element) {\n\t    var offset = element.offset().top;\n\t    if (!element.is(\":visible\")) {\n\t        element.css({ \"visibility\": \"hidden\" }).show();\n\t        var offset = element.offset().top;\n\t        element.css({ \"visibility\": \"\", \"display\": \"\" });\n\t    }\n\t\n\t    var visible_area_start = $(window).scrollTop();\n\t    var visible_area_end = visible_area_start + window.innerHeight;\n\t\n\t    if (offset < visible_area_start || offset > visible_area_end) {\n\t        // Not in view so scroll to it\n\t        if (element.hasClass('comment-list-item')) {\n\t            $('.comment-list-container').animate({ scrollTop: offset - window.innerHeight / 3 }, 300);\n\t        } else {\n\t            $('#content-wrapper').animate({ scrollTop: offset - window.innerHeight / 3 }, 300);\n\t        }\n\t        return false;\n\t    }\n\t    return true;\n\t}\n\t\n\tfunction selectComment(uuid) {\n\t    var comment = $(\".comment-list-item[uuid=\" + uuid + \"]\");\n\t    $('.comment-list-item').removeClass('selected');\n\t    comment.addClass('selected');\n\t    var annotation = $(\"[data-pdf-annotate-id=\" + uuid + \"]\")[0];\n\t    (0, _edit.createEditOverlay)(annotation);\n\t    scrollToView($(annotation));\n\t    scrollToView(comment);\n\t}\n\t\n\t// function handleAnnotationClick(target) {\n\t//   if (supportsComments(target)) {\n\t//     let documentId = target.parentNode.getAttribute('data-pdf-annotate-document');\n\t//     let annotationId = target.getAttribute('data-pdf-annotate-id');\n\t//\n\t//     PDFJSAnnotate.getStoreAdapter().getComments(documentId, annotationId).then((comments) => {\n\t//       commentList.innerHTML = '';\n\t//       commentForm.style.display = '';\n\t//       commentText.focus();\n\t//\n\t//       commentForm.onsubmit = function () {\n\t//         PDFJSAnnotate.getStoreAdapter().addComment(documentId, annotationId, commentText.value.trim())\n\t//           .then(insertComment)\n\t//           .then(() => {\n\t//             commentText.value = '';\n\t//             commentText.focus();\n\t//           });\n\t//\n\t//         return false;\n\t//       };\n\t//\n\t//       comments.forEach(insertComment);\n\t//     });\n\t//   }\n\t// }\n\t//\n\t// function handleAnnotationBlur(target) {\n\t//   if (supportsComments(target)) {\n\t//     commentList.innerHTML = '';\n\t//     commentForm.style.display = 'none';\n\t//     commentForm.onsubmit = null;\n\t//\n\t//     insertComment({content: 'No comments'});\n\t//   }\n\t// }\n\t\n\t\n\t// UI.addEventListener('annotation:click', handleAnnotationClick);\n\t// UI.addEventListener('annotation:blur', handleAnnotationBlur);\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function() {\n\t  if (typeof twttr === \"undefined\" || twttr === null) {\n\t    var twttr = {};\n\t  }\n\t\n\t  twttr.txt = {};\n\t  twttr.txt.regexen = {};\n\t\n\t  var HTML_ENTITIES = {\n\t    '&': '&amp;',\n\t    '>': '&gt;',\n\t    '<': '&lt;',\n\t    '\"': '&quot;',\n\t    \"'\": '&#39;'\n\t  };\n\t\n\t  // HTML escaping\n\t  twttr.txt.htmlEscape = function(text) {\n\t    return text && text.replace(/[&\"'><]/g, function(character) {\n\t      return HTML_ENTITIES[character];\n\t    });\n\t  };\n\t\n\t  // Builds a RegExp\n\t  function regexSupplant(regex, flags) {\n\t    flags = flags || \"\";\n\t    if (typeof regex !== \"string\") {\n\t      if (regex.global && flags.indexOf(\"g\") < 0) {\n\t        flags += \"g\";\n\t      }\n\t      if (regex.ignoreCase && flags.indexOf(\"i\") < 0) {\n\t        flags += \"i\";\n\t      }\n\t      if (regex.multiline && flags.indexOf(\"m\") < 0) {\n\t        flags += \"m\";\n\t      }\n\t\n\t      regex = regex.source;\n\t    }\n\t\n\t    return new RegExp(regex.replace(/#\\{(\\w+)\\}/g, function(match, name) {\n\t      var newRegex = twttr.txt.regexen[name] || \"\";\n\t      if (typeof newRegex !== \"string\") {\n\t        newRegex = newRegex.source;\n\t      }\n\t      return newRegex;\n\t    }), flags);\n\t  }\n\t\n\t  twttr.txt.regexSupplant = regexSupplant;\n\t\n\t  // simple string interpolation\n\t  function stringSupplant(str, values) {\n\t    return str.replace(/#\\{(\\w+)\\}/g, function(match, name) {\n\t      return values[name] || \"\";\n\t    });\n\t  }\n\t\n\t  twttr.txt.stringSupplant = stringSupplant;\n\t\n\t  twttr.txt.regexen.spaces_group = /\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000/;\n\t  twttr.txt.regexen.spaces = regexSupplant(/[#{spaces_group}]/);\n\t  twttr.txt.regexen.invalid_chars_group = /\\uFFFE\\uFEFF\\uFFFF\\u202A-\\u202E/;\n\t  twttr.txt.regexen.invalid_chars = regexSupplant(/[#{invalid_chars_group}]/);\n\t  twttr.txt.regexen.punct = /\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$/;\n\t  twttr.txt.regexen.rtl_chars = /[\\u0600-\\u06FF]|[\\u0750-\\u077F]|[\\u0590-\\u05FF]|[\\uFE70-\\uFEFF]/mg;\n\t  twttr.txt.regexen.non_bmp_code_pairs = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/mg;\n\t\n\t  twttr.txt.regexen.latinAccentChars = /\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF/;\n\t\n\t  // Generated from unicode_regex/unicode_regex_groups.scala, same as objective c's \\p{L}\\p{M}\n\t  twttr.txt.regexen.bmpLetterAndMarks = /A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07ca-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0-\\u08b2\\u08e4-\\u0963\\u0971-\\u0983\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc\\u09dd\\u09df-\\u09e3\\u09f0\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a70-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5c\\u0b5d\\u0b5f-\\u0b63\\u0b71\\u0b82\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0c00-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c58\\u0c59\\u0c60-\\u0c63\\u0c81-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0cf1\\u0cf2\\u0d01-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d7a-\\u0d7f\\u0d82\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0edc-\\u0edf\\u0f00\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u103f\\u1050-\\u108f\\u109a-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16f1-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772\\u1773\\u1780-\\u17d3\\u17d7\\u17dc\\u17dd\\u180b-\\u180d\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1aa7\\u1ab0-\\u1abe\\u1b00-\\u1b4b\\u1b6b-\\u1b73\\u1b80-\\u1baf\\u1bba-\\u1bf3\\u1c00-\\u1c37\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1cf8\\u1cf9\\u1d00-\\u1df5\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2183\\u2184\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005\\u3006\\u302a-\\u302f\\u3031-\\u3035\\u303b\\u303c\\u3041-\\u3096\\u3099\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua672\\ua674-\\ua67d\\ua67f-\\ua69d\\ua69f-\\ua6e5\\ua6f0\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0\\ua7b1\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8e0-\\ua8f7\\ua8fb\\ua90a-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf\\ua9e0-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64\\uab65\\uabc0-\\uabea\\uabec\\uabed\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf870-\\uf87f\\uf882\\uf884-\\uf89f\\uf8b8\\uf8c1-\\uf8d6\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2d\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc/;\n\t  twttr.txt.regexen.astralLetterAndMarks = /\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\uddfd\\ude80-\\ude9c\\udea0-\\uded0\\udee0\\udf00-\\udf1f\\udf30-\\udf40\\udf42-\\udf49\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf]|\\ud801[\\udc00-\\udc9d\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe\\uddbf\\ude00-\\ude03\\ude05\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude33\\ude38-\\ude3a\\ude3f\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee6\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48]|\\ud804[\\udc00-\\udc46\\udc7f-\\udcba\\udcd0-\\udce8\\udd00-\\udd34\\udd50-\\udd73\\udd76\\udd80-\\uddc4\\uddda\\ude00-\\ude11\\ude13-\\ude37\\udeb0-\\udeea\\udf01-\\udf03\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3c-\\udf44\\udf47\\udf48\\udf4b-\\udf4d\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc80-\\udcc5\\udcc7\\udd80-\\uddb5\\uddb8-\\uddc0\\ude00-\\ude40\\ude44\\ude80-\\udeb7]|\\ud806[\\udca0-\\udcdf\\udcff\\udec0-\\udef8]|\\ud808[\\udc00-\\udf98]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udef0-\\udef4\\udf00-\\udf36\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\udf00-\\udf44\\udf50-\\udf7e\\udf8f-\\udf9f]|\\ud82c[\\udc00\\udc01]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9d\\udc9e]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud83a[\\udc00-\\udcc4\\udcd0-\\udcd6]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d]|\\ud87e[\\udc00-\\ude1d]|\\udb40[\\udd00-\\uddef]/;\n\t\n\t  // Generated from unicode_regex/unicode_regex_groups.scala, same as objective c's \\p{Nd}\n\t  twttr.txt.regexen.bmpNumerals = /0-9\\u0660-\\u0669\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0de6-\\u0def\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\ua9f0-\\ua9f9\\uaa50-\\uaa59\\uabf0-\\uabf9\\uff10-\\uff19/;\n\t  twttr.txt.regexen.astralNumerals = /\\ud801[\\udca0-\\udca9]|\\ud804[\\udc66-\\udc6f\\udcf0-\\udcf9\\udd36-\\udd3f\\uddd0-\\uddd9\\udef0-\\udef9]|\\ud805[\\udcd0-\\udcd9\\ude50-\\ude59\\udec0-\\udec9]|\\ud806[\\udce0-\\udce9]|\\ud81a[\\ude60-\\ude69\\udf50-\\udf59]|\\ud835[\\udfce-\\udfff]/;\n\t\n\t  twttr.txt.regexen.hashtagSpecialChars = /_\\u200c\\u200d\\ua67e\\u05be\\u05f3\\u05f4\\uff5e\\u301c\\u309b\\u309c\\u30a0\\u30fb\\u3003\\u0f0b\\u0f0c\\xb7/;\n\t\n\t  // A hashtag must contain at least one unicode letter or mark, as well as numbers, underscores, and select special characters.\n\t  twttr.txt.regexen.hashSigns = /[##]/;\n\t  twttr.txt.regexen.hashtagAlpha = regexSupplant(/(?:[#{bmpLetterAndMarks}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}))/);\n\t  twttr.txt.regexen.hashtagAlphaNumeric = regexSupplant(/(?:[#{bmpLetterAndMarks}#{bmpNumerals}#{hashtagSpecialChars}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}|#{astralNumerals}))/);\n\t  twttr.txt.regexen.endHashtagMatch = regexSupplant(/^(?:#{hashSigns}|:\\/\\/)/);\n\t  twttr.txt.regexen.codePoint = /(?:[^\\uD800-\\uDFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/;\n\t  twttr.txt.regexen.hashtagBoundary = regexSupplant(/(?:^|\\uFE0E|\\uFE0F|$|(?!#{hashtagAlphaNumeric}|&)#{codePoint})/);\n\t  twttr.txt.regexen.validHashtag = regexSupplant(/(#{hashtagBoundary})(#{hashSigns})(?!\\uFE0F|\\u20E3)(#{hashtagAlphaNumeric}*#{hashtagAlpha}#{hashtagAlphaNumeric}*)/gi);\n\t\n\t  // Mention related regex collection\n\t  twttr.txt.regexen.validMentionPrecedingChars = /(?:^|[^a-zA-Z0-9_!#$%&*@@]|(?:^|[^a-zA-Z0-9_+~.-])(?:rt|RT|rT|Rt):?)/;\n\t  twttr.txt.regexen.atSigns = /[@@]/;\n\t  twttr.txt.regexen.validMentionOrList = regexSupplant(\n\t    '(#{validMentionPrecedingChars})' +  // $1: Preceding character\n\t    '(#{atSigns})' +                     // $2: At mark\n\t    '([a-zA-Z0-9_]{1,20})' +             // $3: Screen name\n\t    '(\\/[a-zA-Z][a-zA-Z0-9_\\-]{0,24})?'  // $4: List (optional)\n\t  , 'g');\n\t  twttr.txt.regexen.validReply = regexSupplant(/^(?:#{spaces})*#{atSigns}([a-zA-Z0-9_]{1,20})/);\n\t  twttr.txt.regexen.endMentionMatch = regexSupplant(/^(?:#{atSigns}|[#{latinAccentChars}]|:\\/\\/)/);\n\t\n\t  // URL related regex collection\n\t  twttr.txt.regexen.validUrlPrecedingChars = regexSupplant(/(?:[^A-Za-z0-9@@$###{invalid_chars_group}]|^)/);\n\t  twttr.txt.regexen.invalidUrlWithoutProtocolPrecedingChars = /[-_.\\/]$/;\n\t  twttr.txt.regexen.invalidDomainChars = stringSupplant(\"#{punct}#{spaces_group}#{invalid_chars_group}\", twttr.txt.regexen);\n\t  twttr.txt.regexen.validDomainChars = regexSupplant(/[^#{invalidDomainChars}]/);\n\t  twttr.txt.regexen.validSubdomain = regexSupplant(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\\.)/);\n\t  twttr.txt.regexen.validDomainName = regexSupplant(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\\.)/);\n\t  twttr.txt.regexen.validGTLD = regexSupplant(RegExp(\n\t'(?:(?:' +\n\t    '삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|' +\n\t    '政务|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|' +\n\t    'ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|' +\n\t    'بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|' +\n\t    'zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|' +\n\t    'yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|' +\n\t    'wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|' +\n\t    'website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|' +\n\t    'wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|' +\n\t    'vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|' +\n\t    'vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|' +\n\t    'university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|' +\n\t    'travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|' +\n\t    'toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|' +\n\t    'tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|' +\n\t    'tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|' +\n\t    'swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|' +\n\t    'stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|' +\n\t    'stada|srt|srl|spreadbetting|spot|spiegel|space|soy|sony|song|solutions|solar|sohu|software|' +\n\t    'softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|' +\n\t    'showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|' +\n\t    'sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|' +\n\t    'science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|' +\n\t    'sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|' +\n\t    'saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|' +\n\t    'rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|' +\n\t    'repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|' +\n\t    'realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|' +\n\t    'protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|' +\n\t    'pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|' +\n\t    'pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|' +\n\t    'pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|' +\n\t    'pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|' +\n\t    'onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|' +\n\t    'obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|' +\n\t    'nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|' +\n\t    'net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|' +\n\t    'msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|' +\n\t    'monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|' +\n\t    'miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|' +\n\t    'mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|' +\n\t    'makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|' +\n\t    'lotte|london|lol|loft|locus|locker|loans|loan|lixil|living|live|lipsy|link|linde|lincoln|limo|' +\n\t    'limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|' +\n\t    'lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|' +\n\t    'lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|' +\n\t    'komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|' +\n\t    'kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|' +\n\t    'jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|' +\n\t    'investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|' +\n\t    'industries|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|' +\n\t    'hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|' +\n\t    'honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|' +\n\t    'hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|' +\n\t    'hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|' +\n\t    'gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|' +\n\t    'globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|' +\n\t    'garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|' +\n\t    'ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|' +\n\t    'football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|' +\n\t    'fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|' +\n\t    'ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|' +\n\t    'extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|' +\n\t    'estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|' +\n\t    'email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|' +\n\t    'download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|' +\n\t    'direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|' +\n\t    'delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|' +\n\t    'cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|courses|' +\n\t    'coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|' +\n\t    'construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|' +\n\t    'college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|' +\n\t    'cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|' +\n\t    'chintai|cheap|chat|chase|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|' +\n\t    'catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|' +\n\t    'capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|' +\n\t    'bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|' +\n\t    'bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|' +\n\t    'boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|' +\n\t    'black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|' +\n\t    'beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|' +\n\t    'barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|' +\n\t    'autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|' +\n\t    'art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|' +\n\t    'amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|' +\n\t    'alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|' +\n\t    'afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|' +\n\t    'academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion' +\n\t')(?=[^0-9a-zA-Z@]|$))'));\n\t  twttr.txt.regexen.validCCTLD = regexSupplant(RegExp(\n\t'(?:(?:' +\n\t    '한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|' +\n\t    'ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|' +\n\t    'بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ελ|' +\n\t    'zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|' +\n\t    'tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|' +\n\t    're|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|' +\n\t    'mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|' +\n\t    'ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|' +\n\t    'gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|' +\n\t    'do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|' +\n\t    'bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac' +\n\t')(?=[^0-9a-zA-Z@]|$))'));\n\t  twttr.txt.regexen.validPunycode = /(?:xn--[0-9a-z]+)/;\n\t  twttr.txt.regexen.validSpecialCCTLD = /(?:(?:co|tv)(?=[^0-9a-zA-Z@]|$))/;\n\t  twttr.txt.regexen.validDomain = regexSupplant(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/);\n\t  twttr.txt.regexen.validAsciiDomain = regexSupplant(/(?:(?:[\\-a-z0-9#{latinAccentChars}]+)\\.)+(?:#{validGTLD}|#{validCCTLD}|#{validPunycode})/gi);\n\t  twttr.txt.regexen.invalidShortDomain = regexSupplant(/^#{validDomainName}#{validCCTLD}$/i);\n\t  twttr.txt.regexen.validSpecialShortDomain = regexSupplant(/^#{validDomainName}#{validSpecialCCTLD}$/i);\n\t  twttr.txt.regexen.validPortNumber = /[0-9]+/;\n\t  twttr.txt.regexen.cyrillicLettersAndMarks = /\\u0400-\\u04FF/;\n\t  twttr.txt.regexen.validGeneralUrlPathChars = regexSupplant(/[a-z#{cyrillicLettersAndMarks}0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-_~@\\|&#{latinAccentChars}]/i);\n\t  // Allow URL paths to contain up to two nested levels of balanced parens\n\t  //  1. Used in Wikipedia URLs like /Primer_(film)\n\t  //  2. Used in IIS sessions like /S(dfd346)/\n\t  //  3. Used in Rdio URLs like /track/We_Up_(Album_Version_(Edited))/\n\t  twttr.txt.regexen.validUrlBalancedParens = regexSupplant(\n\t    '\\\\('                                   +\n\t      '(?:'                                 +\n\t        '#{validGeneralUrlPathChars}+'      +\n\t        '|'                                 +\n\t        // allow one nested level of balanced parentheses\n\t        '(?:'                               +\n\t          '#{validGeneralUrlPathChars}*'    +\n\t          '\\\\('                             +\n\t            '#{validGeneralUrlPathChars}+'  +\n\t          '\\\\)'                             +\n\t          '#{validGeneralUrlPathChars}*'    +\n\t        ')'                                 +\n\t      ')'                                   +\n\t    '\\\\)'\n\t  , 'i');\n\t  // Valid end-of-path chracters (so /foo. does not gobble the period).\n\t  // 1. Allow =&# for empty URL parameters and other URL-join artifacts\n\t  twttr.txt.regexen.validUrlPathEndingChars = regexSupplant(/[\\+\\-a-z#{cyrillicLettersAndMarks}0-9=_#\\/#{latinAccentChars}]|(?:#{validUrlBalancedParens})/i);\n\t  // Allow @ in a url, but only in the middle. Catch things like http://example.com/@user/\n\t  twttr.txt.regexen.validUrlPath = regexSupplant('(?:' +\n\t    '(?:' +\n\t      '#{validGeneralUrlPathChars}*' +\n\t        '(?:#{validUrlBalancedParens}#{validGeneralUrlPathChars}*)*' +\n\t        '#{validUrlPathEndingChars}'+\n\t      ')|(?:@#{validGeneralUrlPathChars}+\\/)'+\n\t    ')', 'i');\n\t\n\t  twttr.txt.regexen.validUrlQueryChars = /[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]/i;\n\t  twttr.txt.regexen.validUrlQueryEndingChars = /[a-z0-9_&=#\\/]/i;\n\t  twttr.txt.regexen.extractUrl = regexSupplant(\n\t    '('                                                            + // $1 total match\n\t      '(#{validUrlPrecedingChars})'                                + // $2 Preceeding chracter\n\t      '('                                                          + // $3 URL\n\t        '(https?:\\\\/\\\\/)?'                                         + // $4 Protocol (optional)\n\t        '(#{validDomain})'                                         + // $5 Domain(s)\n\t        '(?::(#{validPortNumber}))?'                               + // $6 Port number (optional)\n\t        '(\\\\/#{validUrlPath}*)?'                                   + // $7 URL Path\n\t        '(\\\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?'  + // $8 Query String\n\t      ')'                                                          +\n\t    ')'\n\t  , 'gi');\n\t\n\t  twttr.txt.regexen.validTcoUrl = /^https?:\\/\\/t\\.co\\/[a-z0-9]+/i;\n\t  twttr.txt.regexen.urlHasProtocol = /^https?:\\/\\//i;\n\t  twttr.txt.regexen.urlHasHttps = /^https:\\/\\//i;\n\t\n\t  // cashtag related regex\n\t  twttr.txt.regexen.cashtag = /[a-z]{1,6}(?:[._][a-z]{1,2})?/i;\n\t  twttr.txt.regexen.validCashtag = regexSupplant('(^|#{spaces})(\\\\$)(#{cashtag})(?=$|\\\\s|[#{punct}])', 'gi');\n\t\n\t  // These URL validation pattern strings are based on the ABNF from RFC 3986\n\t  twttr.txt.regexen.validateUrlUnreserved = /[a-z\\u0400-\\u04FF0-9\\-._~]/i;\n\t  twttr.txt.regexen.validateUrlPctEncoded = /(?:%[0-9a-f]{2})/i;\n\t  twttr.txt.regexen.validateUrlSubDelims = /[!$&'()*+,;=]/i;\n\t  twttr.txt.regexen.validateUrlPchar = regexSupplant('(?:' +\n\t    '#{validateUrlUnreserved}|' +\n\t    '#{validateUrlPctEncoded}|' +\n\t    '#{validateUrlSubDelims}|' +\n\t    '[:|@]' +\n\t  ')', 'i');\n\t\n\t  twttr.txt.regexen.validateUrlScheme = /(?:[a-z][a-z0-9+\\-.]*)/i;\n\t  twttr.txt.regexen.validateUrlUserinfo = regexSupplant('(?:' +\n\t    '#{validateUrlUnreserved}|' +\n\t    '#{validateUrlPctEncoded}|' +\n\t    '#{validateUrlSubDelims}|' +\n\t    ':' +\n\t  ')*', 'i');\n\t\n\t  twttr.txt.regexen.validateUrlDecOctet = /(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))/i;\n\t  twttr.txt.regexen.validateUrlIpv4 = regexSupplant(/(?:#{validateUrlDecOctet}(?:\\.#{validateUrlDecOctet}){3})/i);\n\t\n\t  // Punting on real IPv6 validation for now\n\t  twttr.txt.regexen.validateUrlIpv6 = /(?:\\[[a-f0-9:\\.]+\\])/i;\n\t\n\t  // Also punting on IPvFuture for now\n\t  twttr.txt.regexen.validateUrlIp = regexSupplant('(?:' +\n\t    '#{validateUrlIpv4}|' +\n\t    '#{validateUrlIpv6}' +\n\t  ')', 'i');\n\t\n\t  // This is more strict than the rfc specifies\n\t  twttr.txt.regexen.validateUrlSubDomainSegment = /(?:[a-z0-9](?:[a-z0-9_\\-]*[a-z0-9])?)/i;\n\t  twttr.txt.regexen.validateUrlDomainSegment = /(?:[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?)/i;\n\t  twttr.txt.regexen.validateUrlDomainTld = /(?:[a-z](?:[a-z0-9\\-]*[a-z0-9])?)/i;\n\t  twttr.txt.regexen.validateUrlDomain = regexSupplant(/(?:(?:#{validateUrlSubDomainSegment}\\.)*(?:#{validateUrlDomainSegment}\\.)#{validateUrlDomainTld})/i);\n\t\n\t  twttr.txt.regexen.validateUrlHost = regexSupplant('(?:' +\n\t    '#{validateUrlIp}|' +\n\t    '#{validateUrlDomain}' +\n\t  ')', 'i');\n\t\n\t  // Unencoded internationalized domains - this doesn't check for invalid UTF-8 sequences\n\t  twttr.txt.regexen.validateUrlUnicodeSubDomainSegment = /(?:(?:[a-z0-9]|[^\\u0000-\\u007f])(?:(?:[a-z0-9_\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n\t  twttr.txt.regexen.validateUrlUnicodeDomainSegment = /(?:(?:[a-z0-9]|[^\\u0000-\\u007f])(?:(?:[a-z0-9\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n\t  twttr.txt.regexen.validateUrlUnicodeDomainTld = /(?:(?:[a-z]|[^\\u0000-\\u007f])(?:(?:[a-z0-9\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n\t  twttr.txt.regexen.validateUrlUnicodeDomain = regexSupplant(/(?:(?:#{validateUrlUnicodeSubDomainSegment}\\.)*(?:#{validateUrlUnicodeDomainSegment}\\.)#{validateUrlUnicodeDomainTld})/i);\n\t\n\t  twttr.txt.regexen.validateUrlUnicodeHost = regexSupplant('(?:' +\n\t    '#{validateUrlIp}|' +\n\t    '#{validateUrlUnicodeDomain}' +\n\t  ')', 'i');\n\t\n\t  twttr.txt.regexen.validateUrlPort = /[0-9]{1,5}/;\n\t\n\t  twttr.txt.regexen.validateUrlUnicodeAuthority = regexSupplant(\n\t    '(?:(#{validateUrlUserinfo})@)?'  + // $1 userinfo\n\t    '(#{validateUrlUnicodeHost})'     + // $2 host\n\t    '(?::(#{validateUrlPort}))?'        //$3 port\n\t  , \"i\");\n\t\n\t  twttr.txt.regexen.validateUrlAuthority = regexSupplant(\n\t    '(?:(#{validateUrlUserinfo})@)?' + // $1 userinfo\n\t    '(#{validateUrlHost})'           + // $2 host\n\t    '(?::(#{validateUrlPort}))?'       // $3 port\n\t  , \"i\");\n\t\n\t  twttr.txt.regexen.validateUrlPath = regexSupplant(/(\\/#{validateUrlPchar}*)*/i);\n\t  twttr.txt.regexen.validateUrlQuery = regexSupplant(/(#{validateUrlPchar}|\\/|\\?)*/i);\n\t  twttr.txt.regexen.validateUrlFragment = regexSupplant(/(#{validateUrlPchar}|\\/|\\?)*/i);\n\t\n\t  // Modified version of RFC 3986 Appendix B\n\t  twttr.txt.regexen.validateUrlUnencoded = regexSupplant(\n\t    '^'                               + // Full URL\n\t    '(?:'                             +\n\t      '([^:/?#]+):\\\\/\\\\/'             + // $1 Scheme\n\t    ')?'                              +\n\t    '([^/?#]*)'                       + // $2 Authority\n\t    '([^?#]*)'                        + // $3 Path\n\t    '(?:'                             +\n\t      '\\\\?([^#]*)'                    + // $4 Query\n\t    ')?'                              +\n\t    '(?:'                             +\n\t      '#(.*)'                         + // $5 Fragment\n\t    ')?$'\n\t  , \"i\");\n\t\n\t\n\t  // Default CSS class for auto-linked lists (along with the url class)\n\t  var DEFAULT_LIST_CLASS = \"tweet-url list-slug\";\n\t  // Default CSS class for auto-linked usernames (along with the url class)\n\t  var DEFAULT_USERNAME_CLASS = \"tweet-url username\";\n\t  // Default CSS class for auto-linked hashtags (along with the url class)\n\t  var DEFAULT_HASHTAG_CLASS = \"tweet-url hashtag\";\n\t  // Default CSS class for auto-linked cashtags (along with the url class)\n\t  var DEFAULT_CASHTAG_CLASS = \"tweet-url cashtag\";\n\t  // Options which should not be passed as HTML attributes\n\t  var OPTIONS_NOT_ATTRIBUTES = {'urlClass':true, 'listClass':true, 'usernameClass':true, 'hashtagClass':true, 'cashtagClass':true,\n\t                            'usernameUrlBase':true, 'listUrlBase':true, 'hashtagUrlBase':true, 'cashtagUrlBase':true,\n\t                            'usernameUrlBlock':true, 'listUrlBlock':true, 'hashtagUrlBlock':true, 'linkUrlBlock':true,\n\t                            'usernameIncludeSymbol':true, 'suppressLists':true, 'suppressNoFollow':true, 'targetBlank':true,\n\t                            'suppressDataScreenName':true, 'urlEntities':true, 'symbolTag':true, 'textWithSymbolTag':true, 'urlTarget':true,\n\t                            'invisibleTagAttrs':true, 'linkAttributeBlock':true, 'linkTextBlock': true, 'htmlEscapeNonEntities': true\n\t                            };\n\t\n\t  var BOOLEAN_ATTRIBUTES = {'disabled':true, 'readonly':true, 'multiple':true, 'checked':true};\n\t\n\t  // Simple object cloning function for simple objects\n\t  function clone(o) {\n\t    var r = {};\n\t    for (var k in o) {\n\t      if (o.hasOwnProperty(k)) {\n\t        r[k] = o[k];\n\t      }\n\t    }\n\t\n\t    return r;\n\t  }\n\t\n\t  twttr.txt.tagAttrs = function(attributes) {\n\t    var htmlAttrs = \"\";\n\t    for (var k in attributes) {\n\t      var v = attributes[k];\n\t      if (BOOLEAN_ATTRIBUTES[k]) {\n\t        v = v ? k : null;\n\t      }\n\t      if (v == null) continue;\n\t      htmlAttrs += \" \" + twttr.txt.htmlEscape(k) + \"=\\\"\" + twttr.txt.htmlEscape(v.toString()) + \"\\\"\";\n\t    }\n\t    return htmlAttrs;\n\t  };\n\t\n\t  twttr.txt.linkToText = function(entity, text, attributes, options) {\n\t    if (!options.suppressNoFollow) {\n\t      attributes.rel = \"nofollow\";\n\t    }\n\t    // if linkAttributeBlock is specified, call it to modify the attributes\n\t    if (options.linkAttributeBlock) {\n\t      options.linkAttributeBlock(entity, attributes);\n\t    }\n\t    // if linkTextBlock is specified, call it to get a new/modified link text\n\t    if (options.linkTextBlock) {\n\t      text = options.linkTextBlock(entity, text);\n\t    }\n\t    var d = {\n\t      text: text,\n\t      attr: twttr.txt.tagAttrs(attributes)\n\t    };\n\t    return stringSupplant(\"<a#{attr}>#{text}</a>\", d);\n\t  };\n\t\n\t  twttr.txt.linkToTextWithSymbol = function(entity, symbol, text, attributes, options) {\n\t    var taggedSymbol = options.symbolTag ? \"<\" + options.symbolTag + \">\" + symbol + \"</\"+ options.symbolTag + \">\" : symbol;\n\t    text = twttr.txt.htmlEscape(text);\n\t    var taggedText = options.textWithSymbolTag ? \"<\" + options.textWithSymbolTag + \">\" + text + \"</\"+ options.textWithSymbolTag + \">\" : text;\n\t\n\t    if (options.usernameIncludeSymbol || !symbol.match(twttr.txt.regexen.atSigns)) {\n\t      return twttr.txt.linkToText(entity, taggedSymbol + taggedText, attributes, options);\n\t    } else {\n\t      return taggedSymbol + twttr.txt.linkToText(entity, taggedText, attributes, options);\n\t    }\n\t  };\n\t\n\t  twttr.txt.linkToHashtag = function(entity, text, options) {\n\t    var hash = text.substring(entity.indices[0], entity.indices[0] + 1);\n\t    var hashtag = twttr.txt.htmlEscape(entity.hashtag);\n\t    var attrs = clone(options.htmlAttrs || {});\n\t    attrs.href = options.hashtagUrlBase + hashtag;\n\t    attrs.title = \"#\" + hashtag;\n\t    attrs[\"class\"] = options.hashtagClass;\n\t    if (hashtag.charAt(0).match(twttr.txt.regexen.rtl_chars)){\n\t      attrs[\"class\"] += \" rtl\";\n\t    }\n\t    if (options.targetBlank) {\n\t      attrs.target = '_blank';\n\t    }\n\t\n\t    return twttr.txt.linkToTextWithSymbol(entity, hash, hashtag, attrs, options);\n\t  };\n\t\n\t  twttr.txt.linkToCashtag = function(entity, text, options) {\n\t    var cashtag = twttr.txt.htmlEscape(entity.cashtag);\n\t    var attrs = clone(options.htmlAttrs || {});\n\t    attrs.href = options.cashtagUrlBase + cashtag;\n\t    attrs.title = \"$\" + cashtag;\n\t    attrs[\"class\"] =  options.cashtagClass;\n\t    if (options.targetBlank) {\n\t      attrs.target = '_blank';\n\t    }\n\t\n\t    return twttr.txt.linkToTextWithSymbol(entity, \"$\", cashtag, attrs, options);\n\t  };\n\t\n\t  twttr.txt.linkToMentionAndList = function(entity, text, options) {\n\t    var at = text.substring(entity.indices[0], entity.indices[0] + 1);\n\t    var user = twttr.txt.htmlEscape(entity.screenName);\n\t    var slashListname = twttr.txt.htmlEscape(entity.listSlug);\n\t    var isList = entity.listSlug && !options.suppressLists;\n\t    var attrs = clone(options.htmlAttrs || {});\n\t    attrs[\"class\"] = (isList ? options.listClass : options.usernameClass);\n\t    attrs.href = isList ? options.listUrlBase + user + slashListname : options.usernameUrlBase + user;\n\t    if (!isList && !options.suppressDataScreenName) {\n\t      attrs['data-screen-name'] = user;\n\t    }\n\t    if (options.targetBlank) {\n\t      attrs.target = '_blank';\n\t    }\n\t\n\t    return twttr.txt.linkToTextWithSymbol(entity, at, isList ? user + slashListname : user, attrs, options);\n\t  };\n\t\n\t  twttr.txt.linkToUrl = function(entity, text, options) {\n\t    var url = entity.url;\n\t    var displayUrl = url;\n\t    var linkText = twttr.txt.htmlEscape(displayUrl);\n\t\n\t    // If the caller passed a urlEntities object (provided by a Twitter API\n\t    // response with include_entities=true), we use that to render the display_url\n\t    // for each URL instead of it's underlying t.co URL.\n\t    var urlEntity = (options.urlEntities && options.urlEntities[url]) || entity;\n\t    if (urlEntity.display_url) {\n\t      linkText = twttr.txt.linkTextWithEntity(urlEntity, options);\n\t    }\n\t\n\t    var attrs = clone(options.htmlAttrs || {});\n\t\n\t    if (!url.match(twttr.txt.regexen.urlHasProtocol)) {\n\t      url = \"http://\" + url;\n\t    }\n\t    attrs.href = url;\n\t\n\t    if (options.targetBlank) {\n\t      attrs.target = '_blank';\n\t    }\n\t\n\t    // set class only if urlClass is specified.\n\t    if (options.urlClass) {\n\t      attrs[\"class\"] = options.urlClass;\n\t    }\n\t\n\t    // set target only if urlTarget is specified.\n\t    if (options.urlTarget) {\n\t      attrs.target = options.urlTarget;\n\t    }\n\t\n\t    if (!options.title && urlEntity.display_url) {\n\t      attrs.title = urlEntity.expanded_url;\n\t    }\n\t\n\t    return twttr.txt.linkToText(entity, linkText, attrs, options);\n\t  };\n\t\n\t  twttr.txt.linkTextWithEntity = function (entity, options) {\n\t    var displayUrl = entity.display_url;\n\t    var expandedUrl = entity.expanded_url;\n\t\n\t    // Goal: If a user copies and pastes a tweet containing t.co'ed link, the resulting paste\n\t    // should contain the full original URL (expanded_url), not the display URL.\n\t    //\n\t    // Method: Whenever possible, we actually emit HTML that contains expanded_url, and use\n\t    // font-size:0 to hide those parts that should not be displayed (because they are not part of display_url).\n\t    // Elements with font-size:0 get copied even though they are not visible.\n\t    // Note that display:none doesn't work here. Elements with display:none don't get copied.\n\t    //\n\t    // Additionally, we want to *display* ellipses, but we don't want them copied.  To make this happen we\n\t    // wrap the ellipses in a tco-ellipsis class and provide an onCopy handler that sets display:none on\n\t    // everything with the tco-ellipsis class.\n\t    //\n\t    // Exception: pic.twitter.com images, for which expandedUrl = \"https://twitter.com/#!/username/status/1234/photo/1\n\t    // For those URLs, display_url is not a substring of expanded_url, so we don't do anything special to render the elided parts.\n\t    // For a pic.twitter.com URL, the only elided part will be the \"https://\", so this is fine.\n\t\n\t    var displayUrlSansEllipses = displayUrl.replace(/…/g, \"\"); // We have to disregard ellipses for matching\n\t    // Note: we currently only support eliding parts of the URL at the beginning or the end.\n\t    // Eventually we may want to elide parts of the URL in the *middle*.  If so, this code will\n\t    // become more complicated.  We will probably want to create a regexp out of display URL,\n\t    // replacing every ellipsis with a \".*\".\n\t    if (expandedUrl.indexOf(displayUrlSansEllipses) != -1) {\n\t      var displayUrlIndex = expandedUrl.indexOf(displayUrlSansEllipses);\n\t      var v = {\n\t        displayUrlSansEllipses: displayUrlSansEllipses,\n\t        // Portion of expandedUrl that precedes the displayUrl substring\n\t        beforeDisplayUrl: expandedUrl.substr(0, displayUrlIndex),\n\t        // Portion of expandedUrl that comes after displayUrl\n\t        afterDisplayUrl: expandedUrl.substr(displayUrlIndex + displayUrlSansEllipses.length),\n\t        precedingEllipsis: displayUrl.match(/^…/) ? \"…\" : \"\",\n\t        followingEllipsis: displayUrl.match(/…$/) ? \"…\" : \"\"\n\t      };\n\t      for (var k in v) {\n\t        if (v.hasOwnProperty(k)) {\n\t          v[k] = twttr.txt.htmlEscape(v[k]);\n\t        }\n\t      }\n\t      // As an example: The user tweets \"hi http://longdomainname.com/foo\"\n\t      // This gets shortened to \"hi http://t.co/xyzabc\", with display_url = \"…nname.com/foo\"\n\t      // This will get rendered as:\n\t      // <span class='tco-ellipsis'> <!-- This stuff should get displayed but not copied -->\n\t      //   …\n\t      //   <!-- There's a chance the onCopy event handler might not fire. In case that happens,\n\t      //        we include an &nbsp; here so that the … doesn't bump up against the URL and ruin it.\n\t      //        The &nbsp; is inside the tco-ellipsis span so that when the onCopy handler *does*\n\t      //        fire, it doesn't get copied.  Otherwise the copied text would have two spaces in a row,\n\t      //        e.g. \"hi  http://longdomainname.com/foo\".\n\t      //   <span style='font-size:0'>&nbsp;</span>\n\t      // </span>\n\t      // <span style='font-size:0'>  <!-- This stuff should get copied but not displayed -->\n\t      //   http://longdomai\n\t      // </span>\n\t      // <span class='js-display-url'> <!-- This stuff should get displayed *and* copied -->\n\t      //   nname.com/foo\n\t      // </span>\n\t      // <span class='tco-ellipsis'> <!-- This stuff should get displayed but not copied -->\n\t      //   <span style='font-size:0'>&nbsp;</span>\n\t      //   …\n\t      // </span>\n\t      v['invisible'] = options.invisibleTagAttrs;\n\t      return stringSupplant(\"<span class='tco-ellipsis'>#{precedingEllipsis}<span #{invisible}>&nbsp;</span></span><span #{invisible}>#{beforeDisplayUrl}</span><span class='js-display-url'>#{displayUrlSansEllipses}</span><span #{invisible}>#{afterDisplayUrl}</span><span class='tco-ellipsis'><span #{invisible}>&nbsp;</span>#{followingEllipsis}</span>\", v);\n\t    }\n\t    return displayUrl;\n\t  };\n\t\n\t  twttr.txt.autoLinkEntities = function(text, entities, options) {\n\t    options = clone(options || {});\n\t\n\t    options.hashtagClass = options.hashtagClass || DEFAULT_HASHTAG_CLASS;\n\t    options.hashtagUrlBase = options.hashtagUrlBase || \"https://twitter.com/#!/search?q=%23\";\n\t    options.cashtagClass = options.cashtagClass || DEFAULT_CASHTAG_CLASS;\n\t    options.cashtagUrlBase = options.cashtagUrlBase || \"https://twitter.com/#!/search?q=%24\";\n\t    options.listClass = options.listClass || DEFAULT_LIST_CLASS;\n\t    options.usernameClass = options.usernameClass || DEFAULT_USERNAME_CLASS;\n\t    options.usernameUrlBase = options.usernameUrlBase || \"https://twitter.com/\";\n\t    options.listUrlBase = options.listUrlBase || \"https://twitter.com/\";\n\t    options.htmlAttrs = twttr.txt.extractHtmlAttrsFromOptions(options);\n\t    options.invisibleTagAttrs = options.invisibleTagAttrs || \"style='position:absolute;left:-9999px;'\";\n\t\n\t    // remap url entities to hash\n\t    var urlEntities, i, len;\n\t    if(options.urlEntities) {\n\t      urlEntities = {};\n\t      for(i = 0, len = options.urlEntities.length; i < len; i++) {\n\t        urlEntities[options.urlEntities[i].url] = options.urlEntities[i];\n\t      }\n\t      options.urlEntities = urlEntities;\n\t    }\n\t\n\t    var result = \"\";\n\t    var beginIndex = 0;\n\t\n\t    // sort entities by start index\n\t    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n\t\n\t    var nonEntity = options.htmlEscapeNonEntities ? twttr.txt.htmlEscape : function(text) {\n\t      return text;\n\t    };\n\t\n\t    for (var i = 0; i < entities.length; i++) {\n\t      var entity = entities[i];\n\t      result += nonEntity(text.substring(beginIndex, entity.indices[0]));\n\t\n\t      if (entity.url) {\n\t        result += twttr.txt.linkToUrl(entity, text, options);\n\t      } else if (entity.hashtag) {\n\t        result += twttr.txt.linkToHashtag(entity, text, options);\n\t      } else if (entity.screenName) {\n\t        result += twttr.txt.linkToMentionAndList(entity, text, options);\n\t      } else if (entity.cashtag) {\n\t        result += twttr.txt.linkToCashtag(entity, text, options);\n\t      }\n\t      beginIndex = entity.indices[1];\n\t    }\n\t    result += nonEntity(text.substring(beginIndex, text.length));\n\t    return result;\n\t  };\n\t\n\t  twttr.txt.autoLinkWithJSON = function(text, json, options) {\n\t    // map JSON entity to twitter-text entity\n\t    if (json.user_mentions) {\n\t      for (var i = 0; i < json.user_mentions.length; i++) {\n\t        // this is a @mention\n\t        json.user_mentions[i].screenName = json.user_mentions[i].screen_name;\n\t      }\n\t    }\n\t\n\t    if (json.hashtags) {\n\t      for (var i = 0; i < json.hashtags.length; i++) {\n\t        // this is a #hashtag\n\t        json.hashtags[i].hashtag = json.hashtags[i].text;\n\t      }\n\t    }\n\t\n\t    if (json.symbols) {\n\t      for (var i = 0; i < json.symbols.length; i++) {\n\t        // this is a $CASH tag\n\t        json.symbols[i].cashtag = json.symbols[i].text;\n\t      }\n\t    }\n\t\n\t    // concatenate all entities\n\t    var entities = [];\n\t    for (var key in json) {\n\t      entities = entities.concat(json[key]);\n\t    }\n\t\n\t    // modify indices to UTF-16\n\t    twttr.txt.modifyIndicesFromUnicodeToUTF16(text, entities);\n\t\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.extractHtmlAttrsFromOptions = function(options) {\n\t    var htmlAttrs = {};\n\t    for (var k in options) {\n\t      var v = options[k];\n\t      if (OPTIONS_NOT_ATTRIBUTES[k]) continue;\n\t      if (BOOLEAN_ATTRIBUTES[k]) {\n\t        v = v ? k : null;\n\t      }\n\t      if (v == null) continue;\n\t      htmlAttrs[k] = v;\n\t    }\n\t    return htmlAttrs;\n\t  };\n\t\n\t  twttr.txt.autoLink = function(text, options) {\n\t    var entities = twttr.txt.extractEntitiesWithIndices(text, {extractUrlsWithoutProtocol: false});\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.autoLinkUsernamesOrLists = function(text, options) {\n\t    var entities = twttr.txt.extractMentionsOrListsWithIndices(text);\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.autoLinkHashtags = function(text, options) {\n\t    var entities = twttr.txt.extractHashtagsWithIndices(text);\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.autoLinkCashtags = function(text, options) {\n\t    var entities = twttr.txt.extractCashtagsWithIndices(text);\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.autoLinkUrlsCustom = function(text, options) {\n\t    var entities = twttr.txt.extractUrlsWithIndices(text, {extractUrlsWithoutProtocol: false});\n\t    return twttr.txt.autoLinkEntities(text, entities, options);\n\t  };\n\t\n\t  twttr.txt.removeOverlappingEntities = function(entities) {\n\t    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n\t\n\t    var prev = entities[0];\n\t    for (var i = 1; i < entities.length; i++) {\n\t      if (prev.indices[1] > entities[i].indices[0]) {\n\t        entities.splice(i, 1);\n\t        i--;\n\t      } else {\n\t        prev = entities[i];\n\t      }\n\t    }\n\t  };\n\t\n\t  twttr.txt.extractEntitiesWithIndices = function(text, options) {\n\t    var entities = twttr.txt.extractUrlsWithIndices(text, options)\n\t                    .concat(twttr.txt.extractMentionsOrListsWithIndices(text))\n\t                    .concat(twttr.txt.extractHashtagsWithIndices(text, {checkUrlOverlap: false}))\n\t                    .concat(twttr.txt.extractCashtagsWithIndices(text));\n\t\n\t    if (entities.length == 0) {\n\t      return [];\n\t    }\n\t\n\t    twttr.txt.removeOverlappingEntities(entities);\n\t    return entities;\n\t  };\n\t\n\t  twttr.txt.extractMentions = function(text) {\n\t    var screenNamesOnly = [],\n\t        screenNamesWithIndices = twttr.txt.extractMentionsWithIndices(text);\n\t\n\t    for (var i = 0; i < screenNamesWithIndices.length; i++) {\n\t      var screenName = screenNamesWithIndices[i].screenName;\n\t      screenNamesOnly.push(screenName);\n\t    }\n\t\n\t    return screenNamesOnly;\n\t  };\n\t\n\t  twttr.txt.extractMentionsWithIndices = function(text) {\n\t    var mentions = [],\n\t        mentionOrList,\n\t        mentionsOrLists = twttr.txt.extractMentionsOrListsWithIndices(text);\n\t\n\t    for (var i = 0 ; i < mentionsOrLists.length; i++) {\n\t      mentionOrList = mentionsOrLists[i];\n\t      if (mentionOrList.listSlug == '') {\n\t        mentions.push({\n\t          screenName: mentionOrList.screenName,\n\t          indices: mentionOrList.indices\n\t        });\n\t      }\n\t    }\n\t\n\t    return mentions;\n\t  };\n\t\n\t  /**\n\t   * Extract list or user mentions.\n\t   * (Presence of listSlug indicates a list)\n\t   */\n\t  twttr.txt.extractMentionsOrListsWithIndices = function(text) {\n\t    if (!text || !text.match(twttr.txt.regexen.atSigns)) {\n\t      return [];\n\t    }\n\t\n\t    var possibleNames = [],\n\t        slashListname;\n\t\n\t    text.replace(twttr.txt.regexen.validMentionOrList, function(match, before, atSign, screenName, slashListname, offset, chunk) {\n\t      var after = chunk.slice(offset + match.length);\n\t      if (!after.match(twttr.txt.regexen.endMentionMatch)) {\n\t        slashListname = slashListname || '';\n\t        var startPosition = offset + before.length;\n\t        var endPosition = startPosition + screenName.length + slashListname.length + 1;\n\t        possibleNames.push({\n\t          screenName: screenName,\n\t          listSlug: slashListname,\n\t          indices: [startPosition, endPosition]\n\t        });\n\t      }\n\t    });\n\t\n\t    return possibleNames;\n\t  };\n\t\n\t\n\t  twttr.txt.extractReplies = function(text) {\n\t    if (!text) {\n\t      return null;\n\t    }\n\t\n\t    var possibleScreenName = text.match(twttr.txt.regexen.validReply);\n\t    if (!possibleScreenName ||\n\t        RegExp.rightContext.match(twttr.txt.regexen.endMentionMatch)) {\n\t      return null;\n\t    }\n\t\n\t    return possibleScreenName[1];\n\t  };\n\t\n\t  twttr.txt.extractUrls = function(text, options) {\n\t    var urlsOnly = [],\n\t        urlsWithIndices = twttr.txt.extractUrlsWithIndices(text, options);\n\t\n\t    for (var i = 0; i < urlsWithIndices.length; i++) {\n\t      urlsOnly.push(urlsWithIndices[i].url);\n\t    }\n\t\n\t    return urlsOnly;\n\t  };\n\t\n\t  twttr.txt.extractUrlsWithIndices = function(text, options) {\n\t    if (!options) {\n\t      options = {extractUrlsWithoutProtocol: true};\n\t    }\n\t    if (!text || (options.extractUrlsWithoutProtocol ? !text.match(/\\./) : !text.match(/:/))) {\n\t      return [];\n\t    }\n\t\n\t    var urls = [];\n\t\n\t    while (twttr.txt.regexen.extractUrl.exec(text)) {\n\t      var before = RegExp.$2, url = RegExp.$3, protocol = RegExp.$4, domain = RegExp.$5, path = RegExp.$7;\n\t      var endPosition = twttr.txt.regexen.extractUrl.lastIndex,\n\t          startPosition = endPosition - url.length;\n\t\n\t      // if protocol is missing and domain contains non-ASCII characters,\n\t      // extract ASCII-only domains.\n\t      if (!protocol) {\n\t        if (!options.extractUrlsWithoutProtocol\n\t            || before.match(twttr.txt.regexen.invalidUrlWithoutProtocolPrecedingChars)) {\n\t          continue;\n\t        }\n\t        var lastUrl = null,\n\t            asciiEndPosition = 0;\n\t        domain.replace(twttr.txt.regexen.validAsciiDomain, function(asciiDomain) {\n\t          var asciiStartPosition = domain.indexOf(asciiDomain, asciiEndPosition);\n\t          asciiEndPosition = asciiStartPosition + asciiDomain.length;\n\t          lastUrl = {\n\t            url: asciiDomain,\n\t            indices: [startPosition + asciiStartPosition, startPosition + asciiEndPosition]\n\t          };\n\t          if (path\n\t              || asciiDomain.match(twttr.txt.regexen.validSpecialShortDomain)\n\t              || !asciiDomain.match(twttr.txt.regexen.invalidShortDomain)) {\n\t            urls.push(lastUrl);\n\t          }\n\t        });\n\t\n\t        // no ASCII-only domain found. Skip the entire URL.\n\t        if (lastUrl == null) {\n\t          continue;\n\t        }\n\t\n\t        // lastUrl only contains domain. Need to add path and query if they exist.\n\t        if (path) {\n\t          lastUrl.url = url.replace(domain, lastUrl.url);\n\t          lastUrl.indices[1] = endPosition;\n\t        }\n\t      } else {\n\t        // In the case of t.co URLs, don't allow additional path characters.\n\t        if (url.match(twttr.txt.regexen.validTcoUrl)) {\n\t          url = RegExp.lastMatch;\n\t          endPosition = startPosition + url.length;\n\t        }\n\t        urls.push({\n\t          url: url,\n\t          indices: [startPosition, endPosition]\n\t        });\n\t      }\n\t    }\n\t\n\t    return urls;\n\t  };\n\t\n\t  twttr.txt.extractHashtags = function(text) {\n\t    var hashtagsOnly = [],\n\t        hashtagsWithIndices = twttr.txt.extractHashtagsWithIndices(text);\n\t\n\t    for (var i = 0; i < hashtagsWithIndices.length; i++) {\n\t      hashtagsOnly.push(hashtagsWithIndices[i].hashtag);\n\t    }\n\t\n\t    return hashtagsOnly;\n\t  };\n\t\n\t  twttr.txt.extractHashtagsWithIndices = function(text, options) {\n\t    if (!options) {\n\t      options = {checkUrlOverlap: true};\n\t    }\n\t\n\t    if (!text || !text.match(twttr.txt.regexen.hashSigns)) {\n\t      return [];\n\t    }\n\t\n\t    var tags = [];\n\t\n\t    text.replace(twttr.txt.regexen.validHashtag, function(match, before, hash, hashText, offset, chunk) {\n\t      var after = chunk.slice(offset + match.length);\n\t      if (after.match(twttr.txt.regexen.endHashtagMatch))\n\t        return;\n\t      var startPosition = offset + before.length;\n\t      var endPosition = startPosition + hashText.length + 1;\n\t      tags.push({\n\t        hashtag: hashText,\n\t        indices: [startPosition, endPosition]\n\t      });\n\t    });\n\t\n\t    if (options.checkUrlOverlap) {\n\t      // also extract URL entities\n\t      var urls = twttr.txt.extractUrlsWithIndices(text);\n\t      if (urls.length > 0) {\n\t        var entities = tags.concat(urls);\n\t        // remove overlap\n\t        twttr.txt.removeOverlappingEntities(entities);\n\t        // only push back hashtags\n\t        tags = [];\n\t        for (var i = 0; i < entities.length; i++) {\n\t          if (entities[i].hashtag) {\n\t            tags.push(entities[i]);\n\t          }\n\t        }\n\t      }\n\t    }\n\t\n\t    return tags;\n\t  };\n\t\n\t  twttr.txt.extractCashtags = function(text) {\n\t    var cashtagsOnly = [],\n\t        cashtagsWithIndices = twttr.txt.extractCashtagsWithIndices(text);\n\t\n\t    for (var i = 0; i < cashtagsWithIndices.length; i++) {\n\t      cashtagsOnly.push(cashtagsWithIndices[i].cashtag);\n\t    }\n\t\n\t    return cashtagsOnly;\n\t  };\n\t\n\t  twttr.txt.extractCashtagsWithIndices = function(text) {\n\t    if (!text || text.indexOf(\"$\") == -1) {\n\t      return [];\n\t    }\n\t\n\t    var tags = [];\n\t\n\t    text.replace(twttr.txt.regexen.validCashtag, function(match, before, dollar, cashtag, offset, chunk) {\n\t      var startPosition = offset + before.length;\n\t      var endPosition = startPosition + cashtag.length + 1;\n\t      tags.push({\n\t        cashtag: cashtag,\n\t        indices: [startPosition, endPosition]\n\t      });\n\t    });\n\t\n\t    return tags;\n\t  };\n\t\n\t  twttr.txt.modifyIndicesFromUnicodeToUTF16 = function(text, entities) {\n\t    twttr.txt.convertUnicodeIndices(text, entities, false);\n\t  };\n\t\n\t  twttr.txt.modifyIndicesFromUTF16ToUnicode = function(text, entities) {\n\t    twttr.txt.convertUnicodeIndices(text, entities, true);\n\t  };\n\t\n\t  twttr.txt.getUnicodeTextLength = function(text) {\n\t    return text.replace(twttr.txt.regexen.non_bmp_code_pairs, ' ').length;\n\t  };\n\t\n\t  twttr.txt.convertUnicodeIndices = function(text, entities, indicesInUTF16) {\n\t    if (entities.length == 0) {\n\t      return;\n\t    }\n\t\n\t    var charIndex = 0;\n\t    var codePointIndex = 0;\n\t\n\t    // sort entities by start index\n\t    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n\t    var entityIndex = 0;\n\t    var entity = entities[0];\n\t\n\t    while (charIndex < text.length) {\n\t      if (entity.indices[0] == (indicesInUTF16 ? charIndex : codePointIndex)) {\n\t        var len = entity.indices[1] - entity.indices[0];\n\t        entity.indices[0] = indicesInUTF16 ? codePointIndex : charIndex;\n\t        entity.indices[1] = entity.indices[0] + len;\n\t\n\t        entityIndex++;\n\t        if (entityIndex == entities.length) {\n\t          // no more entity\n\t          break;\n\t        }\n\t        entity = entities[entityIndex];\n\t      }\n\t\n\t      var c = text.charCodeAt(charIndex);\n\t      if (0xD800 <= c && c <= 0xDBFF && charIndex < text.length - 1) {\n\t        // Found high surrogate char\n\t        c = text.charCodeAt(charIndex + 1);\n\t        if (0xDC00 <= c && c <= 0xDFFF) {\n\t          // Found surrogate pair\n\t          charIndex++;\n\t        }\n\t      }\n\t      codePointIndex++;\n\t      charIndex++;\n\t    }\n\t  };\n\t\n\t  // this essentially does text.split(/<|>/)\n\t  // except that won't work in IE, where empty strings are ommitted\n\t  // so \"<>\".split(/<|>/) => [] in IE, but is [\"\", \"\", \"\"] in all others\n\t  // but \"<<\".split(\"<\") => [\"\", \"\", \"\"]\n\t  twttr.txt.splitTags = function(text) {\n\t    var firstSplits = text.split(\"<\"),\n\t        secondSplits,\n\t        allSplits = [],\n\t        split;\n\t\n\t    for (var i = 0; i < firstSplits.length; i += 1) {\n\t      split = firstSplits[i];\n\t      if (!split) {\n\t        allSplits.push(\"\");\n\t      } else {\n\t        secondSplits = split.split(\">\");\n\t        for (var j = 0; j < secondSplits.length; j += 1) {\n\t          allSplits.push(secondSplits[j]);\n\t        }\n\t      }\n\t    }\n\t\n\t    return allSplits;\n\t  };\n\t\n\t  twttr.txt.hitHighlight = function(text, hits, options) {\n\t    var defaultHighlightTag = \"em\";\n\t\n\t    hits = hits || [];\n\t    options = options || {};\n\t\n\t    if (hits.length === 0) {\n\t      return text;\n\t    }\n\t\n\t    var tagName = options.tag || defaultHighlightTag,\n\t        tags = [\"<\" + tagName + \">\", \"</\" + tagName + \">\"],\n\t        chunks = twttr.txt.splitTags(text),\n\t        i,\n\t        j,\n\t        result = \"\",\n\t        chunkIndex = 0,\n\t        chunk = chunks[0],\n\t        prevChunksLen = 0,\n\t        chunkCursor = 0,\n\t        startInChunk = false,\n\t        chunkChars = chunk,\n\t        flatHits = [],\n\t        index,\n\t        hit,\n\t        tag,\n\t        placed,\n\t        hitSpot;\n\t\n\t    for (i = 0; i < hits.length; i += 1) {\n\t      for (j = 0; j < hits[i].length; j += 1) {\n\t        flatHits.push(hits[i][j]);\n\t      }\n\t    }\n\t\n\t    for (index = 0; index < flatHits.length; index += 1) {\n\t      hit = flatHits[index];\n\t      tag = tags[index % 2];\n\t      placed = false;\n\t\n\t      while (chunk != null && hit >= prevChunksLen + chunk.length) {\n\t        result += chunkChars.slice(chunkCursor);\n\t        if (startInChunk && hit === prevChunksLen + chunkChars.length) {\n\t          result += tag;\n\t          placed = true;\n\t        }\n\t\n\t        if (chunks[chunkIndex + 1]) {\n\t          result += \"<\" + chunks[chunkIndex + 1] + \">\";\n\t        }\n\t\n\t        prevChunksLen += chunkChars.length;\n\t        chunkCursor = 0;\n\t        chunkIndex += 2;\n\t        chunk = chunks[chunkIndex];\n\t        chunkChars = chunk;\n\t        startInChunk = false;\n\t      }\n\t\n\t      if (!placed && chunk != null) {\n\t        hitSpot = hit - prevChunksLen;\n\t        result += chunkChars.slice(chunkCursor, hitSpot) + tag;\n\t        chunkCursor = hitSpot;\n\t        if (index % 2 === 0) {\n\t          startInChunk = true;\n\t        } else {\n\t          startInChunk = false;\n\t        }\n\t      } else if(!placed) {\n\t        placed = true;\n\t        result += tag;\n\t      }\n\t    }\n\t\n\t    if (chunk != null) {\n\t      if (chunkCursor < chunkChars.length) {\n\t        result += chunkChars.slice(chunkCursor);\n\t      }\n\t      for (index = chunkIndex + 1; index < chunks.length; index += 1) {\n\t        result += (index % 2 === 0 ? chunks[index] : \"<\" + chunks[index] + \">\");\n\t      }\n\t    }\n\t\n\t    return result;\n\t  };\n\t\n\t  var MAX_LENGTH = 140;\n\t\n\t  // Returns the length of Tweet text with consideration to t.co URL replacement\n\t  // and chars outside the basic multilingual plane that use 2 UTF16 code points\n\t  twttr.txt.getTweetLength = function(text, options) {\n\t    if (!options) {\n\t      options = {\n\t          // These come from https://api.twitter.com/1.1/help/configuration.json\n\t          // described by https://dev.twitter.com/rest/reference/get/help/configuration\n\t          short_url_length: 23,\n\t          short_url_length_https: 23\n\t      };\n\t    }\n\t    var textLength = twttr.txt.getUnicodeTextLength(text),\n\t        urlsWithIndices = twttr.txt.extractUrlsWithIndices(text);\n\t    twttr.txt.modifyIndicesFromUTF16ToUnicode(text, urlsWithIndices);\n\t\n\t    for (var i = 0; i < urlsWithIndices.length; i++) {\n\t      // Subtract the length of the original URL\n\t      textLength += urlsWithIndices[i].indices[0] - urlsWithIndices[i].indices[1];\n\t\n\t      // Add 23 characters for URL starting with https://\n\t      // http:// URLs still use https://t.co so they are 23 characters as well\n\t      if (urlsWithIndices[i].url.toLowerCase().match(twttr.txt.regexen.urlHasHttps)) {\n\t         textLength += options.short_url_length_https;\n\t      } else {\n\t        textLength += options.short_url_length;\n\t      }\n\t    }\n\t\n\t    return textLength;\n\t  };\n\t\n\t  // Check the text for any reason that it may not be valid as a Tweet. This is meant as a pre-validation\n\t  // before posting to api.twitter.com. There are several server-side reasons for Tweets to fail but this pre-validation\n\t  // will allow quicker feedback.\n\t  //\n\t  // Returns false if this text is valid. Otherwise one of the following strings will be returned:\n\t  //\n\t  //   \"too_long\": if the text is too long\n\t  //   \"empty\": if the text is nil or empty\n\t  //   \"invalid_characters\": if the text contains non-Unicode or any of the disallowed Unicode characters\n\t  twttr.txt.isInvalidTweet = function(text) {\n\t    if (!text) {\n\t      return \"empty\";\n\t    }\n\t\n\t    // Determine max length independent of URL length\n\t    if (twttr.txt.getTweetLength(text) > MAX_LENGTH) {\n\t      return \"too_long\";\n\t    }\n\t\n\t    if (twttr.txt.hasInvalidCharacters(text)) {\n\t      return \"invalid_characters\";\n\t    }\n\t\n\t    return false;\n\t  };\n\t\n\t  twttr.txt.hasInvalidCharacters = function(text) {\n\t    return twttr.txt.regexen.invalid_chars.test(text);\n\t  };\n\t\n\t  twttr.txt.isValidTweetText = function(text) {\n\t    return !twttr.txt.isInvalidTweet(text);\n\t  };\n\t\n\t  twttr.txt.isValidUsername = function(username) {\n\t    if (!username) {\n\t      return false;\n\t    }\n\t\n\t    var extracted = twttr.txt.extractMentions(username);\n\t\n\t    // Should extract the username minus the @ sign, hence the .slice(1)\n\t    return extracted.length === 1 && extracted[0] === username.slice(1);\n\t  };\n\t\n\t  var VALID_LIST_RE = regexSupplant(/^#{validMentionOrList}$/);\n\t\n\t  twttr.txt.isValidList = function(usernameList) {\n\t    var match = usernameList.match(VALID_LIST_RE);\n\t\n\t    // Must have matched and had nothing before or after\n\t    return !!(match && match[1] == \"\" && match[4]);\n\t  };\n\t\n\t  twttr.txt.isValidHashtag = function(hashtag) {\n\t    if (!hashtag) {\n\t      return false;\n\t    }\n\t\n\t    var extracted = twttr.txt.extractHashtags(hashtag);\n\t\n\t    // Should extract the hashtag minus the # sign, hence the .slice(1)\n\t    return extracted.length === 1 && extracted[0] === hashtag.slice(1);\n\t  };\n\t\n\t  twttr.txt.isValidUrl = function(url, unicodeDomains, requireProtocol) {\n\t    if (unicodeDomains == null) {\n\t      unicodeDomains = true;\n\t    }\n\t\n\t    if (requireProtocol == null) {\n\t      requireProtocol = true;\n\t    }\n\t\n\t    if (!url) {\n\t      return false;\n\t    }\n\t\n\t    var urlParts = url.match(twttr.txt.regexen.validateUrlUnencoded);\n\t\n\t    if (!urlParts || urlParts[0] !== url) {\n\t      return false;\n\t    }\n\t\n\t    var scheme = urlParts[1],\n\t        authority = urlParts[2],\n\t        path = urlParts[3],\n\t        query = urlParts[4],\n\t        fragment = urlParts[5];\n\t\n\t    if (!(\n\t      (!requireProtocol || (isValidMatch(scheme, twttr.txt.regexen.validateUrlScheme) && scheme.match(/^https?$/i))) &&\n\t      isValidMatch(path, twttr.txt.regexen.validateUrlPath) &&\n\t      isValidMatch(query, twttr.txt.regexen.validateUrlQuery, true) &&\n\t      isValidMatch(fragment, twttr.txt.regexen.validateUrlFragment, true)\n\t    )) {\n\t      return false;\n\t    }\n\t\n\t    return (unicodeDomains && isValidMatch(authority, twttr.txt.regexen.validateUrlUnicodeAuthority)) ||\n\t           (!unicodeDomains && isValidMatch(authority, twttr.txt.regexen.validateUrlAuthority));\n\t  };\n\t\n\t  function isValidMatch(string, regex, optional) {\n\t    if (!optional) {\n\t      // RegExp[\"$&\"] is the text of the last match\n\t      // blank strings are ok, but are falsy, so we check stringiness instead of truthiness\n\t      return ((typeof string === \"string\") && string.match(regex) && RegExp[\"$&\"] === string);\n\t    }\n\t\n\t    // RegExp[\"$&\"] is the text of the last match\n\t    return (!string || (string.match(regex) && RegExp[\"$&\"] === string));\n\t  }\n\t\n\t  if (typeof module != 'undefined' && module.exports) {\n\t    module.exports = twttr.txt;\n\t  }\n\t\n\t  if (true) {\n\t    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (twttr.txt), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t  }\n\t\n\t  if (typeof window != 'undefined') {\n\t    if (window.twttr) {\n\t      for (var prop in twttr) {\n\t        window.twttr[prop] = twttr[prop];\n\t      }\n\t    } else {\n\t      window.twttr = twttr;\n\t    }\n\t  }\n\t})();\n\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\texports.createEditOverlay = createEditOverlay;\n\texports.enableEdit = enableEdit;\n\texports.disableEdit = disableEdit;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _event = __webpack_require__(4);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tvar _comments = __webpack_require__(38);\n\t\n\tvar _initFile = __webpack_require__(37);\n\t\n\tvar _ = __webpack_require__(50);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\tvar _enabled = false;\n\tvar isDragging = false,\n\t    overlay = void 0;\n\tvar dragOffsetX = void 0,\n\t    dragOffsetY = void 0,\n\t    dragStartX = void 0,\n\t    dragStartY = void 0;\n\tvar OVERLAY_BORDER_SIZE = 3;\n\t\n\t/**\n\t * Create an overlay for editing an annotation.\n\t *\n\t * @param {Element} target The annotation element to apply overlay for\n\t */\n\tfunction createEditOverlay(target) {\n\t  destroyEditOverlay();\n\t\n\t  overlay = document.createElement('div');\n\t  var anchor = document.createElement('a');\n\t  var parentNode = (0, _utils.findSVGContainer)(target).parentNode;\n\t  var id = target.getAttribute('data-pdf-annotate-id');\n\t  var rect = (0, _utils.getAnnotationRect)(target);\n\t  var scale = 1;\n\t  var type = target.getAttribute('data-pdf-annotate-type');\n\t  if (type === 'point') scale = parseFloat($('select.scale').val());\n\t  var styleLeft = rect.left - OVERLAY_BORDER_SIZE;\n\t  var styleTop = rect.top - OVERLAY_BORDER_SIZE;\n\t\n\t  overlay.setAttribute('id', 'pdf-annotate-edit-overlay');\n\t  overlay.setAttribute('data-target-id', id);\n\t  overlay.style.boxSizing = 'content-box';\n\t  overlay.style.position = 'absolute';\n\t  overlay.style.top = styleTop * scale + 'px';\n\t  overlay.style.left = styleLeft * scale + 'px';\n\t  overlay.style.width = rect.width * scale + 'px';\n\t  overlay.style.height = rect.height * scale + 'px';\n\t  overlay.style.border = OVERLAY_BORDER_SIZE + 'px solid ' + _utils.BORDER_COLOR;\n\t  overlay.style.borderRadius = OVERLAY_BORDER_SIZE + 'px';\n\t\n\t  anchor.innerHTML = '×';\n\t  anchor.setAttribute('href', 'javascript://');\n\t  anchor.style.background = '#fff';\n\t  anchor.style.borderRadius = '20px';\n\t  anchor.style.border = '1px solid #bbb';\n\t  anchor.style.color = '#bbb';\n\t  anchor.style.fontSize = '16px';\n\t  anchor.style.padding = '2px';\n\t  anchor.style.textAlign = 'center';\n\t  anchor.style.textDecoration = 'none';\n\t  anchor.style.position = 'absolute';\n\t  anchor.style.top = '-13px';\n\t  anchor.style.right = '-13px';\n\t  anchor.style.width = '25px';\n\t  anchor.style.height = '25px';\n\t\n\t  if (_initFile.readonly) anchor.style.display = 'none';\n\t  overlay.appendChild(anchor);\n\t  parentNode.appendChild(overlay);\n\t  document.addEventListener('click', handleDocumentClick);\n\t  document.addEventListener('keyup', handleDocumentKeyup);\n\t  document.addEventListener('mousedown', handleDocumentMousedown);\n\t  anchor.addEventListener('click', deleteAnnotation);\n\t  anchor.addEventListener('mouseover', function () {\n\t    anchor.style.color = '#35A4DC';\n\t    anchor.style.borderColor = '#999';\n\t    anchor.style.boxShadow = '0 1px 1px #ccc';\n\t  });\n\t  anchor.addEventListener('mouseout', function () {\n\t    anchor.style.color = '#bbb';\n\t    anchor.style.borderColor = '#bbb';\n\t    anchor.style.boxShadow = '';\n\t  });\n\t  overlay.addEventListener('mouseover', function () {\n\t    if (!isDragging && !_initFile.readonly) {\n\t      anchor.style.display = '';\n\t    }\n\t  });\n\t  overlay.addEventListener('mouseout', function () {\n\t    anchor.style.display = 'none';\n\t  });\n\t}\n\t\n\t/**\n\t * Destroy the edit overlay if it exists.\n\t */\n\tfunction destroyEditOverlay() {\n\t  if (overlay && overlay.parentNode) {\n\t    overlay.parentNode.removeChild(overlay);\n\t    overlay = null;\n\t  }\n\t  document.removeEventListener('click', handleDocumentClick);\n\t  document.removeEventListener('keyup', handleDocumentKeyup);\n\t  document.removeEventListener('mousedown', handleDocumentMousedown);\n\t  document.removeEventListener('mousemove', handleDocumentMousemove);\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t  (0, _utils.enableUserSelect)();\n\t}\n\t\n\t/**\n\t * Delete currently selected annotation\n\t */\n\tfunction deleteAnnotation() {\n\t  if (!overlay) {\n\t    return;\n\t  }\n\t\n\t  var annotationId = overlay.getAttribute('data-target-id');\n\t  var nodes = document.querySelectorAll('[data-pdf-annotate-id=\"' + annotationId + '\"]');\n\t  var svg = overlay.parentNode.querySelector('svg.annotationLayer');\n\t\n\t  var _getMetadata = (0, _utils.getMetadata)(svg),\n\t      documentId = _getMetadata.documentId;\n\t\n\t  [].concat(_toConsumableArray(nodes)).forEach(function (n) {\n\t    n.parentNode.removeChild(n);\n\t  });\n\t\n\t  _PDFJSAnnotate2.default.getStoreAdapter().deleteAnnotation(documentId, annotationId);\n\t\n\t  destroyEditOverlay();\n\t}\n\t\n\t/**\n\t * Handle document.click event\n\t *\n\t * @param {Event} e The DOM event that needs to be handled\n\t */\n\tfunction handleDocumentClick(e) {\n\t  if (!(0, _utils.findSVGAtPoint)(e.clientX, e.clientY)) {\n\t    return;\n\t  }\n\t\n\t  // Remove current overlay\n\t  var overlay = document.getElementById('pdf-annotate-edit-overlay');\n\t  if (overlay) {\n\t    if (isDragging || e.target === overlay) {\n\t      return;\n\t    }\n\t    destroyEditOverlay();\n\t  }\n\t}\n\t\n\t/**\n\t * Handle document.keyup event\n\t *\n\t * @param {Event} e The DOM event that needs to be handled\n\t */\n\tfunction handleDocumentKeyup(e) {\n\t  if (overlay && e.keyCode === 46 && e.target.nodeName.toLowerCase() !== 'textarea' && e.target.nodeName.toLowerCase() !== 'input') {\n\t    if (!_initFile.readonly) deleteAnnotation();\n\t  }\n\t}\n\t\n\t/**\n\t * Handle document.mousedown event\n\t *\n\t * @param {Event} e The DOM event that needs to be handled\n\t */\n\tfunction handleDocumentMousedown(e) {\n\t  if (e.target !== overlay) {\n\t    return;\n\t  }\n\t\n\t  // Highlight and strikeout annotations are bound to text within the document.\n\t  // It doesn't make sense to allow repositioning these types of annotations.\n\t  var annotationId = overlay.getAttribute('data-target-id');\n\t  var target = document.querySelector('[data-pdf-annotate-id=\"' + annotationId + '\"]');\n\t  var type = target.getAttribute('data-pdf-annotate-type');\n\t\n\t  if (type === 'highlight' || type === 'strikeout') {\n\t    return;\n\t  }\n\t\n\t  var scale = 1;\n\t  if (type === 'point') scale = parseFloat($('select.scale').val());\n\t\n\t  if (!_initFile.readonly) isDragging = true;\n\t  dragOffsetX = e.clientX;\n\t  dragOffsetY = e.clientY;\n\t  dragStartX = overlay.offsetLeft;\n\t  dragStartY = overlay.offsetTop;\n\t\n\t  overlay.style.background = 'rgba(255, 255, 255, 0.7)';\n\t  overlay.style.cursor = 'move';\n\t  // if(!readonly)\n\t  overlay.querySelector('a').style.display = 'none';\n\t\n\t  document.addEventListener('mousemove', handleDocumentMousemove);\n\t  document.addEventListener('mouseup', handleDocumentMouseup);\n\t  (0, _utils.disableUserSelect)();\n\t}\n\t\n\t/**\n\t * Handle document.mousemove event\n\t *\n\t * @param {Event} e The DOM event that needs to be handled\n\t */\n\tfunction handleDocumentMousemove(e) {\n\t  if (_initFile.readonly) return;\n\t\n\t  var annotationId = overlay.getAttribute('data-target-id');\n\t  var parentNode = overlay.parentNode;\n\t  var rect = parentNode.getBoundingClientRect();\n\t  var y = dragStartY + (e.clientY - dragOffsetY);\n\t  var x = dragStartX + (e.clientX - dragOffsetX);\n\t  var minY = 0;\n\t  var maxY = rect.height;\n\t  var minX = 0;\n\t  var maxX = rect.width;\n\t  if (y > minY && y + overlay.offsetHeight < maxY) {\n\t    overlay.style.top = y + 'px';\n\t  }\n\t\n\t  if (x > minX && x + overlay.offsetWidth < maxX) {\n\t    overlay.style.left = x + 'px';\n\t  }\n\t}\n\t\n\t/**\n\t * Handle document.mouseup event\n\t *\n\t * @param {Event} e The DOM event that needs to be handled\n\t */\n\tfunction handleDocumentMouseup(e) {\n\t  var annotationId = overlay.getAttribute('data-target-id');\n\t  var target = document.querySelectorAll('[data-pdf-annotate-id=\"' + annotationId + '\"]');\n\t  var type = target[0].getAttribute('data-pdf-annotate-type');\n\t  var svg = overlay.parentNode.querySelector('svg.annotationLayer');\n\t\n\t  var _getMetadata2 = (0, _utils.getMetadata)(svg),\n\t      documentId = _getMetadata2.documentId;\n\t\n\t  overlay.querySelector('a').style.display = '';\n\t\n\t  var scale = 1;\n\t  if (type === 'point') scale = parseFloat($('select.scale').val());\n\t\n\t  function getDelta(propX, propY) {\n\t    return calcDelta(parseInt(target[0].getAttribute(propX), 10), parseInt(target[0].getAttribute(propY), 10));\n\t  }\n\t\n\t  function calcDelta(x, y) {\n\t    return {\n\t      deltaX: OVERLAY_BORDER_SIZE + (0, _utils.scaleDown)(svg, { x: overlay.offsetLeft }).x - x,\n\t      deltaY: OVERLAY_BORDER_SIZE + (0, _utils.scaleDown)(svg, { y: overlay.offsetTop }).y - y\n\t    };\n\t  }\n\t\n\t  _PDFJSAnnotate2.default.getStoreAdapter().getAnnotation(documentId, annotationId).then(function (annotation) {\n\t    if (['area', 'highlight', 'point', 'textbox'].indexOf(type) > -1) {\n\t      var _getDelta = getDelta('x', 'y'),\n\t          deltaX = _getDelta.deltaX,\n\t          deltaY = _getDelta.deltaY;\n\t\n\t      [].concat(_toConsumableArray(target)).forEach(function (t, i) {\n\t        if (deltaY !== 0) {\n\t          var modelY = parseInt(t.getAttribute('y'), 10) + deltaY;\n\t          var viewY = modelY;\n\t\n\t          if (type === 'textbox') {\n\t            viewY += annotation.size;\n\t          }\n\t\n\t          if (type === 'point' && !$.browser.mozilla) {\n\t            viewY = (0, _utils.scaleUp)(svg, { viewY: viewY }).viewY / scale;\n\t          }\n\t          if ($.browser.mozilla) viewY -= 8;\n\t\n\t          t.setAttribute('y', viewY);\n\t          if (annotation.rectangles) {\n\t            annotation.rectangles[i].y = modelY;\n\t          } else if (annotation.y) {\n\t            annotation.y = modelY;\n\t          }\n\t        }\n\t        if (deltaX !== 0) {\n\t          var modelX = parseInt(t.getAttribute('x'), 10) + deltaX;\n\t          var viewX = modelX;\n\t\n\t          if (type === 'point' && !$.browser.mozilla) {\n\t            viewX = (0, _utils.scaleUp)(svg, { viewX: viewX }).viewX / scale;\n\t          }\n\t          if ($.browser.mozilla) viewX -= 8;\n\t\n\t          t.setAttribute('x', viewX);\n\t          if (annotation.rectangles) {\n\t            annotation.rectangles[i].x = modelX;\n\t          } else if (annotation.x) {\n\t            annotation.x = modelX;\n\t          }\n\t        }\n\t      });\n\t      // } else if (type === 'strikeout') {\n\t      //   let { deltaX, deltaY } = getDelta('x1', 'y1');\n\t      //   [...target].forEach(target, (t, i) => {\n\t      //     if (deltaY !== 0) {\n\t      //       t.setAttribute('y1', parseInt(t.getAttribute('y1'), 10) + deltaY);\n\t      //       t.setAttribute('y2', parseInt(t.getAttribute('y2'), 10) + deltaY);\n\t      //       annotation.rectangles[i].y = parseInt(t.getAttribute('y1'), 10);\n\t      //     }\n\t      //     if (deltaX !== 0) {\n\t      //       t.setAttribute('x1', parseInt(t.getAttribute('x1'), 10) + deltaX);\n\t      //       t.setAttribute('x2', parseInt(t.getAttribute('x2'), 10) + deltaX);\n\t      //       annotation.rectangles[i].x = parseInt(t.getAttribute('x1'), 10);\n\t      //     }\n\t      //   });\n\t    } else if (type === 'drawing') {\n\t      var rect = (0, _utils.scaleDown)(svg, (0, _utils.getAnnotationRect)(target[0]));\n\t\n\t      var _annotation$lines$ = _slicedToArray(annotation.lines[0], 2),\n\t          originX = _annotation$lines$[0],\n\t          originY = _annotation$lines$[1];\n\t\n\t      var _calcDelta = calcDelta(originX, originY),\n\t          _deltaX = _calcDelta.deltaX,\n\t          _deltaY = _calcDelta.deltaY;\n\t\n\t      // origin isn't necessarily at 0/0 in relation to overlay x/y\n\t      // adjust the difference between overlay and drawing coords\n\t\n\t\n\t      _deltaY += originY - rect.top;\n\t      _deltaX += originX - rect.left;\n\t\n\t      annotation.lines.forEach(function (line, i) {\n\t        var _annotation$lines$i = _slicedToArray(annotation.lines[i], 2),\n\t            x = _annotation$lines$i[0],\n\t            y = _annotation$lines$i[1];\n\t\n\t        annotation.lines[i][0] = x + _deltaX;\n\t        annotation.lines[i][1] = y + _deltaY;\n\t      });\n\t\n\t      target[0].parentNode.removeChild(target[0]);\n\t      (0, _appendChild2.default)(svg, annotation);\n\t    }\n\t\n\t    if (!_initFile.readonly) _PDFJSAnnotate2.default.getStoreAdapter().editAnnotation(documentId, annotationId, annotation);\n\t  });\n\t\n\t  setTimeout(function () {\n\t    isDragging = false;\n\t  }, 0);\n\t\n\t  overlay.style.background = '';\n\t  overlay.style.cursor = '';\n\t\n\t  document.removeEventListener('mousemove', handleDocumentMousemove);\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t  (0, _utils.enableUserSelect)();\n\t}\n\t\n\t/**\n\t * Handle annotation.click event\n\t *\n\t * @param {Element} e The annotation element that was clicked\n\t */\n\tfunction handleAnnotationClick(target) {\n\t  var type = target.dataset['pdfAnnotateType'];\n\t  if (type === 'point') (0, _comments.selectComment)(target.dataset['pdfAnnotateId']);\n\t  createEditOverlay(target);\n\t}\n\t\n\t/**\n\t * Enable edit mode behavior.\n\t */\n\tfunction enableEdit() {\n\t  if (_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = true;\n\t  (0, _event.addEventListener)('annotation:click', handleAnnotationClick);\n\t};\n\t\n\t/**\n\t * Disable edit mode behavior.\n\t */\n\tfunction disableEdit() {\n\t  destroyEditOverlay();\n\t\n\t  if (!_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = false;\n\t  (0, _event.removeEventListener)('annotation:click', handleAnnotationClick);\n\t};\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t    value: true\n\t});\n\texports.default = appendChild;\n\t\n\tvar _objectAssign = __webpack_require__(42);\n\t\n\tvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\t\n\tvar _renderLine = __webpack_require__(43);\n\t\n\tvar _renderLine2 = _interopRequireDefault(_renderLine);\n\t\n\tvar _renderPath = __webpack_require__(46);\n\t\n\tvar _renderPath2 = _interopRequireDefault(_renderPath);\n\t\n\tvar _renderPoint = __webpack_require__(47);\n\t\n\tvar _renderPoint2 = _interopRequireDefault(_renderPoint);\n\t\n\tvar _renderRect = __webpack_require__(48);\n\t\n\tvar _renderRect2 = _interopRequireDefault(_renderRect);\n\t\n\tvar _renderText = __webpack_require__(49);\n\t\n\tvar _renderText2 = _interopRequireDefault(_renderText);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar isFirefox = /firefox/i.test(navigator.userAgent);\n\t\n\t/**\n\t * Get the x/y translation to be used for transforming the annotations\n\t * based on the rotation of the viewport.\n\t *\n\t * @param {Object} viewport The viewport data from the page\n\t * @return {Object}\n\t */\n\tfunction getTranslation(viewport) {\n\t    var x = void 0;\n\t    var y = void 0;\n\t\n\t    // Modulus 360 on the rotation so that we only\n\t    // have to worry about four possible values.\n\t    switch (viewport.rotation % 360) {\n\t        case 0:\n\t            x = y = 0;\n\t            break;\n\t        case 90:\n\t            x = 0;\n\t            y = viewport.width / viewport.scale * -1;\n\t            break;\n\t        case 180:\n\t            x = viewport.width / viewport.scale * -1;\n\t            y = viewport.height / viewport.scale * -1;\n\t            break;\n\t        case 270:\n\t            x = viewport.height / viewport.scale * -1;\n\t            y = 0;\n\t            break;\n\t    }\n\t\n\t    return { x: x, y: y };\n\t}\n\t\n\t/**\n\t * Transform the rotation and scale of a node using SVG's native transform attribute.\n\t *\n\t * @param {Node} node The node to be transformed\n\t * @param {Object} viewport The page's viewport data\n\t * @return {Node}\n\t */\n\tfunction transform(node, viewport) {\n\t    var trans = getTranslation(viewport);\n\t\n\t    // Let SVG natively transform the element\n\t    node.setAttribute('transform', 'scale(' + viewport.scale + ') rotate(' + viewport.rotation + ') translate(' + trans.x + ', ' + trans.y + ')');\n\t\n\t    // Manually adjust x/y for nested SVG nodes\n\t    // console.log(node);\n\t    // console.log(viewport.scale);\n\t    // if (!isFirefox && node.nodeName.toLowerCase() === 'svg') {\n\t    //     node.setAttribute('x', parseInt(node.getAttribute('x'), 10) * viewport.scale);\n\t    //     node.setAttribute('y', parseInt(node.getAttribute('y'), 10) * viewport.scale);\n\t\n\t    //     let x = parseInt(node.getAttribute('x', 10));\n\t    //     let y = parseInt(node.getAttribute('y', 10));\n\t    //     let width = parseInt(node.getAttribute('width'), 10);\n\t    //     let height = parseInt(node.getAttribute('height'), 10);\n\t    //     let path = node.querySelector('path');\n\t    //     let svg = path.parentNode;\n\t\n\t    //     // Scale width/height\n\t    //     [node, svg, path, node.querySelector('rect')].forEach((n) => {\n\t    //         n.setAttribute('width', parseInt(n.getAttribute('width'), 10) * viewport.scale);\n\t    //         n.setAttribute('height', parseInt(n.getAttribute('height'), 10) * viewport.scale);\n\t    //     });\n\t\n\t    //     // Transform path but keep scale at 100% since it will be handled natively\n\t    //     transform(path, objectAssign({}, viewport, {scale: 1}));\n\t\n\t    //     switch (viewport.rotation % 360) {\n\t    //         case 90:\n\t    //             node.setAttribute('x', viewport.width - y - width);\n\t    //             node.setAttribute('y', x);\n\t    //             svg.setAttribute('x', 1);\n\t    //             svg.setAttribute('y', 0);\n\t    //             break;\n\t    //         case 180:\n\t    //             node.setAttribute('x', viewport.width - x - width);\n\t    //             node.setAttribute('y', viewport.height - y - height);\n\t    //             svg.setAttribute('y', 2);\n\t    //             break;\n\t    //         case 270:\n\t    //             node.setAttribute('x', y);\n\t    //             node.setAttribute('y', viewport.height - x - height);\n\t    //             svg.setAttribute('x', -1);\n\t    //             svg.setAttribute('y', 0);\n\t    //             break;\n\t    //     }\n\t    // }\n\t    // else{\n\t    //     Object.keys(node).forEach((key) => {\n\t    //     node[key] = node[key] * viewport.scale;\n\t    //     });\n\t    // }\n\t\n\t    return node;\n\t}\n\t\n\t/**\n\t * Append an annotation as a child of an SVG.\n\t *\n\t * @param {SVGElement} svg The SVG element to append the annotation to\n\t * @param {Object} annotation The annotation definition to render and append\n\t * @param {Object} viewport The page's viewport data\n\t * @return {SVGElement} A node that was created and appended by this function\n\t */\n\tfunction appendChild(svg, annotation, viewport) {\n\t    if (!viewport) {\n\t        viewport = JSON.parse(svg.getAttribute('data-pdf-annotate-viewport'));\n\t    }\n\t\n\t    var child = void 0;\n\t    switch (annotation.type) {\n\t        case 'area':\n\t        case 'highlight':\n\t            child = (0, _renderRect2.default)(annotation);\n\t            break;\n\t        case 'strikeout':\n\t            child = (0, _renderLine2.default)(annotation);\n\t            break;\n\t        case 'point':\n\t            child = (0, _renderPoint2.default)(annotation);\n\t            break;\n\t        case 'textbox':\n\t            child = (0, _renderText2.default)(annotation);\n\t            break;\n\t        case 'drawing':\n\t            child = (0, _renderPath2.default)(annotation);\n\t            break;\n\t    }\n\t\n\t    // If no type was provided for an annotation it will result in node being null.\n\t    // Skip appending/transforming if node doesn't exist.\n\t    if (child) {\n\t        // Set attributes\n\t        child.setAttribute('data-pdf-annotate-id', annotation.uuid);\n\t        child.setAttribute('data-pdf-annotate-type', annotation.type);\n\t        child.setAttribute('aria-hidden', true);\n\t\n\t        svg.appendChild(transform(child, viewport));\n\t    }\n\t\n\t    return child;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 42 */\n/***/ function(module, exports) {\n\n\t/*\n\tobject-assign\n\t(c) Sindre Sorhus\n\t@license MIT\n\t*/\n\t\n\t'use strict';\n\t/* eslint-disable no-unused-vars */\n\tvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\t\n\tfunction toObject(val) {\n\t\tif (val === null || val === undefined) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\t\n\t\treturn Object(val);\n\t}\n\t\n\tfunction shouldUseNative() {\n\t\ttry {\n\t\t\tif (!Object.assign) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// Detect buggy property enumeration order in older V8 versions.\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\t\ttest1[5] = 'de';\n\t\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test2 = {};\n\t\t\tfor (var i = 0; i < 10; i++) {\n\t\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t\t}\n\t\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\t\treturn test2[n];\n\t\t\t});\n\t\t\tif (order2.join('') !== '0123456789') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test3 = {};\n\t\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\t\ttest3[letter] = letter;\n\t\t\t});\n\t\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\t\tvar from;\n\t\tvar to = toObject(target);\n\t\tvar symbols;\n\t\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = Object(arguments[s]);\n\t\n\t\t\tfor (var key in from) {\n\t\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\t\tto[key] = from[key];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (getOwnPropertySymbols) {\n\t\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn to;\n\t};\n\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderLine;\n\t\n\tvar _setAttributes = __webpack_require__(44);\n\t\n\tvar _setAttributes2 = _interopRequireDefault(_setAttributes);\n\t\n\tvar _normalizeColor = __webpack_require__(45);\n\t\n\tvar _normalizeColor2 = _interopRequireDefault(_normalizeColor);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Create SVGLineElements from an annotation definition.\n\t * This is used for anntations of type `strikeout`.\n\t *\n\t * @param {Object} a The annotation definition\n\t * @return {SVGGElement} A group of all lines to be rendered\n\t */\n\tfunction renderLine(a) {\n\t  var group = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n\t  (0, _setAttributes2.default)(group, {\n\t    stroke: (0, _normalizeColor2.default)(a.color || '#f00'),\n\t    strokeWidth: 1\n\t  });\n\t\n\t  a.rectangles.forEach(function (r) {\n\t    var line = document.createElementNS('http://www.w3.org/2000/svg', 'line');\n\t\n\t    (0, _setAttributes2.default)(line, {\n\t      x1: r.x,\n\t      y1: r.y,\n\t      x2: r.x + r.width,\n\t      y2: r.y\n\t    });\n\t\n\t    group.appendChild(line);\n\t  });\n\t\n\t  return group;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 44 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = setAttributes;\n\tvar UPPER_REGEX = /[A-Z]/g;\n\t\n\t// Don't convert these attributes from camelCase to hyphenated-attributes\n\tvar BLACKLIST = ['viewBox'];\n\t\n\tvar keyCase = function keyCase(key) {\n\t  if (BLACKLIST.indexOf(key) === -1) {\n\t    key = key.replace(UPPER_REGEX, function (match) {\n\t      return '-' + match.toLowerCase();\n\t    });\n\t  }\n\t  return key;\n\t};\n\t\n\t/**\n\t * Set attributes for a node from a map\n\t *\n\t * @param {Node} node The node to set attributes on\n\t * @param {Object} attributes The map of key/value pairs to use for attributes\n\t */\n\tfunction setAttributes(node, attributes) {\n\t  Object.keys(attributes).forEach(function (key) {\n\t    node.setAttribute(keyCase(key), attributes[key]);\n\t  });\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 45 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = normalizeColor;\n\tvar REGEX_HASHLESS_HEX = /^([a-f0-9]{6}|[a-f0-9]{3})$/i;\n\t\n\t/**\n\t * Normalize a color value\n\t *\n\t * @param {String} color The color to normalize\n\t * @return {String}\n\t */\n\tfunction normalizeColor(color) {\n\t  if (REGEX_HASHLESS_HEX.test(color)) {\n\t    color = \"#\" + color;\n\t  }\n\t  return color;\n\t}\n\tmodule.exports = exports[\"default\"];\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderPath;\n\t\n\tvar _setAttributes = __webpack_require__(44);\n\t\n\tvar _setAttributes2 = _interopRequireDefault(_setAttributes);\n\t\n\tvar _normalizeColor = __webpack_require__(45);\n\t\n\tvar _normalizeColor2 = _interopRequireDefault(_normalizeColor);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Create SVGPathElement from an annotation definition.\n\t * This is used for anntations of type `drawing`.\n\t *\n\t * @param {Object} a The annotation definition\n\t * @return {SVGPathElement} The path to be rendered\n\t */\n\tfunction renderPath(a) {\n\t  var d = [];\n\t  var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\t\n\t  for (var i = 0, l = a.lines.length; i < l; i++) {\n\t    var p1 = a.lines[i];\n\t    var p2 = a.lines[i + 1];\n\t    if (p2) {\n\t      d.push('M' + p1[0] + ' ' + p1[1] + ' ' + p2[0] + ' ' + p2[1]);\n\t    }\n\t  }\n\t\n\t  (0, _setAttributes2.default)(path, {\n\t    d: d.join(' ') + 'Z',\n\t    stroke: (0, _normalizeColor2.default)(a.color || '#000'),\n\t    strokeWidth: a.width || 1,\n\t    fill: 'none'\n\t  });\n\t\n\t  return path;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderPoint;\n\t\n\tvar _setAttributes = __webpack_require__(44);\n\t\n\tvar _setAttributes2 = _interopRequireDefault(_setAttributes);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar SIZE = 25;\n\tvar D = 'M499.968 214.336q-113.832 0 -212.877 38.781t-157.356 104.625 -58.311 142.29q0 62.496 39.897 119.133t112.437 97.929l48.546 27.9 -15.066 53.568q-13.392 50.778 -39.06 95.976 84.816 -35.154 153.45 -95.418l23.994 -21.204 31.806 3.348q38.502 4.464 72.54 4.464 113.832 0 212.877 -38.781t157.356 -104.625 58.311 -142.29 -58.311 -142.29 -157.356 -104.625 -212.877 -38.781z';\n\t\n\t/**\n\t * Create SVGElement from an annotation definition.\n\t * This is used for anntations of type `comment`.\n\t *\n\t * @param {Object} a The annotation definition\n\t * @return {SVGElement} A svg to be rendered\n\t */\n\tfunction renderPoint(a) {\n\t  var outerSVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\t  var innerSVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\t  var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n\t  var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\t\n\t  (0, _setAttributes2.default)(outerSVG, {\n\t    width: SIZE,\n\t    height: SIZE,\n\t    x: a.x,\n\t    y: a.y\n\t  });\n\t\n\t  (0, _setAttributes2.default)(innerSVG, {\n\t    width: SIZE,\n\t    height: SIZE,\n\t    x: 0,\n\t    y: SIZE * 0.05 * -1,\n\t    viewBox: '0 0 1000 1000'\n\t  });\n\t\n\t  (0, _setAttributes2.default)(rect, {\n\t    width: SIZE,\n\t    height: SIZE,\n\t    stroke: '#000',\n\t    fill: '#ff0'\n\t  });\n\t\n\t  (0, _setAttributes2.default)(path, {\n\t    d: D,\n\t    strokeWidth: 50,\n\t    stroke: '#000',\n\t    fill: '#fff'\n\t  });\n\t\n\t  innerSVG.appendChild(path);\n\t  outerSVG.appendChild(rect);\n\t  outerSVG.appendChild(innerSVG);\n\t\n\t  return outerSVG;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderRect;\n\t\n\tvar _setAttributes = __webpack_require__(44);\n\t\n\tvar _setAttributes2 = _interopRequireDefault(_setAttributes);\n\t\n\tvar _normalizeColor = __webpack_require__(45);\n\t\n\tvar _normalizeColor2 = _interopRequireDefault(_normalizeColor);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Create SVGRectElements from an annotation definition.\n\t * This is used for anntations of type `area` and `highlight`.\n\t *\n\t * @param {Object} a The annotation definition\n\t * @return {SVGGElement|SVGRectElement} A group of all rects to be rendered\n\t */\n\tfunction renderRect(a) {\n\t  if (a.type === 'highlight') {\n\t    var group = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n\t    (0, _setAttributes2.default)(group, {\n\t      fill: (0, _normalizeColor2.default)(a.color || '#ff0'),\n\t      fillOpacity: 0.2\n\t    });\n\t\n\t    a.rectangles.forEach(function (r) {\n\t      group.appendChild(createRect(r));\n\t    });\n\t\n\t    return group;\n\t  } else {\n\t    var rect = createRect(a);\n\t    (0, _setAttributes2.default)(rect, {\n\t      stroke: (0, _normalizeColor2.default)(a.color || '#f00'),\n\t      fill: 'none'\n\t    });\n\t\n\t    return rect;\n\t  }\n\t}\n\t\n\tfunction createRect(r) {\n\t  var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n\t\n\t  (0, _setAttributes2.default)(rect, {\n\t    x: r.x,\n\t    y: r.y,\n\t    width: r.width,\n\t    height: r.height\n\t  });\n\t\n\t  return rect;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderText;\n\t\n\tvar _setAttributes = __webpack_require__(44);\n\t\n\tvar _setAttributes2 = _interopRequireDefault(_setAttributes);\n\t\n\tvar _normalizeColor = __webpack_require__(45);\n\t\n\tvar _normalizeColor2 = _interopRequireDefault(_normalizeColor);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Create SVGTextElement from an annotation definition.\n\t * This is used for anntations of type `textbox`.\n\t *\n\t * @param {Object} a The annotation definition\n\t * @return {SVGTextElement} A text to be rendered\n\t */\n\tfunction renderText(a) {\n\t  var text = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n\t\n\t  (0, _setAttributes2.default)(text, {\n\t    x: a.x,\n\t    y: a.y + parseInt(a.size, 10),\n\t    fill: (0, _normalizeColor2.default)(a.color || '#000'),\n\t    fontSize: a.size\n\t  });\n\t  text.innerHTML = a.content;\n\t\n\t  return text;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _event = __webpack_require__(4);\n\t\n\tvar _edit = __webpack_require__(40);\n\t\n\tvar _pen = __webpack_require__(51);\n\t\n\tvar _point = __webpack_require__(52);\n\t\n\tvar _rect = __webpack_require__(53);\n\t\n\tvar _text = __webpack_require__(54);\n\t\n\tvar _page = __webpack_require__(55);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\texports.default = {\n\t  addEventListener: _event.addEventListener, removeEventListener: _event.removeEventListener, fireEvent: _event.fireEvent,\n\t  disableEdit: _edit.disableEdit, enableEdit: _edit.enableEdit,\n\t  disablePen: _pen.disablePen, enablePen: _pen.enablePen, setPen: _pen.setPen,\n\t  disablePoint: _point.disablePoint, enablePoint: _point.enablePoint,\n\t  disableRect: _rect.disableRect, enableRect: _rect.enableRect,\n\t  disableText: _text.disableText, enableText: _text.enableText, setText: _text.setText,\n\t  createPage: _page.createPage, renderPage: _page.renderPage,\n\t  setActiveToolbarItem: _utils.setActiveToolbarItem\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.setPen = setPen;\n\texports.enablePen = enablePen;\n\texports.disablePen = disablePen;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar _enabled = false;\n\tvar _penSize = void 0;\n\tvar _penColor = void 0;\n\tvar path = void 0;\n\tvar lines = void 0;\n\t\n\t/**\n\t * Handle document.mousedown event\n\t */\n\tfunction handleDocumentMousedown() {\n\t  path = null;\n\t  lines = [];\n\t\n\t  document.addEventListener('mousemove', handleDocumentMousemove);\n\t  document.addEventListener('mouseup', handleDocumentMouseup);\n\t}\n\t\n\t/**\n\t * Handle document.mouseup event\n\t *\n\t * @param {Event} e The DOM event to be handled\n\t */\n\tfunction handleDocumentMouseup(e) {\n\t  var svg = void 0;\n\t  if (lines.length > 1 && (svg = (0, _utils.findSVGAtPoint)(e.clientX, e.clientY))) {\n\t    var _getMetadata = (0, _utils.getMetadata)(svg),\n\t        documentId = _getMetadata.documentId,\n\t        pageNumber = _getMetadata.pageNumber;\n\t\n\t    _PDFJSAnnotate2.default.getStoreAdapter().addAnnotation(documentId, pageNumber, {\n\t      type: 'drawing',\n\t      width: _penSize,\n\t      color: _penColor,\n\t      lines: lines\n\t    }).then(function (annotation) {\n\t      if (path) {\n\t        svg.removeChild(path);\n\t      }\n\t\n\t      (0, _appendChild2.default)(svg, annotation);\n\t    });\n\t  }\n\t\n\t  document.removeEventListener('mousemove', handleDocumentMousemove);\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t}\n\t\n\t/**\n\t * Handle document.mousemove event\n\t *\n\t * @param {Event} e The DOM event to be handled\n\t */\n\tfunction handleDocumentMousemove(e) {\n\t  savePoint(e.clientX, e.clientY);\n\t}\n\t\n\t/**\n\t * Handle document.keyup event\n\t *\n\t * @param {Event} e The DOM event to be handled\n\t */\n\tfunction handleDocumentKeyup(e) {\n\t  // Cancel rect if Esc is pressed\n\t  if (e.keyCode === 27) {\n\t    lines = null;\n\t    path.parentNode.removeChild(path);\n\t    document.removeEventListener('mousemove', handleDocumentMousemove);\n\t    document.removeEventListener('mouseup', handleDocumentMouseup);\n\t  }\n\t}\n\t\n\t/**\n\t * Save a point to the line being drawn.\n\t *\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t */\n\tfunction savePoint(x, y) {\n\t  var svg = (0, _utils.findSVGAtPoint)(x, y);\n\t  if (!svg) {\n\t    return;\n\t  }\n\t\n\t  var rect = svg.getBoundingClientRect();\n\t  var point = (0, _utils.scaleDown)(svg, {\n\t    x: x - rect.left,\n\t    y: y - rect.top\n\t  });\n\t\n\t  lines.push([point.x, point.y]);\n\t\n\t  if (lines.length <= 1) {\n\t    return;\n\t  }\n\t\n\t  if (path) {\n\t    svg.removeChild(path);\n\t  }\n\t\n\t  path = (0, _appendChild2.default)(svg, {\n\t    type: 'drawing',\n\t    color: _penColor,\n\t    width: _penSize,\n\t    lines: lines\n\t  });\n\t}\n\t\n\t/**\n\t * Set the attributes of the pen.\n\t *\n\t * @param {Number} penSize The size of the lines drawn by the pen\n\t * @param {String} penColor The color of the lines drawn by the pen\n\t */\n\tfunction setPen() {\n\t  var penSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\t  var penColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '000000';\n\t\n\t  _penSize = parseInt(penSize, 10);\n\t  _penColor = penColor;\n\t}\n\t\n\t/**\n\t * Enable the pen behavior\n\t */\n\tfunction enablePen() {\n\t  if (_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = true;\n\t  document.addEventListener('mousedown', handleDocumentMousedown);\n\t  document.addEventListener('keyup', handleDocumentKeyup);\n\t  (0, _utils.disableUserSelect)();\n\t}\n\t\n\t/**\n\t * Disable the pen behavior\n\t */\n\tfunction disablePen() {\n\t  if (!_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = false;\n\t  document.removeEventListener('mousedown', handleDocumentMousedown);\n\t  document.removeEventListener('keyup', handleDocumentKeyup);\n\t  (0, _utils.enableUserSelect)();\n\t}\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.enablePoint = enablePoint;\n\texports.disablePoint = disablePoint;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar _enabled = false;\n\tvar input = void 0;\n\t\n\t/**\n\t * Handle document.mouseup event\n\t *\n\t * @param {Event} The DOM event to be handled\n\t */\n\tfunction handleDocumentMouseup(e) {\n\t\n\t  if (input || !(0, _utils.findSVGAtPoint)(e.clientX, e.clientY)) {\n\t    return;\n\t  }\n\t\n\t  input = document.createElement('textarea');\n\t  input.setAttribute('id', 'pdf-annotate-point-input');\n\t  input.setAttribute('placeholder', 'Saisir un commentaire');\n\t  input.style.border = '3px solid ' + _utils.BORDER_COLOR;\n\t  input.style.borderRadius = '3px';\n\t  input.style.position = 'absolute';\n\t  input.style.top = e.clientY + 'px';\n\t  input.style.left = e.clientX + 'px';\n\t  input.style.width = '220px';\n\t  input.style.height = '130px';\n\t\n\t  input.addEventListener('blur', handleInputBlur);\n\t  input.addEventListener('keyup', handleInputKeyup);\n\t\n\t  document.body.appendChild(input);\n\t  input.focus();\n\t}\n\t\n\t/**\n\t * Handle input.blur event\n\t */\n\tfunction handleInputBlur() {\n\t  savePoint();\n\t}\n\t\n\t/**\n\t * Handle input.keyup event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleInputKeyup(e) {\n\t  if (e.keyCode === 27) {\n\t    closeInput();\n\t  } else if (e.keyCode === 13) {\n\t    savePoint();\n\t  }\n\t}\n\t\n\t/**\n\t * Save a new point annotation from input\n\t */\n\tfunction savePoint() {\n\t  if (input.value.trim().length > 0) {\n\t    var clientX = parseInt(input.style.left, 10);\n\t    var clientY = parseInt(input.style.top, 10);\n\t    var content = input.value.trim();\n\t    var svg = (0, _utils.findSVGAtPoint)(clientX, clientY);\n\t    if (!svg) {\n\t      return;\n\t    }\n\t\n\t    var rect = svg.getBoundingClientRect();\n\t\n\t    var _getMetadata = (0, _utils.getMetadata)(svg),\n\t        documentId = _getMetadata.documentId,\n\t        pageNumber = _getMetadata.pageNumber;\n\t\n\t    var annotation = Object.assign({\n\t      type: 'point'\n\t    }, (0, _utils.scaleDown)(svg, {\n\t      x: clientX - rect.left,\n\t      y: clientY - rect.top\n\t    }));\n\t\n\t    _PDFJSAnnotate2.default.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation).then(function (annotation) {\n\t      _PDFJSAnnotate2.default.getStoreAdapter().addComment(documentId, annotation.uuid, content);\n\t\n\t      (0, _appendChild2.default)(svg, annotation);\n\t    });\n\t  }\n\t\n\t  closeInput();\n\t}\n\t\n\t/**\n\t * Close the input element\n\t */\n\tfunction closeInput() {\n\t  input.removeEventListener('blur', handleInputBlur);\n\t  input.removeEventListener('keyup', handleInputKeyup);\n\t  document.body.removeChild(input);\n\t  input = null;\n\t}\n\t\n\t/**\n\t * Enable point annotation behavior\n\t */\n\tfunction enablePoint() {\n\t  if (_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = true;\n\t  document.addEventListener('mouseup', handleDocumentMouseup);\n\t}\n\t\n\t/**\n\t * Disable point annotation behavior\n\t */\n\tfunction disablePoint() {\n\t  if (!_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = false;\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t}\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.enableRect = enableRect;\n\texports.disableRect = disableRect;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\tvar _enabled = false;\n\tvar _type = void 0;\n\tvar overlay = void 0;\n\tvar originY = void 0;\n\tvar originX = void 0;\n\t\n\t/**\n\t * Get the current window selection as rects\n\t *\n\t * @return {Array} An Array of rects\n\t */\n\tfunction getSelectionRects() {\n\t  try {\n\t    var selection = window.getSelection();\n\t    var range = selection.getRangeAt(0);\n\t    var rects = range.getClientRects();\n\t\n\t    if (rects.length > 0 && rects[0].width > 0 && rects[0].height > 0) {\n\t      return rects;\n\t    }\n\t  } catch (e) {}\n\t\n\t  return null;\n\t}\n\t\n\t/**\n\t * Handle document.mousedown event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleDocumentMousedown(e) {\n\t  var svg = void 0;\n\t  if (_type !== 'area' || !(svg = (0, _utils.findSVGAtPoint)(e.clientX, e.clientY))) {\n\t    return;\n\t  }\n\t\n\t  var rect = svg.getBoundingClientRect();\n\t  originY = e.clientY;\n\t  originX = e.clientX;\n\t\n\t  overlay = document.createElement('div');\n\t  overlay.style.position = 'absolute';\n\t  overlay.style.top = originY - rect.top + 'px';\n\t  overlay.style.left = originX - rect.left + 'px';\n\t  overlay.style.border = '3px solid ' + _utils.BORDER_COLOR;\n\t  overlay.style.borderRadius = '3px';\n\t  svg.parentNode.appendChild(overlay);\n\t\n\t  document.addEventListener('mousemove', handleDocumentMousemove);\n\t  (0, _utils.disableUserSelect)();\n\t}\n\t\n\t/**\n\t * Handle document.mousemove event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleDocumentMousemove(e) {\n\t  var svg = overlay.parentNode.querySelector('svg.annotationLayer');\n\t  var rect = svg.getBoundingClientRect();\n\t\n\t  if (originX + (e.clientX - originX) < rect.right) {\n\t    overlay.style.width = e.clientX - originX + 'px';\n\t  }\n\t\n\t  if (originY + (e.clientY - originY) < rect.bottom) {\n\t    overlay.style.height = e.clientY - originY + 'px';\n\t  }\n\t}\n\t\n\t/**\n\t * Handle document.mouseup event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleDocumentMouseup(e) {\n\t  var rects = void 0;\n\t  if (_type !== 'area' && (rects = getSelectionRects())) {\n\t    var svg = (0, _utils.findSVGAtPoint)(rects[0].left, rects[0].top);\n\t    saveRect(_type, [].concat(_toConsumableArray(rects)).map(function (r) {\n\t      return {\n\t        top: r.top,\n\t        left: r.left,\n\t        width: r.width,\n\t        height: r.height\n\t      };\n\t    }));\n\t  } else if (_type === 'area' && overlay) {\n\t    var _svg = overlay.parentNode.querySelector('svg.annotationLayer');\n\t    var rect = _svg.getBoundingClientRect();\n\t    saveRect(_type, [{\n\t      top: parseInt(overlay.style.top, 10) + rect.top,\n\t      left: parseInt(overlay.style.left, 10) + rect.left,\n\t      width: parseInt(overlay.style.width, 10),\n\t      height: parseInt(overlay.style.height, 10)\n\t    }]);\n\t\n\t    overlay.parentNode.removeChild(overlay);\n\t    overlay = null;\n\t\n\t    document.removeEventListener('mousemove', handleDocumentMousemove);\n\t    (0, _utils.enableUserSelect)();\n\t  }\n\t}\n\t\n\t/**\n\t * Handle document.keyup event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleDocumentKeyup(e) {\n\t  // Cancel rect if Esc is pressed\n\t  if (e.keyCode === 27) {\n\t    var selection = window.getSelection();\n\t    selection.removeAllRanges();\n\t    if (overlay && overlay.parentNode) {\n\t      overlay.parentNode.removeChild(overlay);\n\t      overlay = null;\n\t      document.removeEventListener('mousemove', handleDocumentMousemove);\n\t    }\n\t  }\n\t}\n\t\n\t/**\n\t * Save a rect annotation\n\t *\n\t * @param {String} type The type of rect (area, highlight, strikeout)\n\t * @param {Array} rects The rects to use for annotation\n\t * @param {String} color The color of the rects\n\t */\n\tfunction saveRect(type, rects, color) {\n\t  var svg = (0, _utils.findSVGAtPoint)(rects[0].left, rects[0].top);\n\t  var node = void 0;\n\t  var annotation = void 0;\n\t\n\t  if (!svg) {\n\t    return;\n\t  }\n\t\n\t  var boundingRect = svg.getBoundingClientRect();\n\t\n\t  if (!color) {\n\t    if (type === 'highlight') {\n\t      color = 'FFFF00';\n\t    } else if (type === 'strikeout') {\n\t      color = 'FF0000';\n\t    }\n\t  }\n\t\n\t  // Initialize the annotation\n\t  annotation = {\n\t    type: type,\n\t    color: color,\n\t    rectangles: [].concat(_toConsumableArray(rects)).map(function (r) {\n\t      var offset = 0;\n\t\n\t      if (type === 'strikeout') {\n\t        offset = r.height / 2;\n\t      }\n\t\n\t      return (0, _utils.scaleDown)(svg, {\n\t        y: r.top + offset - boundingRect.top,\n\t        x: r.left - boundingRect.left,\n\t        width: r.width,\n\t        height: r.height\n\t      });\n\t    }).filter(function (r) {\n\t      return r.width > 0 && r.height > 0 && r.x > -1 && r.y > -1;\n\t    })\n\t  };\n\t\n\t  // Short circuit if no rectangles exist\n\t  if (annotation.rectangles.length === 0) {\n\t    return;\n\t  }\n\t\n\t  // Special treatment for area as it only supports a single rect\n\t  if (type === 'area') {\n\t    var rect = annotation.rectangles[0];\n\t    delete annotation.rectangles;\n\t    annotation.x = rect.x;\n\t    annotation.y = rect.y;\n\t    annotation.width = rect.width;\n\t    annotation.height = rect.height;\n\t  }\n\t\n\t  var _getMetadata = (0, _utils.getMetadata)(svg),\n\t      documentId = _getMetadata.documentId,\n\t      pageNumber = _getMetadata.pageNumber;\n\t\n\t  // Add the annotation\n\t\n\t\n\t  _PDFJSAnnotate2.default.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation).then(function (annotation) {\n\t    (0, _appendChild2.default)(svg, annotation);\n\t  });\n\t}\n\t\n\t/**\n\t * Enable rect behavior\n\t */\n\tfunction enableRect(type) {\n\t  _type = type;\n\t\n\t  if (_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = true;\n\t  document.addEventListener('mouseup', handleDocumentMouseup);\n\t  document.addEventListener('mousedown', handleDocumentMousedown);\n\t  document.addEventListener('keyup', handleDocumentKeyup);\n\t}\n\t\n\t/**\n\t * Disable rect behavior\n\t */\n\tfunction disableRect() {\n\t  if (!_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = false;\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t  document.removeEventListener('mousedown', handleDocumentMousedown);\n\t  document.removeEventListener('keyup', handleDocumentKeyup);\n\t}\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.setText = setText;\n\texports.enableText = enableText;\n\texports.disableText = disableText;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar _enabled = false;\n\tvar input = void 0;\n\tvar _textSize = void 0;\n\tvar _textColor = void 0;\n\t\n\t/**\n\t * Handle document.mouseup event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleDocumentMouseup(e) {\n\t  if (input || !(0, _utils.findSVGAtPoint)(e.clientX, e.clientY)) {\n\t    return;\n\t  }\n\t\n\t  input = document.createElement('input');\n\t  input.setAttribute('id', 'pdf-annotate-text-input');\n\t  input.setAttribute('placeholder', 'Enter text');\n\t  input.style.border = '3px solid ' + _utils.BORDER_COLOR;\n\t  input.style.borderRadius = '3px';\n\t  input.style.position = 'absolute';\n\t  input.style.top = e.clientY + 'px';\n\t  input.style.left = e.clientX + 'px';\n\t  input.style.fontSize = _textSize + 'px';\n\t\n\t  input.addEventListener('blur', handleInputBlur);\n\t  input.addEventListener('keyup', handleInputKeyup);\n\t\n\t  document.body.appendChild(input);\n\t  input.focus();\n\t}\n\t\n\t/**\n\t * Handle input.blur event\n\t */\n\tfunction handleInputBlur() {\n\t  saveText();\n\t}\n\t\n\t/**\n\t * Handle input.keyup event\n\t *\n\t * @param {Event} e The DOM event to handle\n\t */\n\tfunction handleInputKeyup(e) {\n\t  if (e.keyCode === 27) {\n\t    closeInput();\n\t  } else if (e.keyCode === 13) {\n\t    saveText();\n\t  }\n\t}\n\t\n\t/**\n\t * Save a text annotation from input\n\t */\n\tfunction saveText() {\n\t  if (input.value.trim().length > 0) {\n\t    var clientX = parseInt(input.style.left, 10);\n\t    var clientY = parseInt(input.style.top, 10);\n\t    var svg = (0, _utils.findSVGAtPoint)(clientX, clientY);\n\t    if (!svg) {\n\t      return;\n\t    }\n\t\n\t    var _getMetadata = (0, _utils.getMetadata)(svg),\n\t        documentId = _getMetadata.documentId,\n\t        pageNumber = _getMetadata.pageNumber;\n\t\n\t    var rect = svg.getBoundingClientRect();\n\t    var annotation = Object.assign({\n\t      type: 'textbox',\n\t      size: _textSize,\n\t      color: _textColor,\n\t      content: input.value.trim()\n\t    }, (0, _utils.scaleDown)(svg, {\n\t      x: clientX - rect.left,\n\t      y: clientY - rect.top,\n\t      width: input.offsetWidth,\n\t      height: input.offsetHeight\n\t    }));\n\t\n\t    _PDFJSAnnotate2.default.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation).then(function (annotation) {\n\t      (0, _appendChild2.default)(svg, annotation);\n\t    });\n\t  }\n\t\n\t  closeInput();\n\t}\n\t\n\t/**\n\t * Close the input\n\t */\n\tfunction closeInput() {\n\t  try {\n\t    if (input) {\n\t      input.removeEventListener('blur', handleInputBlur);\n\t      input.removeEventListener('keyup', handleInputKeyup);\n\t      document.body.removeChild(input);\n\t      input = null;\n\t    }\n\t  } catch (e) {\n\t    console.log('Try/catch is necessary because exist a error in Safari');\n\t  }\n\t}\n\t\n\t/**\n\t * Set the text attributes\n\t *\n\t * @param {Number} textSize The size of the text\n\t * @param {String} textColor The color of the text\n\t */\n\tfunction setText() {\n\t  var textSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12;\n\t  var textColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '000000';\n\t\n\t  _textSize = parseInt(textSize, 10);\n\t  _textColor = textColor;\n\t}\n\t\n\t/**\n\t * Enable text behavior\n\t */\n\tfunction enableText() {\n\t  if (_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = true;\n\t  document.addEventListener('mouseup', handleDocumentMouseup);\n\t}\n\t\n\t/**\n\t * Disable text behavior\n\t */\n\tfunction disableText() {\n\t  if (!_enabled) {\n\t    return;\n\t  }\n\t\n\t  _enabled = false;\n\t  document.removeEventListener('mouseup', handleDocumentMouseup);\n\t}\n\n/***/ },\n/* 55 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\t\n\texports.createPage = createPage;\n\texports.renderPage = renderPage;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _renderScreenReaderHints = __webpack_require__(56);\n\t\n\tvar _renderScreenReaderHints2 = _interopRequireDefault(_renderScreenReaderHints);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t// Template for creating a new page\n\tvar PAGE_TEMPLATE = '\\n  <div style=\"visibility: hidden;\" class=\"page\" data-loaded=\"false\">\\n    <div class=\"canvasWrapper\">\\n      <canvas></canvas>\\n    </div>\\n    <svg class=\"annotationLayer\"></svg>\\n    <div class=\"textLayer\"></div>\\n  </div>\\n';\n\t\n\t/**\n\t * Create a new page to be appended to the DOM.\n\t *\n\t * @param {Number} pageNumber The page number that is being created\n\t * @return {HTMLElement}\n\t */\n\tfunction createPage(pageNumber) {\n\t  var temp = document.createElement('div');\n\t  temp.innerHTML = PAGE_TEMPLATE;\n\t\n\t  var page = temp.children[0];\n\t  var canvas = page.querySelector('canvas');\n\t\n\t  page.setAttribute('id', 'pageContainer' + pageNumber);\n\t  page.setAttribute('data-page-number', pageNumber);\n\t\n\t  canvas.mozOpaque = true;\n\t  canvas.setAttribute('id', 'page' + pageNumber);\n\t\n\t  // let svg = page.querySelector('.');\n\t  //   // let svg = document.body;\n\t  // console.log(svg)\n\t  // // let svg = document.getElementById();\n\t  //\n\t  // document.addEventListener('click', function handleDocumentClick(e) {\n\t  //   console.log(click)\n\t  //     if (!findSVGAtPoint(e.clientX, e.clientY)) {\n\t  //         return;\n\t  //     }\n\t  //\n\t  //     let target = findAnnotationAtPoint(e.clientX, e.clientY);\n\t  //\n\t  //     // Emit annotation:blur if clickNode is no longer clicked\n\t  //     if (clickNode && clickNode !== target) {\n\t  //         emitter.emit('annotation:blur', clickNode);\n\t  //     }\n\t  //\n\t  //     // Emit annotation:click if target was clicked\n\t  //     if (target) {\n\t  //         emitter.emit('annotation:click', target);\n\t  //     }\n\t  //\n\t  //     clickNode = target;\n\t  // });\n\t\n\t  return page;\n\t}\n\t\n\t/**\n\t * Render a page that has already been created.\n\t *\n\t * @param {Number} pageNumber The page number to be rendered\n\t * @param {Object} renderOptions The options for rendering\n\t * @return {Promise} Settled once rendering has completed\n\t *  A settled Promise will be either:\n\t *    - fulfilled: [pdfPage, annotations]\n\t *    - rejected: Error\n\t */\n\tfunction renderPage(pageNumber, annotations, renderOptions) {\n\t  var documentId = renderOptions.documentId,\n\t      pdfDocument = renderOptions.pdfDocument,\n\t      scale = renderOptions.scale,\n\t      rotate = renderOptions.rotate;\n\t\n\t  // Load the page and annotations\n\t\n\t  return Promise.all([pdfDocument.getPage(pageNumber)]).then(function (_ref) {\n\t    var _ref2 = _slicedToArray(_ref, 1),\n\t        pdfPage = _ref2[0];\n\t\n\t    var page = document.getElementById('pageContainer' + pageNumber);\n\t    var svg = page.querySelector('.annotationLayer');\n\t    var canvas = page.querySelector('.canvasWrapper canvas');\n\t    var canvasContext = canvas.getContext('2d', { alpha: false });\n\t    var viewport = pdfPage.getViewport(scale);\n\t    var transform = scalePage(pageNumber, viewport, canvasContext);\n\t\n\t    // Render the page\n\t    return Promise.all([pdfPage.render({ canvasContext: canvasContext, viewport: viewport, transform: transform }), _PDFJSAnnotate2.default.render(svg, viewport, { pageNumber: pageNumber, documentId: documentId, annotations: annotations[pageNumber] })]).then(function () {\n\t      // Text content is needed for a11y, but is also necessary for creating\n\t      // highlight and strikeout annotations which require selecting text.\n\t      return pdfPage.getTextContent({ normalizeWhitespace: true }).then(function (textContent) {\n\t        return new Promise(function (resolve, reject) {\n\t          // Render text layer for a11y of text content\n\t          var textLayer = page.querySelector('.textLayer');\n\t          var textLayerFactory = new pdfjsViewer.DefaultTextLayerFactory();\n\t          var textLayerBuilder = textLayerFactory.createTextLayerBuilder(textLayer, pageNumber - 1, viewport);\n\t          textLayerBuilder.setTextContent(textContent);\n\t          textLayerBuilder.render();\n\t\n\t          // Enable a11y for annotations\n\t          // Timeout is needed to wait for `textLayerBuilder.render`\n\t          setTimeout(function () {\n\t            try {\n\t              (0, _renderScreenReaderHints2.default)(annotations.annotations);\n\t              resolve();\n\t            } catch (e) {\n\t              reject(e);\n\t            }\n\t          });\n\t        });\n\t      });\n\t    }).then(function () {\n\t      // Indicate that the page was loaded\n\t      page.setAttribute('data-loaded', 'true');\n\t\n\t      return [pdfPage, annotations];\n\t    });\n\t  });\n\t}\n\t\n\t/**\n\t * Scale the elements of a page.\n\t *\n\t * @param {Number} pageNumber The page number to be scaled\n\t * @param {Object} viewport The viewport of the PDF page (see pdfPage.getViewport(scale, rotate))\n\t * @param {Object} context The canvas context that the PDF page is rendered to\n\t * @return {Array} The transform data for rendering the PDF page\n\t */\n\tfunction scalePage(pageNumber, viewport, context) {\n\t  var page = document.getElementById('pageContainer' + pageNumber);\n\t  var canvas = page.querySelector('.canvasWrapper canvas');\n\t  var svg = page.querySelector('.annotationLayer');\n\t  var wrapper = page.querySelector('.canvasWrapper');\n\t  var textLayer = page.querySelector('.textLayer');\n\t  var outputScale = getOutputScale(context);\n\t  var transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0];\n\t  var sfx = approximateFraction(outputScale.sx);\n\t  var sfy = approximateFraction(outputScale.sy);\n\t\n\t  // Adjust width/height for scale\n\t  page.style.visibility = '';\n\t  canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]);\n\t  canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]);\n\t  canvas.style.width = roundToDivide(viewport.width, sfx[1]) + 'px';\n\t  canvas.style.height = roundToDivide(viewport.height, sfx[1]) + 'px';\n\t  svg.setAttribute('width', viewport.width);\n\t  svg.setAttribute('height', viewport.height);\n\t  svg.style.width = viewport.width + 'px';\n\t  svg.style.height = viewport.height + 'px';\n\t  page.style.width = viewport.width + 'px';\n\t  page.style.height = viewport.height + 'px';\n\t  wrapper.style.width = viewport.width + 'px';\n\t  wrapper.style.height = viewport.height + 'px';\n\t  textLayer.style.width = viewport.width + 'px';\n\t  textLayer.style.height = viewport.height + 'px';\n\t\n\t  return transform;\n\t}\n\t\n\t/**\n\t * The following methods are taken from mozilla/pdf.js and as such fall under\n\t * the Apache License (http://www.apache.org/licenses/).\n\t *\n\t * Original source can be found at mozilla/pdf.js:\n\t * https://github.com/mozilla/pdf.js/blob/master/web/ui_utils.js\n\t */\n\t\n\t/**\n\t * Approximates a float number as a fraction using Farey sequence (max order\n\t * of 8).\n\t *\n\t * @param {Number} x Positive float number\n\t * @return {Array} Estimated fraction: the first array item is a numerator,\n\t *                 the second one is a denominator.\n\t */\n\tfunction approximateFraction(x) {\n\t  // Fast path for int numbers or their inversions.\n\t  if (Math.floor(x) === x) {\n\t    return [x, 1];\n\t  }\n\t\n\t  var xinv = 1 / x;\n\t  var limit = 8;\n\t  if (xinv > limit) {\n\t    return [1, limit];\n\t  } else if (Math.floor(xinv) === xinv) {\n\t    return [1, xinv];\n\t  }\n\t\n\t  var x_ = x > 1 ? xinv : x;\n\t\n\t  // a/b and c/d are neighbours in Farey sequence.\n\t  var a = 0,\n\t      b = 1,\n\t      c = 1,\n\t      d = 1;\n\t\n\t  // Limit search to order 8.\n\t  while (true) {\n\t    // Generating next term in sequence (order of q).\n\t    var p = a + c,\n\t        q = b + d;\n\t    if (q > limit) {\n\t      break;\n\t    }\n\t    if (x_ <= p / q) {\n\t      c = p;d = q;\n\t    } else {\n\t      a = p;b = q;\n\t    }\n\t  }\n\t\n\t  // Select closest of neighbours to x.\n\t  if (x_ - a / b < c / d - x_) {\n\t    return x_ === x ? [a, b] : [b, a];\n\t  } else {\n\t    return x_ === x ? [c, d] : [d, c];\n\t  }\n\t}\n\t\n\tfunction getOutputScale(ctx) {\n\t  var devicePixelRatio = window.devicePixelRatio || 1;\n\t  var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;\n\t  var pixelRatio = devicePixelRatio / backingStoreRatio;\n\t  return {\n\t    sx: pixelRatio,\n\t    sy: pixelRatio,\n\t    scaled: pixelRatio !== 1\n\t  };\n\t}\n\t\n\tfunction roundToDivide(x, div) {\n\t  var r = x % div;\n\t  return r === 0 ? x : Math.round(x - r + div);\n\t}\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderScreenReaderHints;\n\t\n\tvar _insertScreenReaderHint = __webpack_require__(57);\n\t\n\tvar _insertScreenReaderHint2 = _interopRequireDefault(_insertScreenReaderHint);\n\t\n\tvar _initEventHandlers = __webpack_require__(63);\n\t\n\tvar _initEventHandlers2 = _interopRequireDefault(_initEventHandlers);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t// TODO This is not the right place for this to live\n\t(0, _initEventHandlers2.default)();\n\t\n\t/**\n\t * Insert hints into the DOM for screen readers.\n\t *\n\t * @param {Array} annotations The annotations that hints are inserted for\n\t */\n\tfunction renderScreenReaderHints(annotations) {\n\t  annotations = Array.isArray(annotations) ? annotations : [];\n\t\n\t  // Insert hints for each type\n\t  Object.keys(SORT_TYPES).forEach(function (type) {\n\t    var sortBy = SORT_TYPES[type];\n\t    annotations.filter(function (a) {\n\t      return a.type === type;\n\t    }).sort(sortBy).forEach(function (a, i) {\n\t      return (0, _insertScreenReaderHint2.default)(a, i + 1);\n\t    });\n\t  });\n\t}\n\t\n\t// Sort annotations first by y, then by x.\n\t// This allows hints to be injected in the order they appear,\n\t// which makes numbering them easier.\n\tfunction sortByPoint(a, b) {\n\t  if (a.y < b.y) {\n\t    return a.x - b.x;\n\t  } else {\n\t    return 1;\n\t  }\n\t}\n\t\n\t// Sort annotation by it's first rectangle\n\tfunction sortByRectPoint(a, b) {\n\t  return sortByPoint(a.rectangles[0], b.rectangles[0]);\n\t}\n\t\n\t// Sort annotation by it's first line\n\tfunction sortByLinePoint(a, b) {\n\t  var lineA = a.lines[0];\n\t  var lineB = b.lines[0];\n\t  return sortByPoint({ x: lineA[0], y: lineA[1] }, { x: lineB[0], y: lineB[1] });\n\t}\n\t\n\t// Arrange supported types and associated sort methods\n\tvar SORT_TYPES = {\n\t  'highlight': sortByRectPoint,\n\t  'strikeout': sortByRectPoint,\n\t  'drawing': sortByLinePoint,\n\t  'textbox': sortByPoint,\n\t  'point': sortByPoint,\n\t  'area': sortByPoint\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = insertScreenReaderHint;\n\t\n\tvar _createScreenReaderOnly = __webpack_require__(58);\n\t\n\tvar _createScreenReaderOnly2 = _interopRequireDefault(_createScreenReaderOnly);\n\t\n\tvar _insertElementWithinChildren = __webpack_require__(59);\n\t\n\tvar _insertElementWithinChildren2 = _interopRequireDefault(_insertElementWithinChildren);\n\t\n\tvar _insertElementWithinElement = __webpack_require__(60);\n\t\n\tvar _insertElementWithinElement2 = _interopRequireDefault(_insertElementWithinElement);\n\t\n\tvar _renderScreenReaderComments = __webpack_require__(61);\n\t\n\tvar _renderScreenReaderComments2 = _interopRequireDefault(_renderScreenReaderComments);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t// Annotation types that support comments\n\tvar COMMENT_TYPES = ['highlight', 'point', 'area'];\n\t\n\t/**\n\t * Insert a hint into the DOM for screen readers for a specific annotation.\n\t *\n\t * @param {Object} annotation The annotation to insert a hint for\n\t * @param {Number} num The number of the annotation out of all annotations of the same type\n\t */\n\tfunction insertScreenReaderHint(annotation) {\n\t  var num = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\t\n\t  switch (annotation.type) {\n\t    case 'highlight':\n\t    case 'strikeout':\n\t      var rects = annotation.rectangles;\n\t      var first = rects[0];\n\t      var last = rects[rects.length - 1];\n\t\n\t      (0, _insertElementWithinElement2.default)((0, _createScreenReaderOnly2.default)('Begin ' + annotation.type + ' annotation ' + num, annotation.uuid), first.x, first.y, annotation.page, true);\n\t\n\t      (0, _insertElementWithinElement2.default)((0, _createScreenReaderOnly2.default)('End ' + annotation.type + ' annotation ' + num, annotation.uuid + '-end'), last.x + last.width, last.y, annotation.page, false);\n\t      break;\n\t\n\t    case 'textbox':\n\t    case 'point':\n\t      var text = annotation.type === 'textbox' ? ' (content: ' + annotation.content + ')' : '';\n\t\n\t      (0, _insertElementWithinChildren2.default)((0, _createScreenReaderOnly2.default)(annotation.type + ' annotation ' + num + text, annotation.uuid), annotation.x, annotation.y, annotation.page);\n\t      break;\n\t\n\t    case 'drawing':\n\t    case 'area':\n\t      var x = typeof annotation.x !== 'undefined' ? annotation.x : annotation.lines[0][0];\n\t      var y = typeof annotation.y !== 'undefined' ? annotation.y : annotation.lines[0][1];\n\t\n\t      (0, _insertElementWithinChildren2.default)((0, _createScreenReaderOnly2.default)('Unlabeled drawing', annotation.uuid), x, y, annotation.page);\n\t      break;\n\t  }\n\t\n\t  // Include comments in screen reader hint\n\t  if (COMMENT_TYPES.includes(annotation.type)) {\n\t    (0, _renderScreenReaderComments2.default)(annotation.documentId, annotation.uuid);\n\t  }\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 58 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = createScreenReaderOnly;\n\t/**\n\t * Create a node that is only visible to screen readers\n\t *\n\t * @param {String} content The text content that should be read by screen reader\n\t * @param {String} [annotationId] The ID of the annotation assocaited\n\t * @return {Element} An Element that is only visible to screen readers\n\t */\n\tfunction createScreenReaderOnly(content, annotationId) {\n\t  var node = document.createElement('div');\n\t  var text = document.createTextNode(content);\n\t  node.appendChild(text);\n\t  node.setAttribute('id', 'pdf-annotate-screenreader-' + annotationId);\n\t  node.style.position = 'absolute';\n\t  node.style.left = '-10000px';\n\t  node.style.top = 'auto';\n\t  node.style.width = '1px';\n\t  node.style.height = '1px';\n\t  node.style.overflow = 'hidden';\n\t  return node;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = insertElementWithinChildren;\n\t\n\tvar _insertElementWithinElement = __webpack_require__(60);\n\t\n\tvar _insertElementWithinElement2 = _interopRequireDefault(_insertElementWithinElement);\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\t/**\n\t * Insert an element at a point within the document.\n\t * This algorithm will try to insert between elements if possible.\n\t * It will however use `insertElementWithinElement` if it is more accurate.\n\t *\n\t * @param {Element} el The element to be inserted\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @param {Number} pageNumber The page number to limit elements to\n\t * @return {Boolean} True if element was able to be inserted, otherwise false\n\t */\n\tfunction insertElementWithinChildren(el, x, y, pageNumber) {\n\t  // Try and use most accurate method of inserting within an element\n\t  if ((0, _insertElementWithinElement2.default)(el, x, y, pageNumber, true)) {\n\t    return true;\n\t  }\n\t\n\t  // Fall back to inserting between elements\n\t  var svg = document.querySelector('svg[data-pdf-annotate-page=\"' + pageNumber + '\"]');\n\t  var rect = svg.getBoundingClientRect();\n\t  var nodes = [].concat(_toConsumableArray(svg.parentNode.querySelectorAll('.textLayer > div')));\n\t\n\t  y = (0, _utils.scaleUp)(svg, { y: y }).y + rect.top;\n\t  x = (0, _utils.scaleUp)(svg, { x: x }).x + rect.left;\n\t\n\t  // Find the best node to insert before\n\t  for (var i = 0, l = nodes.length; i < l; i++) {\n\t    var n = nodes[i];\n\t    var r = n.getBoundingClientRect();\n\t    if (y <= r.top) {\n\t      n.parentNode.insertBefore(el, n);\n\t      return true;\n\t    }\n\t  }\n\t\n\t  // If all else fails try to append to the bottom\n\t  var textLayer = svg.parentNode.querySelector('.textLayer');\n\t  if (textLayer) {\n\t    var textRect = textLayer.getBoundingClientRect();\n\t    if ((0, _utils.pointIntersectsRect)(x, y, textRect)) {\n\t      textLayer.appendChild(el);\n\t      return true;\n\t    }\n\t  }\n\t\n\t  return false;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = insertElementWithinElement;\n\t\n\tvar _utils = __webpack_require__(6);\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\t/**\n\t * Insert an element at a point within the document.\n\t * This algorithm will only insert within an element amidst it's text content.\n\t *\n\t * @param {Element} el The element to be inserted\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @param {Number} pageNumber The page number to limit elements to\n\t * @param {Boolean} insertBefore Whether the element is to be inserted before or after x\n\t * @return {Boolean} True if element was able to be inserted, otherwise false\n\t */\n\tfunction insertElementWithinElement(el, x, y, pageNumber, insertBefore) {\n\t  var OFFSET_ADJUST = 2;\n\t\n\t  // If inserting before adjust `x` by looking for element a few px to the right\n\t  // Otherwise adjust a few px to the left\n\t  // This is to allow a little tolerance by searching within the box, instead\n\t  // of getting a false negative by testing right on the border.\n\t  x = Math.max(x + OFFSET_ADJUST * (insertBefore ? 1 : -1), 0);\n\t\n\t  var node = textLayerElementFromPoint(x, y + OFFSET_ADJUST, pageNumber);\n\t  if (!node) {\n\t    return false;\n\t  }\n\t\n\t  // Now that node has been found inverse the adjustment for `x`.\n\t  // This is done to accomodate tolerance by cutting off on the outside of the\n\t  // text boundary, instead of missing a character by cutting off within.\n\t  x = x + OFFSET_ADJUST * (insertBefore ? -1 : 1);\n\t\n\t  var svg = document.querySelector('svg[data-pdf-annotate-page=\"' + pageNumber + '\"]');\n\t  var left = (0, _utils.scaleDown)(svg, { left: node.getBoundingClientRect().left }).left - svg.getBoundingClientRect().left;\n\t  var temp = node.cloneNode(true);\n\t  var head = temp.innerHTML.split('');\n\t  var tail = [];\n\t\n\t  // Insert temp off screen\n\t  temp.style.position = 'absolute';\n\t  temp.style.top = '-10000px';\n\t  temp.style.left = '-10000px';\n\t  document.body.appendChild(temp);\n\t\n\t  while (head.length) {\n\t    // Don't insert within HTML tags\n\t    if (head[head.length - 1] === '>') {\n\t      while (head.length) {\n\t        tail.unshift(head.pop());\n\t        if (tail[0] === '<') {\n\t          break;\n\t        }\n\t      }\n\t    }\n\t\n\t    // Check if width of temp based on current head value satisfies x\n\t    temp.innerHTML = head.join('');\n\t    var width = (0, _utils.scaleDown)(svg, { width: temp.getBoundingClientRect().width }).width;\n\t    if (left + width <= x) {\n\t      break;\n\t    }\n\t    tail.unshift(head.pop());\n\t  }\n\t\n\t  // Update original node with new markup, including element to be inserted\n\t  node.innerHTML = head.join('') + el.outerHTML + tail.join('');\n\t  temp.parentNode.removeChild(temp);\n\t\n\t  return true;\n\t}\n\t\n\t/**\n\t * Get a text layer element at a given point on a page\n\t *\n\t * @param {Number} x The x coordinate of the point\n\t * @param {Number} y The y coordinate of the point\n\t * @param {Number} pageNumber The page to limit elements to\n\t * @return {Element} First text layer element found at the point\n\t */\n\tfunction textLayerElementFromPoint(x, y, pageNumber) {\n\t  var svg = document.querySelector('svg[data-pdf-annotate-page=\"' + pageNumber + '\"]');\n\t  var rect = svg.getBoundingClientRect();\n\t  y = (0, _utils.scaleUp)(svg, { y: y }).y + rect.top;\n\t  x = (0, _utils.scaleUp)(svg, { x: x }).x + rect.left;\n\t  return [].concat(_toConsumableArray(svg.parentNode.querySelectorAll('.textLayer [data-canvas-width]'))).filter(function (el) {\n\t    return (0, _utils.pointIntersectsRect)(x, y, el.getBoundingClientRect());\n\t  })[0];\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = renderScreenReaderComments;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _insertScreenReaderComment = __webpack_require__(62);\n\t\n\tvar _insertScreenReaderComment2 = _interopRequireDefault(_insertScreenReaderComment);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Insert the comments into the DOM to be available by screen reader\n\t *\n\t * Example output:\n\t *   <div class=\"screenReaderOnly\">\n\t *    <div>Begin highlight 1</div>\n\t *    <ol aria-label=\"Comments\">\n\t *      <li>Foo</li>\n\t *      <li>Bar</li>\n\t *      <li>Baz</li>\n\t *      <li>Qux</li>\n\t *    </ol>\n\t *  </div>\n\t *  <div>Some highlighted text goes here...</div>\n\t *  <div class=\"screenReaderOnly\">End highlight 1</div>\n\t *\n\t * NOTE: `screenReaderOnly` is not a real class, just used for brevity\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {String} annotationId The ID of the annotation\n\t * @param {Array} [comments] Optionally preloaded comments to be rendered\n\t * @return {Promise}\n\t */\n\tfunction renderScreenReaderComments(documentId, annotationId, comments) {\n\t  var promise = void 0;\n\t\n\t  if (Array.isArray(comments)) {\n\t    promise = Promise.resolve(comments);\n\t  } else {\n\t    promise = _PDFJSAnnotate2.default.getStoreAdapter().getComments(documentId, annotationId);\n\t  }\n\t\n\t  return promise.then(function (comments) {\n\t    // Node needs to be found by querying DOM as it may have been inserted as innerHTML\n\t    // leaving `screenReaderNode` as an invalid reference (see `insertElementWithinElement`).\n\t    var node = document.getElementById('pdf-annotate-screenreader-' + annotationId);\n\t    if (node) {\n\t      var list = document.createElement('ol');\n\t      list.setAttribute('id', 'pdf-annotate-screenreader-comment-list-' + annotationId);\n\t      list.setAttribute('aria-label', 'Comments');\n\t      node.appendChild(list);\n\t      comments.forEach(_insertScreenReaderComment2.default);\n\t    }\n\t  });\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 62 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = insertScreenReaderComment;\n\t/**\n\t * Insert a comment into the DOM to be available by screen reader\n\t *\n\t * @param {Object} comment The comment to be inserted\n\t */\n\tfunction insertScreenReaderComment(comment) {\n\t  if (!comment) {\n\t    return;\n\t  }\n\t\n\t  var list = document.querySelector('#pdf-annotate-screenreader-' + comment.annotation + ' ol');\n\t  if (list) {\n\t    var item = document.createElement('li');\n\t    item.setAttribute('id', 'pdf-annotate-screenreader-comment-' + comment.uuid);\n\t    item.appendChild(document.createTextNode('' + comment.content));\n\t    list.appendChild(item);\n\t  }\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = initEventHandlers;\n\t\n\tvar _insertScreenReaderHint = __webpack_require__(57);\n\t\n\tvar _insertScreenReaderHint2 = _interopRequireDefault(_insertScreenReaderHint);\n\t\n\tvar _renderScreenReaderHints = __webpack_require__(56);\n\t\n\tvar _renderScreenReaderHints2 = _interopRequireDefault(_renderScreenReaderHints);\n\t\n\tvar _insertScreenReaderComment = __webpack_require__(62);\n\t\n\tvar _insertScreenReaderComment2 = _interopRequireDefault(_insertScreenReaderComment);\n\t\n\tvar _renderScreenReaderComments = __webpack_require__(61);\n\t\n\tvar _renderScreenReaderComments2 = _interopRequireDefault(_renderScreenReaderComments);\n\t\n\tvar _event = __webpack_require__(4);\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Initialize the event handlers for keeping screen reader hints synced with data\n\t */\n\tfunction initEventHandlers() {\n\t  (0, _event.addEventListener)('annotation:add', function (documentId, pageNumber, annotation) {\n\t    reorderAnnotationsByType(documentId, pageNumber, annotation.type);\n\t  });\n\t  (0, _event.addEventListener)('annotation:edit', function (documentId, annotationId, annotation) {\n\t    reorderAnnotationsByType(documentId, annotation.page, annotation.type);\n\t  });\n\t  (0, _event.addEventListener)('annotation:delete', removeAnnotation);\n\t  (0, _event.addEventListener)('comment:add', insertComment);\n\t  (0, _event.addEventListener)('comment:update', updateComment);\n\t  (0, _event.addEventListener)('comment:delete', removeComment);\n\t}\n\t\n\t/**\n\t * Reorder the annotation numbers by annotation type\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {Number} pageNumber The page number of the annotations\n\t * @param {Strig} type The annotation type\n\t */\n\tfunction reorderAnnotationsByType(documentId, pageNumber, type) {\n\t  _PDFJSAnnotate2.default.getStoreAdapter().getAnnotations(documentId).then(function (annotationsByPage) {\n\t    var annotations = [];\n\t    var _iteratorNormalCompletion = true;\n\t    var _didIteratorError = false;\n\t    var _iteratorError = undefined;\n\t\n\t    try {\n\t      for (var _iterator = Object.keys(annotationsByPage)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t        var page = _step.value;\n\t\n\t        for (var annotation in annotationsByPage[page]) {\n\t          if (annotation.type == type) annotations.push(annotation);\n\t        }\n\t      }\n\t    } catch (err) {\n\t      _didIteratorError = true;\n\t      _iteratorError = err;\n\t    } finally {\n\t      try {\n\t        if (!_iteratorNormalCompletion && _iterator.return) {\n\t          _iterator.return();\n\t        }\n\t      } finally {\n\t        if (_didIteratorError) {\n\t          throw _iteratorError;\n\t        }\n\t      }\n\t    }\n\t\n\t    return annotations;\n\t    //   annotationsByPage(page) =\n\t    //       return annotationsByPage[page].filter((a) => {\n\t    //         return a.type === type;\n\t    //       });\n\t    // return annotationsByPage;\n\t  }).then(function (annotations) {\n\t    annotations.forEach(function (a) {\n\t      removeAnnotation(documentId, a.uuid);\n\t    });\n\t\n\t    return annotations;\n\t  }).then(_renderScreenReaderHints2.default);\n\t}\n\t\n\t/**\n\t * Remove the screen reader hint for an annotation\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {String} annotationId The Id of the annotation\n\t */\n\tfunction removeAnnotation(documentId, annotationId) {\n\t  removeElementById('pdf-annotate-screenreader-' + annotationId);\n\t  removeElementById('pdf-annotate-screenreader-' + annotationId + '-end');\n\t}\n\t\n\t/**\n\t * Insert a screen reader hint for a comment\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {String} annotationId The ID of tha assocated annotation\n\t * @param {Object} comment The comment to insert a hint for\n\t */\n\tfunction insertComment(documentId, annotationId, comment) {\n\t  var list = document.querySelector('pdf-annotate-screenreader-comment-list-' + annotationId);\n\t  var promise = void 0;\n\t\n\t  if (!list) {\n\t    promise = (0, _renderScreenReaderComments2.default)(documentId, annotationId, []).then(function () {\n\t      list = document.querySelector('pdf-annotate-screenreader-comment-list-' + annotationId);\n\t      return true;\n\t    });\n\t  } else {\n\t    promise = Promise.resolve(true);\n\t  }\n\t\n\t  promise.then(function () {\n\t    (0, _insertScreenReaderComment2.default)(comment);\n\t  });\n\t}\n\t\n\t/**\n\t * Update a comment content\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {String} annotationId The ID of tha assocated annotation\n\t * @param {Object} comment The comment to insert a hint for\n\t */\n\tfunction updateComment(documentId, annotationId, comment) {\n\t  alert('updateComment');\n\t}\n\t\n\t/**\n\t * Remove a screen reader hint for a comment\n\t *\n\t * @param {String} documentId The ID of the document\n\t * @param {String} commentId The ID of the comment\n\t */\n\tfunction removeComment(documentId, commentId) {\n\t  removeElementById('pdf-annotate-screenreader-comment-' + commentId);\n\t}\n\t\n\t/**\n\t * Remove an element from the DOM by it's ID if it exists\n\t *\n\t * @param {String} elementID The ID of the element to be removed\n\t */\n\tfunction removeElementById(elementId) {\n\t  var el = document.getElementById(elementId);\n\t  if (el) {\n\t    el.parentNode.removeChild(el);\n\t  }\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = render;\n\t\n\tvar _PDFJSAnnotate = __webpack_require__(1);\n\t\n\tvar _PDFJSAnnotate2 = _interopRequireDefault(_PDFJSAnnotate);\n\t\n\tvar _appendChild = __webpack_require__(41);\n\t\n\tvar _appendChild2 = _interopRequireDefault(_appendChild);\n\t\n\tvar _renderScreenReaderHints = __webpack_require__(56);\n\t\n\tvar _renderScreenReaderHints2 = _interopRequireDefault(_renderScreenReaderHints);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Render the response from PDFJSAnnotate.getStoreAdapter().getAnnotations to SVG\n\t *\n\t * @param {SVGElement} svg The SVG element to render the annotations to\n\t * @param {Object} viewport The page viewport data\n\t * @param {Object} data The response from PDFJSAnnotate.getStoreAdapter().getAnnotations\n\t * @return {Promise} Settled once rendering has completed\n\t *  A settled Promise will be either:\n\t *    - fulfilled: SVGElement\n\t *    - rejected: Error\n\t */\n\tfunction render(svg, viewport, data) {\n\t  return new Promise(function (resolve, reject) {\n\t    // Reset the content of the SVG\n\t    svg.innerHTML = '';\n\t    svg.setAttribute('data-pdf-annotate-container', true);\n\t    svg.setAttribute('data-pdf-annotate-viewport', JSON.stringify(viewport));\n\t    svg.removeAttribute('data-pdf-annotate-document');\n\t    svg.removeAttribute('data-pdf-annotate-page');\n\t\n\t    // If there's no data nothing can be done\n\t    if (!data) {\n\t      return resolve(svg);\n\t    }\n\t\n\t    svg.setAttribute('data-pdf-annotate-document', data.documentId);\n\t    svg.setAttribute('data-pdf-annotate-page', data.pageNumber);\n\t\n\t    // Make sure annotations is an array\n\t    if (!Array.isArray(data.annotations) || data.annotations.length === 0) {\n\t      return resolve(svg);\n\t    }\n\t\n\t    // Append annotation to svg\n\t    data.annotations.forEach(function (a) {\n\t      (0, _appendChild2.default)(svg, a, viewport);\n\t    });\n\t\n\t    resolve(svg);\n\t  });\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 65 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.default = initColorPicker;\n\t// Color picker component\n\tvar COLORS = [{ hex: '#000000', name: 'Black' }, { hex: '#EF4437', name: 'Red' }, { hex: '#E71F63', name: 'Pink' }, { hex: '#8F3E97', name: 'Purple' }, { hex: '#65499D', name: 'Deep Purple' }, { hex: '#4554A4', name: 'Indigo' }, { hex: '#2083C5', name: 'Blue' }, { hex: '#35A4DC', name: 'Light Blue' }, { hex: '#09BCD3', name: 'Cyan' }, { hex: '#009688', name: 'Teal' }, { hex: '#43A047', name: 'Green' }, { hex: '#8BC34A', name: 'Light Green' }, { hex: '#FDC010', name: 'Yellow' }, { hex: '#F8971C', name: 'Orange' }, { hex: '#F0592B', name: 'Deep Orange' }, { hex: '#F06291', name: 'Light Pink' }];\n\t\n\tfunction initColorPicker(el, value, onChange) {\n\t  function setColor(value) {\n\t    var fireOnChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\t\n\t    currentValue = value;\n\t    a.setAttribute('data-color', value);\n\t    a.style.background = value;\n\t    if (fireOnChange && typeof onChange === 'function') {\n\t      onChange(value);\n\t    }\n\t    closePicker();\n\t  }\n\t\n\t  function togglePicker() {\n\t    if (isPickerOpen) {\n\t      closePicker();\n\t    } else {\n\t      openPicker();\n\t    }\n\t  }\n\t\n\t  function closePicker() {\n\t    document.removeEventListener('keyup', handleDocumentKeyup);\n\t    if (picker && picker.parentNode) {\n\t      picker.parentNode.removeChild(picker);\n\t    }\n\t    isPickerOpen = false;\n\t    a.focus();\n\t  }\n\t\n\t  function openPicker() {\n\t    if (!picker) {\n\t      picker = document.createElement('div');\n\t      picker.style.background = '#fff';\n\t      picker.style.border = '1px solid #ccc';\n\t      picker.style.padding = '2px';\n\t      picker.style.position = 'absolute';\n\t      picker.style.width = '122px';\n\t      el.style.position = 'relative';\n\t\n\t      COLORS.map(createColorOption).forEach(function (c) {\n\t        c.style.margin = '2px';\n\t        c.onclick = function () {\n\t          setColor(c.getAttribute('data-color'));\n\t        };\n\t        picker.appendChild(c);\n\t      });\n\t    }\n\t\n\t    document.addEventListener('keyup', handleDocumentKeyup);\n\t    el.appendChild(picker);\n\t    isPickerOpen = true;\n\t  }\n\t\n\t  function createColorOption(color) {\n\t    var e = document.createElement('a');\n\t    e.className = 'color';\n\t    e.setAttribute('href', 'javascript://');\n\t\n\t    if (color.name) e.setAttribute('title', color.name);else e.setAttribute('title', 'Choisir une couleur');\n\t\n\t    e.setAttribute('data-color', color.hex);\n\t    e.style.background = color.hex;\n\t    return e;\n\t  }\n\t\n\t  function handleDocumentKeyup(e) {\n\t    if (e.keyCode === 27) {\n\t      closePicker();\n\t    }\n\t  }\n\t\n\t  var picker = void 0;\n\t  var isPickerOpen = false;\n\t  var currentValue = void 0;\n\t  var a = createColorOption({ hex: value });\n\t  a.onclick = togglePicker;\n\t  el.appendChild(a);\n\t  setColor(value, false);\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** static/pdfannotator/pdf-annotate.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap aa1cfb15d0a2927f54bd\n **/","import PDFJSAnnotate from './PDFJSAnnotate';\nimport {documentId, documentUrl, readonly} from './initFile';\n\nimport twitter from 'twitter-text';\nimport initColorPicker from './initColorPicker';\n\nconst { UI } = PDFJSAnnotate;\nimport {renderComments} from \"./UI/comments\";\n\nlet PAGE_HEIGHT;\nlet RENDER_OPTIONS = {\n  documentId:documentUrl,\n  pdfDocument: null,\n    enhanceTextSelection:true,\n  scale: parseFloat(localStorage.getItem(`${documentId}/scale`), 10) || 1.0\n  // rotate: parseInt(localStorage.getItem(`${documentId}/rotate`), 10) || 0\n};\n\nPDFJSAnnotate.setStoreAdapter(new PDFJSAnnotate.CRFPAStoreAdapter());\n// pdfjsLib.workerSrc = '/static/pdfannotator/pdf.worker.js';\n\n// Render stuff\n\n// let renderedPages = {};\n// document.getElementById('content-wrapper').addEventListener('scroll', function (e) {\n//   let visiblePageNum = Math.round(e.target.scrollTop / PAGE_HEIGHT) + 1;\n//   let visiblePage = document.querySelector(`.page[data-page-number=\"${visiblePageNum}\"][data-loaded=\"false\"]`);\n//   if (visiblePage) {\n//     // Prevent invoking UI.renderPage on the same page more than once.\n// \tif ( !renderedPages[visiblePageNum] ) {\n// \t  renderedPages[visiblePageNum] = true;\n// \t  setTimeout(function () {\n// \t\tUI.renderPage(visiblePageNum, RENDER_OPTIONS);\n// \t  });\n// \t}\n//   }\n// });\n\nlet NUM_PAGES = 0;\nfunction render() {\n\n  pdfjsLib.getDocument(RENDER_OPTIONS.documentId).then((pdf) => {\n    RENDER_OPTIONS.pdfDocument = pdf;\n\n    let viewer = document.getElementById('viewer');\n    viewer.innerHTML = '';\n    NUM_PAGES = pdf._pdfInfo.numPages;\n    for (let i=0; i<NUM_PAGES; i++) {\n      let page = UI.createPage(i+1);\n      viewer.appendChild(page);\n    }\n\n    PDFJSAnnotate.getAnnotations(documentId).then((annotations)=>{\n      for(let num = 1; num <= NUM_PAGES; num++) {\n          pdf.getPage(num).then(function () {\n            UI.renderPage(num, annotations, RENDER_OPTIONS).then(([pdfPage, annotations]) => {\n              let viewport = pdfPage.getViewport(RENDER_OPTIONS.scale);\n              PAGE_HEIGHT = viewport.height;\n              if($.browser.mozilla)\n                $('.textLayer>.endOfContent').remove();\n            });\n\n          });\n      }\n    });\n  });\n}\nrender();\n\n\nvar setActiveToolbarItem = function setActiveToolbarItem(type, button) {\n    let tooltype = localStorage.getItem(`${RENDER_OPTIONS.documentId}/tooltype`) || 'cursor';\n    let active = document.querySelector('.toolbar button.active');\n    if (active) {\n        active.classList.remove('active');\n\n        switch (tooltype) {\n            case 'cursor':\n                UI.disableEdit();\n                break;\n            case 'draw':\n                UI.disablePen();\n                break;\n            case 'text':\n                UI.disableText();\n                break;\n            case 'point':\n                UI.disablePoint();\n                break;\n            case 'area':\n            case 'highlight':\n            case 'strikeout':\n                UI.disableRect();\n                break;\n        }\n    }\n\n    if (button) {\n        button.classList.add('active');\n    }\n    if (tooltype !== type) {\n        localStorage.setItem(`${RENDER_OPTIONS.documentId}/tooltype`, type);\n    }\n    tooltype = type;\n\n    switch (type) {\n        case 'cursor':\n            UI.enableEdit();\n            break;\n        case 'draw':\n            UI.enablePen();\n            break;\n        case 'text':\n            UI.enableText();\n            break;\n        case 'point':\n            UI.enablePoint();\n            break;\n        case 'area':\n        case 'highlight':\n        case 'strikeout':\n            UI.enableRect(type);\n            break;\n    }\n}\nPDFJSAnnotate.setActiveToolbarItem = setActiveToolbarItem;\n\n\n\nif(!readonly) {\n// Text stuff\n    (function () {\n        let textSize;\n        let textColor;\n\n        function initText() {\n            // let size = document.querySelector('.toolbar .text-size');\n            // [8, 9, 10, 11, 12, 14, 18, 24, 30, 36, 48, 60, 72, 96].forEach((s) => {\n            //     size.appendChild(new Option(s, s));\n            // });\n            //\n            // setText(\n            //     localStorage.getItem(`${RENDER_OPTIONS.documentId}/text/size`) || 12,\n            //     localStorage.getItem(`${RENDER_OPTIONS.documentId}/text/color`) || '#EF4437'\n            // );\n            setText(\n                12, '#EF4437'\n            );\n\n            // initColorPicker(document.querySelector('.text-color'), textColor, function (value) {\n            //     setText(textSize, value);\n            // });\n        }\n\n        function setText(size, color) {\n            // let modified = false;\n            //\n            // if (textSize !== size) {\n            //     modified = true;\n            //     textSize = size;\n            //     localStorage.setItem(`${RENDER_OPTIONS.documentId}/text/size`, textSize);\n            //     // document.querySelector('.toolbar .text-size').value = textSize;\n            // }\n            //\n            // if (textColor !== color) {\n            //     modified = true;\n            //     textColor = color;\n            //     localStorage.setItem(`${RENDER_OPTIONS.documentId}/text/color`, textColor);\n            //\n            //     let selected = document.querySelector('.toolbar .text-color.color-selected');\n            //     if (selected) {\n            //         selected.classList.remove('color-selected');\n            //         selected.removeAttribute('aria-selected');\n            //     }\n            //\n            //     selected = document.querySelector(`.toolbar .text-color[data-color=\"${color}\"]`);\n            //     if (selected) {\n            //         selected.classList.add('color-selected');\n            //         selected.setAttribute('aria-selected', true);\n            //     }\n            //\n            // }\n\n            // if (modified) {\n                UI.setText(size, color);\n            // }\n        }\n\n        // function handleTextSizeChange(e) {\n        //     setText(e.target.value, textColor);\n        // }\n\n        // document.querySelector('.toolbar .text-size').addEventListener('change', handleTextSizeChange);\n\n        initText();\n    })();\n\n// Pen stuff\n    (function () {\n        let penSize;\n        let penColor;\n\n        function initPen() {\n            let size = document.querySelector('.toolbar .pen-size');\n            for (let i = 0; i < 20; i++) {\n                size.appendChild(new Option(i + 1, i + 1));\n            }\n\n            setPen(\n                localStorage.getItem(`${RENDER_OPTIONS.documentId}/pen/size`) || 1,\n                localStorage.getItem(`${RENDER_OPTIONS.documentId}/pen/color`) || '#000000'\n            );\n\n            initColorPicker(document.querySelector('.pen-color'), penColor, function (value) {\n                setPen(penSize, value);\n            });\n        }\n\n        function setPen(size, color) {\n            let modified = false;\n\n            if (penSize !== size) {\n                modified = true;\n                penSize = size;\n                localStorage.setItem(`${RENDER_OPTIONS.documentId}/pen/size`, penSize);\n                document.querySelector('.toolbar .pen-size').value = penSize;\n            }\n\n            if (penColor !== color) {\n                modified = true;\n                penColor = color;\n                localStorage.setItem(`${RENDER_OPTIONS.documentId}/pen/color`, penColor);\n\n                let selected = document.querySelector('.toolbar .pen-color.color-selected');\n                if (selected) {\n                    selected.classList.remove('color-selected');\n                    selected.removeAttribute('aria-selected');\n                }\n\n                selected = document.querySelector(`.toolbar .pen-color[data-color=\"${color}\"]`);\n                if (selected) {\n                    selected.classList.add('color-selected');\n                    selected.setAttribute('aria-selected', true);\n                }\n            }\n\n            if (modified) {\n                UI.setPen(penSize, penColor);\n            }\n        }\n\n        function handlePenSizeChange(e) {\n            setPen(e.target.value, penColor);\n        }\n\n        document.querySelector('.toolbar .pen-size').addEventListener('change', handlePenSizeChange);\n\n        initPen();\n    })();\n\n// Toolbar buttons\n    (function () {\n        let tooltype = localStorage.getItem(`${RENDER_OPTIONS.documentId}/tooltype`) || 'cursor';\n        if (tooltype) {\n            setActiveToolbarItem(tooltype, document.querySelector(`.toolbar button[data-tooltype=${tooltype}]`));\n        }\n\n\n\n        function handleToolbarClick(e) {\n            if (e.target.nodeName === 'BUTTON') {\n                setActiveToolbarItem(e.target.getAttribute('data-tooltype'), e.target);\n            }\n        }\n\n        document.querySelector('.toolbar').addEventListener('click', handleToolbarClick);\n    })();\n}\n\nif(readonly)\n  UI.enableEdit();\n\n// Scale/rotate\n(function () {\n  function setScaleRotate(scale, rotate) {\n    scale = parseFloat(scale, 10);\n    rotate = parseInt(rotate, 10);\n\n    if (RENDER_OPTIONS.scale !== scale || RENDER_OPTIONS.rotate !== rotate) {\n      RENDER_OPTIONS.scale = scale;\n      RENDER_OPTIONS.rotate = rotate;\n\n      localStorage.setItem(`${RENDER_OPTIONS.documentId}/scale`, RENDER_OPTIONS.scale);\n      localStorage.setItem(`${RENDER_OPTIONS.documentId}/rotate`, RENDER_OPTIONS.rotate % 360);\n\n      render();\n    }\n  }\n\n  function handleScaleChange(e) {\n    setScaleRotate(e.target.value, RENDER_OPTIONS.rotate);\n  }\n\n  function handleRotateCWClick() {\n    setScaleRotate(RENDER_OPTIONS.scale, RENDER_OPTIONS.rotate + 90);\n  }\n\n  function handleRotateCCWClick() {\n    setScaleRotate(RENDER_OPTIONS.scale, RENDER_OPTIONS.rotate - 90);\n  }\n\n  document.querySelector('.toolbar select.scale').value = RENDER_OPTIONS.scale;\n  document.querySelector('.toolbar select.scale').addEventListener('change', handleScaleChange);\n  // document.querySelector('.toolbar .rotate-ccw').addEventListener('click', handleRotateCCWClick);\n  // document.querySelector('.toolbar .rotate-cw').addEventListener('click', handleRotateCWClick);\n})();\n\n\nrenderComments(documentId);\n\n\nexport default PDFJSAnnotate;\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","import StoreAdapter from './adapter/StoreAdapter';\nimport CRFPAStoreAdapter from './adapter/CRFPAStoreAdapter';\nimport render from './render';\nimport UI from './UI';\n\nexport default {\n  /**\n   * Abstract class that needs to be defined so PDFJSAnnotate\n   * knows how to communicate with your server.\n   */\n  StoreAdapter,\n\n  /**\n   * Implementation of StoreAdapter that stores annotation data to localStorage.\n   */\n  CRFPAStoreAdapter,\n\n  /**\n   * Abstract instance of StoreAdapter\n   */\n  __storeAdapter: new StoreAdapter(),\n\n  /**\n   * Getter for the underlying StoreAdapter property\n   *\n   * @return {StoreAdapter}\n   */\n  getStoreAdapter() {\n    return this.__storeAdapter;\n  },\n\n  /**\n   * Setter for the underlying StoreAdapter property\n   *\n   * @param {StoreAdapter} adapter The StoreAdapter implementation to be used.\n   */\n  setStoreAdapter(adapter) {\n    // TODO this throws an error when bundled\n    // if (!(adapter instanceof StoreAdapter)) {\n    //   throw new Error('adapter must be an instance of StoreAdapter');\n    // }\n\n    this.__storeAdapter = adapter;\n  },\n\n  /**\n   * UI is a helper for instrumenting UI interactions for creating,\n   * editing, and deleting annotations in the browser.\n   */\n  UI,\n\n  /**\n   * Render the annotations for a page in the PDF Document\n   *\n   * @param {SVGElement} svg The SVG element that annotations should be rendered to\n   * @param {PageViewport} viewport The PDFPage.getViewport data\n   * @param {Object} data The StoreAdapter.getAnnotations data\n   * @return {Promise}\n   */\n  render,\n\n  /**\n   * Convenience method for getting annotation data\n   *\n   * @alias StoreAdapter.getAnnotations\n   * @param {String} documentId The ID of the document\n   * @return {Promise}\n   */\n  getAnnotations(documentId) {\n    return this.getStoreAdapter().getAnnotations(...arguments);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/PDFJSAnnotate.js\n **/","import abstractFunction from '../utils/abstractFunction';\nimport { fireEvent } from '../UI/event';\n\n// Adapter should never be invoked publicly\nexport default class StoreAdapter {\n  /**\n   * Create a new StoreAdapter instance\n   *\n   * @param {Object} [definition] The definition to use for overriding abstract methods\n   */\n  constructor(definition = {}) {\n    // Copy each function from definition if it is a function we know about\n    Object.keys(definition).forEach((key) => {\n      if (typeof definition[key] === 'function' &&\n          typeof this[key] === 'function') {\n        this[key] = definition[key];\n      }\n    });\n  }\n\n  /**\n   * Get all the annotations for a given document and page number.\n   *\n   * @param {String} documentId The ID for the document the annotations belong to\n   * @param {Number} pageNumber The number of the page the annotations belong to\n   * @return {Promise}\n   */\n  __getAnnotations(documentId) { abstractFunction('getAnnotations'); }\n  get getAnnotations() { return this.__getAnnotations; }\n  set getAnnotations(fn) {\n    this.__getAnnotations = function getAnnotations(documentId) {\n      return fn(...arguments).then((annotations) => {\n        // TODO may be best to have this happen on the server\n        // if (annotations) {\n        //   annotations.forEach((a) => {\n        //     a.documentId = documentId;\n        //   });\n        // }\n        return annotations;\n      });\n    };\n  }\n\n  /**\n   * Get the definition for a specific annotation.\n   *\n   * @param {String} documentId The ID for the document the annotation belongs to\n   * @param {String} annotationId The ID for the annotation\n   * @return {Promise}\n   */\n  getAnnotation(documentId, annotationId) { abstractFunction('getAnnotation'); }\n\n  /**\n   * Add an annotation\n   *\n   * @param {String} documentId The ID for the document to add the annotation to\n   * @param {String} pageNumber The page number to add the annotation to\n   * @param {Object} annotation The definition for the new annotation\n   * @return {Promise}\n   */\n  __addAnnotation(documentId, pageNumber, annotation) { abstractFunction('addAnnotation'); }\n  get addAnnotation() { return this.__addAnnotation; }\n  set addAnnotation(fn) {\n    this.__addAnnotation = function addAnnotation(documentId, pageNumber, annotation) {\n      return fn(...arguments).then((annotation) => {\n        fireEvent('annotation:add', documentId, pageNumber, annotation);\n        return annotation;\n      });\n    };\n  }\n\n  /**\n   * Edit an annotation\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} pageNumber the page number of the annotation\n   * @param {Object} annotation The definition of the modified annotation\n   * @return {Promise}\n   */\n  __editAnnotation(documentId, pageNumber, annotation) { abstractFunction('editAnnotation'); }\n  get editAnnotation() { return this.__editAnnotation; }\n  set editAnnotation(fn) {\n    this.__editAnnotation = function editAnnotation(documentId, annotationId, annotation) {\n      return fn(...arguments).then((annotation) => {\n        fireEvent('annotation:edit', documentId, annotationId, annotation);\n        return annotation;\n      });\n    };\n  }\n\n  /**\n   * Delete an annotation\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} annotationId The ID for the annotation\n   * @return {Promise}\n   */\n  __deleteAnnotation(documentId, annotationId) { abstractFunction('deleteAnnotation'); }\n  get deleteAnnotation() { return this.__deleteAnnotation; }\n  set deleteAnnotation(fn) {\n    this.__deleteAnnotation = function deleteAnnotation(documentId, annotationId) {\n      return fn(...arguments).then((success) => {\n        if (success) {\n          fireEvent('annotation:delete', documentId, annotationId);\n        }\n        return success;\n      });\n    };\n  }\n\n  /**\n   * Get all the comments for an annotation\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} annotationId The ID for the annotation\n   * @return {Promise}\n   */\n  getComments(documentId, annotationId) { abstractFunction('getComments'); }\n\n  /**\n   * Add a new comment\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} annotationId The ID for the annotation\n   * @param {Object} content The definition of the comment\n   * @return {Promise}\n   */\n  __addComment(documentId, annotationId, content) { abstractFunction('addComment'); }\n  get addComment() { return this.__addComment; }\n  set addComment(fn) {\n    this.__addComment = function addComment(documentId, annotationId, content) {\n      return fn(...arguments).then((comment) => {\n        fireEvent('comment:add', documentId, annotationId, comment);\n        return comment;\n      });\n    };\n  }\n\n  /**\n   * Update a new comment\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} annotationId The ID for the annotation\n   * @param {Object} content The definition of the comment\n   * @return {Promise}\n   */\n  __updateComment(documentId, annotationId, content) { abstractFunction('addComment'); }\n  get updateComment() { return this.__updateComment; }\n  set updateComment(fn) {\n    this.__updateComment = function updateComment(documentId, annotationId, content) {\n      return fn(...arguments).then((comment) => {\n        fireEvent('comment:updated', documentId, annotationId, comment);\n        return comment;\n      });\n    };\n  }\n\n  /**\n   * Delete a comment\n   *\n   * @param {String} documentId The ID for the document\n   * @param {String} commentId The ID for the comment\n   * @return {Promise}\n   */\n  __deleteComment(documentId, commentId) { abstractFunction('deleteComment'); }\n  get deleteComment() { return this.__deleteComment; }\n  set deleteComment(fn) {\n    this.__deleteComment = function deleteComment(documentId, commentId) {\n      return fn(...arguments).then((success) => {\n        if (success) {\n          fireEvent('comment:delete', documentId, commentId);\n        }\n        return success;\n      });\n    };\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/adapter/StoreAdapter.js\n **/","/**\n * Throw an Error for an abstract function that hasn't been implemented.\n *\n * @param {String} name The name of the abstract function\n */\nexport default function abstractFunction(name) {\n  throw new Error(name + ' is not implemented');\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/abstractFunction.js\n **/","import EventEmitter from 'events';\nimport {\n  findAnnotationAtPoint,\n  findSVGAtPoint\n} from './utils';\n\nconst emitter = new EventEmitter;\n\nlet clickNode;\n\n/**\n * Handle document.click event\n *\n * @param {Event} e The DOM event to be handled\n */\n// document.addEventListener('mousedown', function handleDocumentClick(e) {\n\ndocument.addEventListener('click', function handleDocumentClick(e) {\n  if (!findSVGAtPoint(e.clientX, e.clientY)) { return; }\n\n  let target = findAnnotationAtPoint(e.clientX, e.clientY);\n\n  // Emit annotation:blur if clickNode is no longer clicked\n  if (clickNode && clickNode !== target) {\n    emitter.emit('annotation:blur', clickNode);\n  }\n\n  // Emit annotation:click if target was clicked\n  if (target) {\n    emitter.emit('annotation:click', target);\n  }\n\n  clickNode = target;\n});\n\n// let mouseOverNode;\n// document.addEventListener('mousemove', function handleDocumentMousemove(e) {\n//   let target = findAnnotationAtPoint(e.clientX, e.clientY);\n//\n//   // Emit annotation:mouseout if target was mouseout'd\n//   if (mouseOverNode && !target) {\n//     emitter.emit('annotation:mouseout', mouseOverNode);\n//   }\n//\n//   // Emit annotation:mouseover if target was mouseover'd\n//   if (target && mouseOverNode !== target) {\n//     emitter.emit('annotation:mouseover', target);\n//   }\n//\n//   mouseOverNode = target;\n// });\n\nexport function fireEvent() { emitter.emit(...arguments); };\nexport function addEventListener() { emitter.on(...arguments); };\nexport function removeEventListener() { emitter.removeListener(...arguments); };\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/event.js\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n\n    if (isFunction(evlistener))\n      return 1;\n    else if (evlistener)\n      return evlistener.length;\n  }\n  return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/events/events.js\n ** module id = 5\n ** module chunks = 0\n **/","import createStyleSheet from 'create-stylesheet';\n\nexport const BORDER_COLOR = '#00BFFF';\n\nconst userSelectStyleSheet = createStyleSheet({\n  body: {\n    '-webkit-user-select': 'none',\n       '-moz-user-select': 'none',\n        '-ms-user-select': 'none',\n            'user-select': 'none'\n  }\n});\nuserSelectStyleSheet.setAttribute('data-pdf-annotate-user-select', 'true');\n\n/**\n * Find the SVGElement that contains all the annotations for a page\n *\n * @param {Element} node An annotation within that container\n * @return {SVGElement} The container SVG or null if it can't be found\n */\nexport function findSVGContainer(node) {\n  let parentNode = node;\n\n  while ((parentNode = parentNode.parentNode) &&\n          parentNode !== document) {\n    if (parentNode.nodeName.toUpperCase() === 'SVG' &&\n        parentNode.getAttribute('data-pdf-annotate-container') === 'true') {\n      return parentNode;\n    }\n  }\n\n  return null;\n}\n\n\n/**\n * Find an SVGElement container at a given point\n *\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @return {SVGElement} The container SVG or null if one can't be found\n */\nexport function findSVGAtPoint(x, y) {\n  let elements = document.querySelectorAll('svg[data-pdf-annotate-container=\"true\"]');\n  for (let i=0, l=elements.length; i<l; i++) {\n    let el = elements[i];\n    let rect = el.getBoundingClientRect();\n\n    if (pointIntersectsRect(x, y, rect)) {\n      return el;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Find an Element that represents an annotation at a given point\n *\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @return {Element} The annotation element or null if one can't be found\n */\nexport function findAnnotationAtPoint(x, y) {\n  let svg = findSVGAtPoint(x, y);\n  if (!svg) { return; }\n  let elements = svg.querySelectorAll('[data-pdf-annotate-type]');\n\n  // Find a target element within SVG\n  for (let i=0, l=elements.length; i<l; i++) {\n    let el = elements[i];\n    if (pointIntersectsRect(x, y, getOffsetAnnotationRect(el))) {\n      return el;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Determine if a point intersects a rect\n *\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @param {Object} rect The points of a rect (likely from getBoundingClientRect)\n * @return {Boolean} True if a collision occurs, otherwise false\n */\nexport function pointIntersectsRect(x, y, rect) {\n  return y >= rect.top && y <= rect.bottom && x >= rect.left && x <= rect.right;\n}\n\n/**\n * Get the rect of an annotation element accounting for offset.\n *\n * @param {Element} el The element to get the rect of\n * @return {Object} The dimensions of the element\n */\nexport function getOffsetAnnotationRect(el) {\n  let rect = getAnnotationRect(el);\n  let { offsetLeft, offsetTop } = getOffset(el);\n\n  return {\n    top: rect.top + offsetTop,\n    left: rect.left + offsetLeft,\n    right: rect.right + offsetLeft,\n    bottom: rect.bottom + offsetTop\n  };\n}\n\n/**\n * Get the rect of an annotation element.\n *\n * @param {Element} el The element to get the rect of\n * @return {Object} The dimensions of the element\n */\nexport function getAnnotationRect(el) {\n  let h = 0, w = 0, x = 0, y = 0;\n  let rect = el.getBoundingClientRect();\n  // TODO this should be calculated somehow\n  const LINE_OFFSET = 16;\n  // debugger;\n  switch (el.nodeName.toLowerCase()) {\n    case 'path':\n    let minX, maxX, minY, maxY;\n\n    el.getAttribute('d').replace(/Z/, '').split('M').splice(1).forEach((p) => {\n      var s = p.split(' ').map(i => parseInt(i, 10));\n\n      if (typeof minX === 'undefined' || s[0] < minX) { minX = s[0]; }\n      if (typeof maxX === 'undefined' || s[2] > maxX) { maxX = s[2]; }\n      if (typeof minY === 'undefined' || s[1] < minY) { minY = s[1]; }\n      if (typeof maxY === 'undefined' || s[3] > maxY) { maxY = s[3]; }\n    });\n\n    h = maxY - minY;\n    w = maxX - minX;\n    x = minX;\n    y = minY;\n    break;\n\n    case 'line':\n    h = parseInt(el.getAttribute('y2'), 10) - parseInt(el.getAttribute('y1'), 10);\n    w = parseInt(el.getAttribute('x2'), 10) - parseInt(el.getAttribute('x1'), 10);\n    x = parseInt(el.getAttribute('x1'), 10);\n    y = parseInt(el.getAttribute('y1'), 10);\n\n    if (h === 0) {\n      h += LINE_OFFSET;\n      y -= (LINE_OFFSET / 2);\n    }\n    break;\n\n    case 'text':\n    h = rect.height;\n    w = rect.width;\n    x = parseInt(el.getAttribute('x'), 10);\n    y = parseInt(el.getAttribute('y'), 10) - h;\n    break;\n\n    case 'g':\n    let { offsetLeft, offsetTop } = getOffset(el);\n    h = rect.height;\n    w = rect.width;\n    x = rect.left - offsetLeft;\n    y = rect.top - offsetTop;\n\n    if (el.getAttribute('data-pdf-annotate-type') === 'strikeout') {\n      h += LINE_OFFSET;\n      y -= (LINE_OFFSET / 2);\n    }\n    break;\n\n    case 'rect':\n    case 'svg':\n    h = parseInt(el.getAttribute('height'), 10);\n    w = parseInt(el.getAttribute('width'), 10);\n    x = parseInt(el.getAttribute('x'), 10);\n    y = parseInt(el.getAttribute('y'), 10);\n    break;\n  }\n\n  // Result provides same properties as getBoundingClientRect\n  let result = {\n    top: y,\n    left: x,\n    width: w,\n    height: h,\n    right: x + w,\n    bottom: y + h\n  };\n\n  // For the case of nested SVG (point annotations) and grouped\n  // lines or rects no adjustment needs to be made for scale.\n  // I assume that the scale is already being handled\n  // natively by virtue of the `transform` attribute.\n  if (!['svg', 'g'].includes(el.nodeName.toLowerCase())) {\n    result = scaleUp(findSVGAtPoint(rect.left, rect.top), result);\n  }\n\n  // // comment point need to be scaled on FF\n  if(el.nodeName.toLowerCase() == 'svg' && $.browser.mozilla){\n    result = scaleUp(findSVGAtPoint(rect.left, rect.top), result);\n  }\n\n  return result;\n}\n\n/**\n * Adjust scale from normalized scale (100%) to rendered scale.\n *\n * @param {SVGElement} svg The SVG to gather metadata from\n * @param {Object} rect A map of numeric values to scale\n * @return {Object} A copy of `rect` with values scaled up\n */\nexport function scaleUp(svg, rect) {\n  let result = {};\n  let { viewport } = getMetadata(svg);\n\n  Object.keys(rect).forEach((key) => {\n    result[key] = rect[key] * viewport.scale;\n  });\n\n  return result;\n}\n\n/**\n * Adjust scale from rendered scale to a normalized scale (100%).\n *\n * @param {SVGElement} svg The SVG to gather metadata from\n * @param {Object} rect A map of numeric values to scale\n * @return {Object} A copy of `rect` with values scaled down\n */\nexport function scaleDown(svg, rect) {\n  let result = {};\n  let { viewport } = getMetadata(svg);\n\n  Object.keys(rect).forEach((key) => {\n    result[key] = rect[key] / viewport.scale;\n  });\n\n  return result;\n}\n\n/**\n * Get the scroll position of an element, accounting for parent elements\n *\n * @param {Element} el The element to get the scroll position for\n * @return {Object} The scrollTop and scrollLeft position\n */\nexport function getScroll(el) {\n  let scrollTop = 0;\n  let scrollLeft = 0;\n  let parentNode = el;\n\n  while ((parentNode = parentNode.parentNode) &&\n          parentNode !== document) {\n    scrollTop += parentNode.scrollTop;\n    scrollLeft += parentNode.scrollLeft;\n  }\n\n  return { scrollTop, scrollLeft };\n}\n\n/**\n * Get the offset position of an element, accounting for parent elements\n *\n * @param {Element} el The element to get the offset position for\n * @return {Object} The offsetTop and offsetLeft position\n */\nexport function getOffset(el) {\n  let parentNode = el;\n\n  while ((parentNode = parentNode.parentNode) &&\n          parentNode !== document) {\n    if (parentNode.nodeName.toUpperCase() === 'SVG') {\n      break;\n    }\n  }\n\n  let rect = parentNode.getBoundingClientRect();\n\n  return { offsetLeft: rect.left, offsetTop: rect.top };\n}\n\n/**\n * Disable user ability to select text on page\n */\nexport function disableUserSelect() {\n  if (!userSelectStyleSheet.parentNode) {\n    document.head.appendChild(userSelectStyleSheet);\n  }\n}\n\n\n/**\n * Enable user ability to select text on page\n */\nexport function enableUserSelect() {\n  if (userSelectStyleSheet.parentNode) {\n    userSelectStyleSheet.parentNode.removeChild(userSelectStyleSheet);\n  }\n}\n\n/**\n * Get the metadata for a SVG container\n *\n * @param {SVGElement} svg The SVG container to get metadata for\n */\nexport function getMetadata(svg) {\n  return {\n    documentId: svg.getAttribute('data-pdf-annotate-document'),\n    pageNumber: parseInt(svg.getAttribute('data-pdf-annotate-page'), 10),\n    viewport: JSON.parse(svg.getAttribute('data-pdf-annotate-viewport'))\n  };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/utils.js\n **/","module.exports = function createStyleSheet(blocks) {\n  var style = document.createElement('style');\n  var text = Object.keys(blocks).map(function (selector) {\n    return processRuleSet(selector, blocks[selector]);\n  }).join('\\n');\n  \n  style.setAttribute('type', 'text/css');\n  style.appendChild(document.createTextNode(text));\n\n  return style;\n}\n\nfunction processRuleSet(selector, block) {\n  return selector + ' {\\n' + processDeclarationBlock(block) + '\\n}';\n}\n\nfunction processDeclarationBlock(block) {\n  return Object.keys(block).map(function (prop) {\n    return processDeclaration(prop, block[prop]);\n  }).join('\\n');\n}\n\nfunction processDeclaration(prop, value) {\n  if (!isNaN(value) && value != 0) {\n    value = value + 'px';\n  }\n\n  return hyphenate(prop) + ': ' + value + ';';\n}\n\nfunction hyphenate(prop) {\n  return prop.replace(/[A-Z]/g, function (match) {\n    return '-' + match.toLowerCase();\n  });\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/create-stylesheet/index.js\n ** module id = 7\n ** module chunks = 0\n **/","import axios from 'axios';\nimport uuid from '../utils/uuid';\nimport StoreAdapter from './StoreAdapter';\nimport {documentId as fileUuid} from '../initFile';\nimport {renderComments} from \"../UI/comments\";\n\naxios.defaults.xsrfCookieName = 'csrftoken';\naxios.defaults.xsrfHeaderName = 'X-CSRFToken';\n\nexport default class CRFPAStoreAdapter extends StoreAdapter {\n    constructor() {\n\n        const API = axios.create({\n            baseURL: '/pdfannotator',\n            timeout: 60000,\n            withCredentials: true,\n            headers: {\n                'Accept': 'application/json',\n                'Content-Type': 'application/json',\n                'Access-Control-Allow-Origin': '*'\n            }\n        });\n\n        super({\n            getAnnotations(documentId) {\n\n                return API.get('/get-annotations/', {\n                    params: {\n                        fileUuid,\n                    }\n                }).then(function (response) {\n                    return response.data;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et les annotations n'ont pas pu être téléchargées depuis le serveur.\")\n                });\n\n                // return new Promise((resolve, reject) => {\n                //   let annotations = getAnnotations(documentId).filter((i) => {\n                //     return i.page === pageNumber && i.class === 'Annotation';\n                //   });\n                //\n                //   resolve({\n                //     documentId,\n                //     pageNumber,\n                //     annotations\n                //   });\n                // });\n            },\n\n            getAnnotation(documentId, annotationId) {\n                return API.get('/get-annotation/', {\n                    params: {\n                        fileUuid,\n                        annotationId\n                    }\n                }).then(function (response) {\n                    return response.data;\n                });\n            },\n\n            addAnnotation(documentId, pageNumber, annotation) {\n\n                annotation.class = 'Annotation';\n                annotation.page = pageNumber;\n                annotation.uuid = uuid();\n\n                return API.post('/add-annotation/', {\n                    fileUuid,\n                    page: pageNumber,\n                    annotation\n                }).then(function (response) {\n                    return annotation;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et votre annotation n'a pas pu être enregistrée.\")\n                });\n\n                // return new Promise((resolve, reject) => {\n\n                // annotation.class = 'Annotation';\n                // annotation.uuid = uuid();\n                // annotation.page = pageNumber;\n\n                // let annotations = getAnnotations(documentId);\n                // annotations.push(annotation);\n                // updateAnnotations(documentId, annotations);\n\n                // resolve(annotation);\n                // });\n            },\n\n            editAnnotation(documentId, annotationId, annotation) {\n                return API.post('/update-annotation/', {\n                    fileUuid,\n                    annotationId,\n                    annotation\n                }).then(function (response) {\n                    if(annotation.type==='point')\n                        renderComments();\n                    return response;\n                }).then(function (response) {\n                    return annotation;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et l'annotation n'a pas pu être enregistrée.\")\n                });\n\n                // return new Promise((resolve, reject) => {\n                //   let annotations = getAnnotations(documentId);\n                //   annotations[findAnnotation(documentId, annotationId)] = annotation;\n                //   updateAnnotations(documentId, annotations);\n                //\n                //   resolve(annotation);\n                // });\n            },\n\n            deleteAnnotation(documentId, annotationId) {\n                return API.post('/delete-annotation/', {\n                    annotationId,\n                    fileUuid\n                }).then(function (response) {\n                    renderComments();\n                    return response;\n                }).then(function (response) {\n                    return true;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et l'annotation n'a pas pu être supprimée.\")\n                });;\n\n                // return new Promise((resolve, reject) => {\n                //   let index = findAnnotation(documentId, annotationId);\n                //   if (index > -1) {\n                //     let annotations = getAnnotations(documentId);\n                //     annotations.splice(index, 1);\n                //     updateAnnotations(documentId, annotations);\n                //   }\n                //\n                //   resolve(true);\n                // });\n            },\n\n            getComments(documentId) {\n                return API.get('/get-comments/', {\n                    params: {\n                        fileUuid\n                    }\n                }).then(function (response) {\n                    return response.data;\n                });\n\n                // return new Promise((resolve, reject) => {\n                //   resolve(getAnnotations(documentId).filter((i) => {\n                //     return i.class === 'Comment' && i.annotation === annotationId;\n                //   }));\n                // });\n            },\n\n            addComment(documentId, annotationId, content) {\n\n                return API.post('/add-comment/', {\n                    fileUuid,\n                    annotationId,\n                    content\n                }).then(function (response) {\n                    renderComments();\n                    return response;\n                }).then(function (response) {\n                    return content;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et votre commentaire n'a pas pu être enregistré.\")\n                });;\n\n                // return new Promise((resolve, reject) => {\n                //   let comment = {\n                //     class: 'Comment',\n                //     uuid: uuid(),\n                //     annotation: annotationId,\n                //     content: content\n                //   };\n                //\n                //\n                //\n                //   let annotations = getAnnotations(documentId);\n                //   annotations.push(comment);\n                //   updateAnnotations(documentId, annotations);\n                //\n                //   resolve(comment);\n                // });\n            },\n\n            updateComment(documentId, annotationId, comment) {\n                return API.post('/update-comment/', {\n                    fileUuid,\n                    annotationId,\n                    comment\n                }).then(function (response) {\n                    renderComments();\n                    return response;\n                }).then(function (response) {\n                    return comment;\n                }).catch(function (error){\n                    console.log(error)\n                    alert(\"Une erreur est survenue et votre commentaire n'a pas pu être enregistrée.\")\n                });;\n            },\n\n            // deleteComment(documentId, commentId) {\n            //\n            //     return API.post('/delete-comment/', {\n            //         fileUuid,\n            //         commentId,\n            //     }).then(function (response) {\n            //         return true;\n            //     });\n            // }\n        });\n    }\n}\n//\n// function getAnnotations(documentId) {\n//   return JSON.parse(localStorage.getItem(`${documentId}/annotations`)) || [];\n// }\n//\n// function updateAnnotations(documentId, annotations) {\n//   localStorage.setItem(`${documentId}/annotations`, JSON.stringify(annotations));\n// }\n\n// function findAnnotation(documentId, annotationId) {\n//   let index = -1;\n//   let annotations = getAnnotations(documentId);\n//   for (let i=0, l=annotations.length; i<l; i++) {\n//     if (annotations[i].uuid === annotationId) {\n//       index = i;\n//       break;\n//     }\n//   }\n//   return index;\n// }\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/adapter/CRFPAStoreAdapter.js\n **/","module.exports = require('./lib/axios');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/index.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n  return createInstance(utils.merge(defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/axios.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = merge(result[key], val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  extend: extend,\n  trim: trim\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/utils.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/bind.js\n ** module id = 12\n ** module chunks = 0\n **/","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/is-buffer/index.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = utils.merge({\n      url: arguments[0]\n    }, arguments[1]);\n  }\n\n  config = utils.merge(defaults, {method: 'get'}, this.defaults, config);\n  config.method = config.method.toLowerCase();\n\n  // Hook up interceptors middleware\n  var chain = [dispatchRequest, undefined];\n  var promise = Promise.resolve(config);\n\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    chain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  while (chain.length) {\n    promise = promise.then(chain.shift(), chain.shift());\n  }\n\n  return promise;\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/Axios.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('./adapters/xhr');\n  } else if (typeof process !== 'undefined') {\n    // For node use HTTP adapter\n    adapter = require('./adapters/http');\n  }\n  return adapter;\n}\n\nvar defaults = {\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Content-Type');\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data)) {\n      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n      return JSON.stringify(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    /*eslint no-param-reassign:0*/\n    if (typeof data === 'string') {\n      try {\n        data = JSON.parse(data);\n      } catch (e) { /* Ignore */ }\n    }\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\n\ndefaults.headers = {\n  common: {\n    'Accept': 'application/json, text/plain, */*'\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/defaults.js\n ** module id = 15\n ** module chunks = 0\n **/","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 16\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/normalizeHeaderName.js\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || require('./../helpers/btoa');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n    var loadEvent = 'onreadystatechange';\n    var xDomain = false;\n\n    // For IE 8/9 CORS support\n    // Only supports POST and GET calls and doesn't returns the response headers.\n    // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n    if (process.env.NODE_ENV !== 'test' &&\n        typeof window !== 'undefined' &&\n        window.XDomainRequest && !('withCredentials' in request) &&\n        !isURLSameOrigin(config.url)) {\n      request = new window.XDomainRequest();\n      loadEvent = 'onload';\n      xDomain = true;\n      request.onprogress = function handleProgress() {};\n      request.ontimeout = function handleTimeout() {};\n    }\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password || '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    // Listen for ready state\n    request[loadEvent] = function handleLoad() {\n      if (!request || (request.readyState !== 4 && !xDomain)) {\n        return;\n      }\n\n      // The request errored out and we didn't get a response, this will be\n      // handled by onerror instead\n      // With one exception: request that using file: protocol, most browsers\n      // will return status as 0 even though it's a successful request\n      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n        return;\n      }\n\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n      var response = {\n        data: responseData,\n        // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n        status: request.status === 1223 ? 204 : request.status,\n        statusText: request.status === 1223 ? 'No Content' : request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(resolve, reject, response);\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      var cookies = require('./../helpers/cookies');\n\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n          cookies.read(config.xsrfCookieName) :\n          undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (config.withCredentials) {\n      request.withCredentials = true;\n    }\n\n    // Add responseType to request if needed\n    if (config.responseType) {\n      try {\n        request.responseType = config.responseType;\n      } catch (e) {\n        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n        if (config.responseType !== 'json') {\n          throw e;\n        }\n      }\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken) {\n      // Handle cancellation\n      config.cancelToken.promise.then(function onCanceled(cancel) {\n        if (!request) {\n          return;\n        }\n\n        request.abort();\n        reject(cancel);\n        // Clean up request\n        request = null;\n      });\n    }\n\n    if (requestData === undefined) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/adapters/xhr.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  // Note: status is not exposed by XDomainRequest\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/settle.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/createError.js\n ** module id = 20\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n  error.request = request;\n  error.response = response;\n  return error;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/enhanceError.js\n ** module id = 21\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%40/gi, '@').\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/buildURL.js\n ** module id = 22\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/parseHeaders.js\n ** module id = 23\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n  (function standardBrowserEnv() {\n    var msie = /(msie|trident)/i.test(navigator.userAgent);\n    var urlParsingNode = document.createElement('a');\n    var originURL;\n\n    /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n    function resolveURL(url) {\n      var href = url;\n\n      if (msie) {\n        // IE needs attribute set twice to normalize properties\n        urlParsingNode.setAttribute('href', href);\n        href = urlParsingNode.href;\n      }\n\n      urlParsingNode.setAttribute('href', href);\n\n      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n      return {\n        href: urlParsingNode.href,\n        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n        host: urlParsingNode.host,\n        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n        hostname: urlParsingNode.hostname,\n        port: urlParsingNode.port,\n        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n                  urlParsingNode.pathname :\n                  '/' + urlParsingNode.pathname\n      };\n    }\n\n    originURL = resolveURL(window.location.href);\n\n    /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n    return function isURLSameOrigin(requestURL) {\n      var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n      return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n    };\n  })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n  (function nonStandardBrowserEnv() {\n    return function isURLSameOrigin() {\n      return true;\n    };\n  })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isURLSameOrigin.js\n ** module id = 24\n ** module chunks = 0\n **/","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n  this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n  var str = String(input);\n  var output = '';\n  for (\n    // initialize result and counter\n    var block, charCode, idx = 0, map = chars;\n    // if the next str index does not exist:\n    //   change the mapping table to \"=\"\n    //   check if d has no fractional digits\n    str.charAt(idx | 0) || (map = '=', idx % 1);\n    // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n    output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n  ) {\n    charCode = str.charCodeAt(idx += 3 / 4);\n    if (charCode > 0xFF) {\n      throw new E();\n    }\n    block = block << 8 | charCode;\n  }\n  return output;\n}\n\nmodule.exports = btoa;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/btoa.js\n ** module id = 25\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n  (function standardBrowserEnv() {\n    return {\n      write: function write(name, value, expires, path, domain, secure) {\n        var cookie = [];\n        cookie.push(name + '=' + encodeURIComponent(value));\n\n        if (utils.isNumber(expires)) {\n          cookie.push('expires=' + new Date(expires).toGMTString());\n        }\n\n        if (utils.isString(path)) {\n          cookie.push('path=' + path);\n        }\n\n        if (utils.isString(domain)) {\n          cookie.push('domain=' + domain);\n        }\n\n        if (secure === true) {\n          cookie.push('secure');\n        }\n\n        document.cookie = cookie.join('; ');\n      },\n\n      read: function read(name) {\n        var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n        return (match ? decodeURIComponent(match[3]) : null);\n      },\n\n      remove: function remove(name) {\n        this.write(name, '', Date.now() - 86400000);\n      }\n    };\n  })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n  (function nonStandardBrowserEnv() {\n    return {\n      write: function write() {},\n      read: function read() { return null; },\n      remove: function remove() {}\n    };\n  })()\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/cookies.js\n ** module id = 26\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/InterceptorManager.js\n ** module id = 27\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Support baseURL config\n  if (config.baseURL && !isAbsoluteURL(config.url)) {\n    config.url = combineURLs(config.baseURL, config.url);\n  }\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData(\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers || {}\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData(\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData(\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/dispatchRequest.js\n ** module id = 28\n ** module chunks = 0\n **/","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/core/transformData.js\n ** module id = 29\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/cancel/isCancel.js\n ** module id = 30\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/isAbsoluteURL.js\n ** module id = 31\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/combineURLs.js\n ** module id = 32\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/cancel/Cancel.js\n ** module id = 33\n ** module chunks = 0\n **/","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/cancel/CancelToken.js\n ** module id = 34\n ** module chunks = 0\n **/","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/axios/lib/helpers/spread.js\n ** module id = 35\n ** module chunks = 0\n **/","const REGEXP = /[xy]/g\nconst PATTERN = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n\nfunction replacement(c) {\n  let r = Math.random()*16|0;\n  let v = c == 'x' ? r : (r&0x3|0x8);\n  return v.toString(16);\n}\n\n/**\n * Generate a univierally unique identifier\n *\n * @return {String}\n */\nexport default function uuid() {\n  return PATTERN.replace(REGEXP, replacement);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/uuid.js\n **/","export const documentUrl = document.getElementById('pdf-data').dataset.filepath;\nexport const documentId = document.getElementById('pdf-data').dataset.uuid;\nexport const readonly = document.getElementById('pdf-data').dataset.readonly === 'True';\n\n\n/** WEBPACK FOOTER **\n ** ./src/initFile.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate'\nimport twitter from \"twitter-text\";\nimport {addEventListener} from \"./event\";\nimport {createEditOverlay} from \"./edit\";\nimport {getMetadata} from \"./utils\";\nimport {readonly} from \"../initFile\";\n\nlet commentList = $('#comment-wrapper .comment-list-container');\nlet commentForm = $('#comment-wrapper .comment-list-form');\n\n// let commentText = commentForm.querySelector('input[type=\"text\"]');\n\nexport function renderComments(documentId) {\n    PDFJSAnnotate.getStoreAdapter().getComments(documentId).then((comments) => {\n\n\n        commentList.html('');\n        commentForm.hide();\n        // commentText.focus();\n\n        // commentForm.onsubmit = function () {\n        //     PDFJSAnnotate.getStoreAdapter().addComment(documentId, annotationId, commentText.value.trim())\n        //         .then(insertComment)\n        //         .then(() => {\n        //             commentText.value = '';\n        //             commentText.focus();\n        //         });\n        //\n        //     return false;\n        // };\n\n        comments.forEach(insertComment);\n    });\n}\n\n\nfunction supportsComments(target) {\n    let type = target.getAttribute('data-pdf-annotate-type');\n    return ['point', 'highlight', 'area'].indexOf(type) > -1;\n}\n\nfunction insertComment(comment) {\n    let child = $('<div></div>');\n    let view = $('<div class=\"view\"></div>');\n    child.addClass('comment-list-item');\n    child.attr('uuid', comment.annotation)\n    view.html(twitter.autoLink(twitter.htmlEscape(comment.content).replace(/\\n/g, '<br/>')));\n    view.bind('click', handleCommentClick);\n\n    if (!readonly) {\n        let editBtn = $('<button>Modifier</button>');\n        editBtn.bind('click', handleEditClick);\n        view.append($('<br/>'));\n        view.append(editBtn);\n    }\n    child.append(view);\n\n    if (!readonly) {\n        let textarea = $('<textarea></textarea>');\n        textarea.text(comment.content);\n        let textareaWrapper = $('<div class=\"edit\" style=\"display:none\">');\n        let saveBtn = $('<button>Enregistrer</button>');\n        saveBtn.bind('click', saveComment);\n        let cancelBtn = $('<button>Annuler</button>');\n        cancelBtn.bind('click', cancelCommentEdit);\n        textareaWrapper.append(textarea);\n        textareaWrapper.append(saveBtn);\n        textareaWrapper.append(cancelBtn);\n        child.append(textareaWrapper);\n    }\n    commentList.append(child);\n}\n\nfunction handleCommentClick(e) {\n    let comment = $(e.target).closest('.comment-list-item');\n    selectComment(comment.attr('uuid'));\n}\n\nfunction saveComment(e) {\n    e.preventDefault();\n    let button = $(e.target);\n    let comment = button.closest('.comment-list-item');\n    let uuid = comment.attr('uuid');\n    let text = comment.find('textarea').val();\n    let documentId = $('#pdf-data').data('uuid');\n    PDFJSAnnotate.getStoreAdapter().updateComment(documentId, uuid, text).then((comment) => {\n        cancelCommentEdit(e);\n    });\n}\n\nfunction cancelCommentEdit(e) {\n    e.preventDefault();\n    let button = $(e.target);\n    let comment = button.closest('.comment-list-item');\n    let view = comment.find('.view');\n    let edit = comment.find('.edit');\n    edit.hide();\n    view.show();\n}\n\n// replace comment text by textarea to edit the comment\nfunction handleEditClick(e) {\n    e.preventDefault();\n    let button = $(e.target);\n    let comment = button.closest('.comment-list-item');\n    let view = comment.find('.view');\n    let edit = comment.find('.edit');\n    edit.show();\n    edit.find('textarea').width(view.width() - 10).height(view.height() + 20);\n    view.hide();\n}\n\n\nfunction scrollToView(element) {\n    var offset = element.offset().top;\n    if (!element.is(\":visible\")) {\n        element.css({\"visibility\": \"hidden\"}).show();\n        var offset = element.offset().top;\n        element.css({\"visibility\": \"\", \"display\": \"\"});\n    }\n\n    var visible_area_start = $(window).scrollTop();\n    var visible_area_end = visible_area_start + window.innerHeight;\n\n    if (offset < visible_area_start || offset > visible_area_end) {\n        // Not in view so scroll to it\n        if (element.hasClass('comment-list-item')) {\n            $('.comment-list-container').animate({scrollTop: offset - window.innerHeight / 3}, 300);\n        }\n        else {\n            $('#content-wrapper').animate({scrollTop: offset - window.innerHeight / 3}, 300);\n        }\n        return false;\n    }\n    return true;\n}\n\nexport function selectComment(uuid) {\n    let comment = $(`.comment-list-item[uuid=${uuid}]`);\n    $('.comment-list-item').removeClass('selected');\n    comment.addClass('selected');\n    const annotation = $(`[data-pdf-annotate-id=${uuid}]`)[0];\n    createEditOverlay(annotation);\n    scrollToView($(annotation));\n    scrollToView(comment);\n}\n\n// function handleAnnotationClick(target) {\n//   if (supportsComments(target)) {\n//     let documentId = target.parentNode.getAttribute('data-pdf-annotate-document');\n//     let annotationId = target.getAttribute('data-pdf-annotate-id');\n//\n//     PDFJSAnnotate.getStoreAdapter().getComments(documentId, annotationId).then((comments) => {\n//       commentList.innerHTML = '';\n//       commentForm.style.display = '';\n//       commentText.focus();\n//\n//       commentForm.onsubmit = function () {\n//         PDFJSAnnotate.getStoreAdapter().addComment(documentId, annotationId, commentText.value.trim())\n//           .then(insertComment)\n//           .then(() => {\n//             commentText.value = '';\n//             commentText.focus();\n//           });\n//\n//         return false;\n//       };\n//\n//       comments.forEach(insertComment);\n//     });\n//   }\n// }\n//\n// function handleAnnotationBlur(target) {\n//   if (supportsComments(target)) {\n//     commentList.innerHTML = '';\n//     commentForm.style.display = 'none';\n//     commentForm.onsubmit = null;\n//\n//     insertComment({content: 'No comments'});\n//   }\n// }\n\n\n// UI.addEventListener('annotation:click', handleAnnotationClick);\n// UI.addEventListener('annotation:blur', handleAnnotationBlur);\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/comments.js\n **/","(function() {\n  if (typeof twttr === \"undefined\" || twttr === null) {\n    var twttr = {};\n  }\n\n  twttr.txt = {};\n  twttr.txt.regexen = {};\n\n  var HTML_ENTITIES = {\n    '&': '&amp;',\n    '>': '&gt;',\n    '<': '&lt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  // HTML escaping\n  twttr.txt.htmlEscape = function(text) {\n    return text && text.replace(/[&\"'><]/g, function(character) {\n      return HTML_ENTITIES[character];\n    });\n  };\n\n  // Builds a RegExp\n  function regexSupplant(regex, flags) {\n    flags = flags || \"\";\n    if (typeof regex !== \"string\") {\n      if (regex.global && flags.indexOf(\"g\") < 0) {\n        flags += \"g\";\n      }\n      if (regex.ignoreCase && flags.indexOf(\"i\") < 0) {\n        flags += \"i\";\n      }\n      if (regex.multiline && flags.indexOf(\"m\") < 0) {\n        flags += \"m\";\n      }\n\n      regex = regex.source;\n    }\n\n    return new RegExp(regex.replace(/#\\{(\\w+)\\}/g, function(match, name) {\n      var newRegex = twttr.txt.regexen[name] || \"\";\n      if (typeof newRegex !== \"string\") {\n        newRegex = newRegex.source;\n      }\n      return newRegex;\n    }), flags);\n  }\n\n  twttr.txt.regexSupplant = regexSupplant;\n\n  // simple string interpolation\n  function stringSupplant(str, values) {\n    return str.replace(/#\\{(\\w+)\\}/g, function(match, name) {\n      return values[name] || \"\";\n    });\n  }\n\n  twttr.txt.stringSupplant = stringSupplant;\n\n  twttr.txt.regexen.spaces_group = /\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000/;\n  twttr.txt.regexen.spaces = regexSupplant(/[#{spaces_group}]/);\n  twttr.txt.regexen.invalid_chars_group = /\\uFFFE\\uFEFF\\uFFFF\\u202A-\\u202E/;\n  twttr.txt.regexen.invalid_chars = regexSupplant(/[#{invalid_chars_group}]/);\n  twttr.txt.regexen.punct = /\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$/;\n  twttr.txt.regexen.rtl_chars = /[\\u0600-\\u06FF]|[\\u0750-\\u077F]|[\\u0590-\\u05FF]|[\\uFE70-\\uFEFF]/mg;\n  twttr.txt.regexen.non_bmp_code_pairs = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/mg;\n\n  twttr.txt.regexen.latinAccentChars = /\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF/;\n\n  // Generated from unicode_regex/unicode_regex_groups.scala, same as objective c's \\p{L}\\p{M}\n  twttr.txt.regexen.bmpLetterAndMarks = /A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0300-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u0483-\\u052f\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06df-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710-\\u074a\\u074d-\\u07b1\\u07ca-\\u07f5\\u07fa\\u0800-\\u082d\\u0840-\\u085b\\u08a0-\\u08b2\\u08e4-\\u0963\\u0971-\\u0983\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bc-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09ce\\u09d7\\u09dc\\u09dd\\u09df-\\u09e3\\u09f0\\u09f1\\u0a01-\\u0a03\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a59-\\u0a5c\\u0a5e\\u0a70-\\u0a75\\u0a81-\\u0a83\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abc-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ad0\\u0ae0-\\u0ae3\\u0b01-\\u0b03\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3c-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5c\\u0b5d\\u0b5f-\\u0b63\\u0b71\\u0b82\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd0\\u0bd7\\u0c00-\\u0c03\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c58\\u0c59\\u0c60-\\u0c63\\u0c81-\\u0c83\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbc-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0cde\\u0ce0-\\u0ce3\\u0cf1\\u0cf2\\u0d01-\\u0d03\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4e\\u0d57\\u0d60-\\u0d63\\u0d7a-\\u0d7f\\u0d82\\u0d83\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb9\\u0ebb-\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0ec8-\\u0ecd\\u0edc-\\u0edf\\u0f00\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e-\\u0f47\\u0f49-\\u0f6c\\u0f71-\\u0f84\\u0f86-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u103f\\u1050-\\u108f\\u109a-\\u109d\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u135d-\\u135f\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16f1-\\u16f8\\u1700-\\u170c\\u170e-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176c\\u176e-\\u1770\\u1772\\u1773\\u1780-\\u17d3\\u17d7\\u17dc\\u17dd\\u180b-\\u180d\\u1820-\\u1877\\u1880-\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1920-\\u192b\\u1930-\\u193b\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a1b\\u1a20-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1aa7\\u1ab0-\\u1abe\\u1b00-\\u1b4b\\u1b6b-\\u1b73\\u1b80-\\u1baf\\u1bba-\\u1bf3\\u1c00-\\u1c37\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1cd0-\\u1cd2\\u1cd4-\\u1cf6\\u1cf8\\u1cf9\\u1d00-\\u1df5\\u1dfc-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u20d0-\\u20f0\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2183\\u2184\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d7f-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2de0-\\u2dff\\u2e2f\\u3005\\u3006\\u302a-\\u302f\\u3031-\\u3035\\u303b\\u303c\\u3041-\\u3096\\u3099\\u309a\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua672\\ua674-\\ua67d\\ua67f-\\ua69d\\ua69f-\\ua6e5\\ua6f0\\ua6f1\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua7ad\\ua7b0\\ua7b1\\ua7f7-\\ua827\\ua840-\\ua873\\ua880-\\ua8c4\\ua8e0-\\ua8f7\\ua8fb\\ua90a-\\ua92d\\ua930-\\ua953\\ua960-\\ua97c\\ua980-\\ua9c0\\ua9cf\\ua9e0-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa36\\uaa40-\\uaa4d\\uaa60-\\uaa76\\uaa7a-\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaef\\uaaf2-\\uaaf6\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab5f\\uab64\\uab65\\uabc0-\\uabea\\uabec\\uabed\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf870-\\uf87f\\uf882\\uf884-\\uf89f\\uf8b8\\uf8c1-\\uf8d6\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe00-\\ufe0f\\ufe20-\\ufe2d\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc/;\n  twttr.txt.regexen.astralLetterAndMarks = /\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\uddfd\\ude80-\\ude9c\\udea0-\\uded0\\udee0\\udf00-\\udf1f\\udf30-\\udf40\\udf42-\\udf49\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf]|\\ud801[\\udc00-\\udc9d\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe\\uddbf\\ude00-\\ude03\\ude05\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude33\\ude38-\\ude3a\\ude3f\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee6\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48]|\\ud804[\\udc00-\\udc46\\udc7f-\\udcba\\udcd0-\\udce8\\udd00-\\udd34\\udd50-\\udd73\\udd76\\udd80-\\uddc4\\uddda\\ude00-\\ude11\\ude13-\\ude37\\udeb0-\\udeea\\udf01-\\udf03\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3c-\\udf44\\udf47\\udf48\\udf4b-\\udf4d\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc80-\\udcc5\\udcc7\\udd80-\\uddb5\\uddb8-\\uddc0\\ude00-\\ude40\\ude44\\ude80-\\udeb7]|\\ud806[\\udca0-\\udcdf\\udcff\\udec0-\\udef8]|\\ud808[\\udc00-\\udf98]|\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\uded0-\\udeed\\udef0-\\udef4\\udf00-\\udf36\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\udf00-\\udf44\\udf50-\\udf7e\\udf8f-\\udf9f]|\\ud82c[\\udc00\\udc01]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9d\\udc9e]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud83a[\\udc00-\\udcc4\\udcd0-\\udcd6]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud840[\\udc00-\\udfff]|\\ud841[\\udc00-\\udfff]|\\ud842[\\udc00-\\udfff]|\\ud843[\\udc00-\\udfff]|\\ud844[\\udc00-\\udfff]|\\ud845[\\udc00-\\udfff]|\\ud846[\\udc00-\\udfff]|\\ud847[\\udc00-\\udfff]|\\ud848[\\udc00-\\udfff]|\\ud849[\\udc00-\\udfff]|\\ud84a[\\udc00-\\udfff]|\\ud84b[\\udc00-\\udfff]|\\ud84c[\\udc00-\\udfff]|\\ud84d[\\udc00-\\udfff]|\\ud84e[\\udc00-\\udfff]|\\ud84f[\\udc00-\\udfff]|\\ud850[\\udc00-\\udfff]|\\ud851[\\udc00-\\udfff]|\\ud852[\\udc00-\\udfff]|\\ud853[\\udc00-\\udfff]|\\ud854[\\udc00-\\udfff]|\\ud855[\\udc00-\\udfff]|\\ud856[\\udc00-\\udfff]|\\ud857[\\udc00-\\udfff]|\\ud858[\\udc00-\\udfff]|\\ud859[\\udc00-\\udfff]|\\ud85a[\\udc00-\\udfff]|\\ud85b[\\udc00-\\udfff]|\\ud85c[\\udc00-\\udfff]|\\ud85d[\\udc00-\\udfff]|\\ud85e[\\udc00-\\udfff]|\\ud85f[\\udc00-\\udfff]|\\ud860[\\udc00-\\udfff]|\\ud861[\\udc00-\\udfff]|\\ud862[\\udc00-\\udfff]|\\ud863[\\udc00-\\udfff]|\\ud864[\\udc00-\\udfff]|\\ud865[\\udc00-\\udfff]|\\ud866[\\udc00-\\udfff]|\\ud867[\\udc00-\\udfff]|\\ud868[\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|\\ud86a[\\udc00-\\udfff]|\\ud86b[\\udc00-\\udfff]|\\ud86c[\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d]|\\ud87e[\\udc00-\\ude1d]|\\udb40[\\udd00-\\uddef]/;\n\n  // Generated from unicode_regex/unicode_regex_groups.scala, same as objective c's \\p{Nd}\n  twttr.txt.regexen.bmpNumerals = /0-9\\u0660-\\u0669\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0de6-\\u0def\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\ua9f0-\\ua9f9\\uaa50-\\uaa59\\uabf0-\\uabf9\\uff10-\\uff19/;\n  twttr.txt.regexen.astralNumerals = /\\ud801[\\udca0-\\udca9]|\\ud804[\\udc66-\\udc6f\\udcf0-\\udcf9\\udd36-\\udd3f\\uddd0-\\uddd9\\udef0-\\udef9]|\\ud805[\\udcd0-\\udcd9\\ude50-\\ude59\\udec0-\\udec9]|\\ud806[\\udce0-\\udce9]|\\ud81a[\\ude60-\\ude69\\udf50-\\udf59]|\\ud835[\\udfce-\\udfff]/;\n\n  twttr.txt.regexen.hashtagSpecialChars = /_\\u200c\\u200d\\ua67e\\u05be\\u05f3\\u05f4\\uff5e\\u301c\\u309b\\u309c\\u30a0\\u30fb\\u3003\\u0f0b\\u0f0c\\xb7/;\n\n  // A hashtag must contain at least one unicode letter or mark, as well as numbers, underscores, and select special characters.\n  twttr.txt.regexen.hashSigns = /[##]/;\n  twttr.txt.regexen.hashtagAlpha = regexSupplant(/(?:[#{bmpLetterAndMarks}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}))/);\n  twttr.txt.regexen.hashtagAlphaNumeric = regexSupplant(/(?:[#{bmpLetterAndMarks}#{bmpNumerals}#{hashtagSpecialChars}]|(?=#{non_bmp_code_pairs})(?:#{astralLetterAndMarks}|#{astralNumerals}))/);\n  twttr.txt.regexen.endHashtagMatch = regexSupplant(/^(?:#{hashSigns}|:\\/\\/)/);\n  twttr.txt.regexen.codePoint = /(?:[^\\uD800-\\uDFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/;\n  twttr.txt.regexen.hashtagBoundary = regexSupplant(/(?:^|\\uFE0E|\\uFE0F|$|(?!#{hashtagAlphaNumeric}|&)#{codePoint})/);\n  twttr.txt.regexen.validHashtag = regexSupplant(/(#{hashtagBoundary})(#{hashSigns})(?!\\uFE0F|\\u20E3)(#{hashtagAlphaNumeric}*#{hashtagAlpha}#{hashtagAlphaNumeric}*)/gi);\n\n  // Mention related regex collection\n  twttr.txt.regexen.validMentionPrecedingChars = /(?:^|[^a-zA-Z0-9_!#$%&*@@]|(?:^|[^a-zA-Z0-9_+~.-])(?:rt|RT|rT|Rt):?)/;\n  twttr.txt.regexen.atSigns = /[@@]/;\n  twttr.txt.regexen.validMentionOrList = regexSupplant(\n    '(#{validMentionPrecedingChars})' +  // $1: Preceding character\n    '(#{atSigns})' +                     // $2: At mark\n    '([a-zA-Z0-9_]{1,20})' +             // $3: Screen name\n    '(\\/[a-zA-Z][a-zA-Z0-9_\\-]{0,24})?'  // $4: List (optional)\n  , 'g');\n  twttr.txt.regexen.validReply = regexSupplant(/^(?:#{spaces})*#{atSigns}([a-zA-Z0-9_]{1,20})/);\n  twttr.txt.regexen.endMentionMatch = regexSupplant(/^(?:#{atSigns}|[#{latinAccentChars}]|:\\/\\/)/);\n\n  // URL related regex collection\n  twttr.txt.regexen.validUrlPrecedingChars = regexSupplant(/(?:[^A-Za-z0-9@@$###{invalid_chars_group}]|^)/);\n  twttr.txt.regexen.invalidUrlWithoutProtocolPrecedingChars = /[-_.\\/]$/;\n  twttr.txt.regexen.invalidDomainChars = stringSupplant(\"#{punct}#{spaces_group}#{invalid_chars_group}\", twttr.txt.regexen);\n  twttr.txt.regexen.validDomainChars = regexSupplant(/[^#{invalidDomainChars}]/);\n  twttr.txt.regexen.validSubdomain = regexSupplant(/(?:(?:#{validDomainChars}(?:[_-]|#{validDomainChars})*)?#{validDomainChars}\\.)/);\n  twttr.txt.regexen.validDomainName = regexSupplant(/(?:(?:#{validDomainChars}(?:-|#{validDomainChars})*)?#{validDomainChars}\\.)/);\n  twttr.txt.regexen.validGTLD = regexSupplant(RegExp(\n'(?:(?:' +\n    '삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|' +\n    '政务|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|' +\n    'ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|' +\n    'بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|' +\n    'zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|' +\n    'yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|' +\n    'wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|' +\n    'website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|' +\n    'wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|' +\n    'vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|' +\n    'vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|' +\n    'university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|' +\n    'travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|' +\n    'toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|' +\n    'tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|' +\n    'tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|' +\n    'swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|' +\n    'stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|' +\n    'stada|srt|srl|spreadbetting|spot|spiegel|space|soy|sony|song|solutions|solar|sohu|software|' +\n    'softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|' +\n    'showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|' +\n    'sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|' +\n    'science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|' +\n    'sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|' +\n    'saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|' +\n    'rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|' +\n    'repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|' +\n    'realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|' +\n    'protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|' +\n    'pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|' +\n    'pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|' +\n    'pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|' +\n    'pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|' +\n    'onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|' +\n    'obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|' +\n    'nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|' +\n    'net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|' +\n    'msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|' +\n    'monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|' +\n    'miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|' +\n    'mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|' +\n    'makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|' +\n    'lotte|london|lol|loft|locus|locker|loans|loan|lixil|living|live|lipsy|link|linde|lincoln|limo|' +\n    'limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|' +\n    'lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|' +\n    'lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|' +\n    'komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|' +\n    'kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|' +\n    'jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|' +\n    'investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|' +\n    'industries|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|' +\n    'hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|' +\n    'honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|' +\n    'hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|' +\n    'hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|' +\n    'gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|' +\n    'globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|' +\n    'garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|' +\n    'ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|' +\n    'football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|' +\n    'fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|' +\n    'ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|' +\n    'extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|' +\n    'estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|' +\n    'email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|' +\n    'download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|' +\n    'direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|' +\n    'delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|' +\n    'cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|courses|' +\n    'coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|' +\n    'construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|' +\n    'college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|' +\n    'cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|' +\n    'chintai|cheap|chat|chase|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|' +\n    'catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|' +\n    'capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|' +\n    'bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|' +\n    'bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|' +\n    'boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|' +\n    'black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|' +\n    'beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|' +\n    'barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|' +\n    'autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|' +\n    'art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|' +\n    'amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|' +\n    'alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|' +\n    'afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|' +\n    'academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion' +\n')(?=[^0-9a-zA-Z@]|$))'));\n  twttr.txt.regexen.validCCTLD = regexSupplant(RegExp(\n'(?:(?:' +\n    '한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|' +\n    'ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|' +\n    'بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ελ|' +\n    'zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|' +\n    'tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|' +\n    're|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|' +\n    'mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|' +\n    'ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|' +\n    'gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|' +\n    'do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|' +\n    'bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac' +\n')(?=[^0-9a-zA-Z@]|$))'));\n  twttr.txt.regexen.validPunycode = /(?:xn--[0-9a-z]+)/;\n  twttr.txt.regexen.validSpecialCCTLD = /(?:(?:co|tv)(?=[^0-9a-zA-Z@]|$))/;\n  twttr.txt.regexen.validDomain = regexSupplant(/(?:#{validSubdomain}*#{validDomainName}(?:#{validGTLD}|#{validCCTLD}|#{validPunycode}))/);\n  twttr.txt.regexen.validAsciiDomain = regexSupplant(/(?:(?:[\\-a-z0-9#{latinAccentChars}]+)\\.)+(?:#{validGTLD}|#{validCCTLD}|#{validPunycode})/gi);\n  twttr.txt.regexen.invalidShortDomain = regexSupplant(/^#{validDomainName}#{validCCTLD}$/i);\n  twttr.txt.regexen.validSpecialShortDomain = regexSupplant(/^#{validDomainName}#{validSpecialCCTLD}$/i);\n  twttr.txt.regexen.validPortNumber = /[0-9]+/;\n  twttr.txt.regexen.cyrillicLettersAndMarks = /\\u0400-\\u04FF/;\n  twttr.txt.regexen.validGeneralUrlPathChars = regexSupplant(/[a-z#{cyrillicLettersAndMarks}0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-_~@\\|&#{latinAccentChars}]/i);\n  // Allow URL paths to contain up to two nested levels of balanced parens\n  //  1. Used in Wikipedia URLs like /Primer_(film)\n  //  2. Used in IIS sessions like /S(dfd346)/\n  //  3. Used in Rdio URLs like /track/We_Up_(Album_Version_(Edited))/\n  twttr.txt.regexen.validUrlBalancedParens = regexSupplant(\n    '\\\\('                                   +\n      '(?:'                                 +\n        '#{validGeneralUrlPathChars}+'      +\n        '|'                                 +\n        // allow one nested level of balanced parentheses\n        '(?:'                               +\n          '#{validGeneralUrlPathChars}*'    +\n          '\\\\('                             +\n            '#{validGeneralUrlPathChars}+'  +\n          '\\\\)'                             +\n          '#{validGeneralUrlPathChars}*'    +\n        ')'                                 +\n      ')'                                   +\n    '\\\\)'\n  , 'i');\n  // Valid end-of-path chracters (so /foo. does not gobble the period).\n  // 1. Allow =&# for empty URL parameters and other URL-join artifacts\n  twttr.txt.regexen.validUrlPathEndingChars = regexSupplant(/[\\+\\-a-z#{cyrillicLettersAndMarks}0-9=_#\\/#{latinAccentChars}]|(?:#{validUrlBalancedParens})/i);\n  // Allow @ in a url, but only in the middle. Catch things like http://example.com/@user/\n  twttr.txt.regexen.validUrlPath = regexSupplant('(?:' +\n    '(?:' +\n      '#{validGeneralUrlPathChars}*' +\n        '(?:#{validUrlBalancedParens}#{validGeneralUrlPathChars}*)*' +\n        '#{validUrlPathEndingChars}'+\n      ')|(?:@#{validGeneralUrlPathChars}+\\/)'+\n    ')', 'i');\n\n  twttr.txt.regexen.validUrlQueryChars = /[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]/i;\n  twttr.txt.regexen.validUrlQueryEndingChars = /[a-z0-9_&=#\\/]/i;\n  twttr.txt.regexen.extractUrl = regexSupplant(\n    '('                                                            + // $1 total match\n      '(#{validUrlPrecedingChars})'                                + // $2 Preceeding chracter\n      '('                                                          + // $3 URL\n        '(https?:\\\\/\\\\/)?'                                         + // $4 Protocol (optional)\n        '(#{validDomain})'                                         + // $5 Domain(s)\n        '(?::(#{validPortNumber}))?'                               + // $6 Port number (optional)\n        '(\\\\/#{validUrlPath}*)?'                                   + // $7 URL Path\n        '(\\\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?'  + // $8 Query String\n      ')'                                                          +\n    ')'\n  , 'gi');\n\n  twttr.txt.regexen.validTcoUrl = /^https?:\\/\\/t\\.co\\/[a-z0-9]+/i;\n  twttr.txt.regexen.urlHasProtocol = /^https?:\\/\\//i;\n  twttr.txt.regexen.urlHasHttps = /^https:\\/\\//i;\n\n  // cashtag related regex\n  twttr.txt.regexen.cashtag = /[a-z]{1,6}(?:[._][a-z]{1,2})?/i;\n  twttr.txt.regexen.validCashtag = regexSupplant('(^|#{spaces})(\\\\$)(#{cashtag})(?=$|\\\\s|[#{punct}])', 'gi');\n\n  // These URL validation pattern strings are based on the ABNF from RFC 3986\n  twttr.txt.regexen.validateUrlUnreserved = /[a-z\\u0400-\\u04FF0-9\\-._~]/i;\n  twttr.txt.regexen.validateUrlPctEncoded = /(?:%[0-9a-f]{2})/i;\n  twttr.txt.regexen.validateUrlSubDelims = /[!$&'()*+,;=]/i;\n  twttr.txt.regexen.validateUrlPchar = regexSupplant('(?:' +\n    '#{validateUrlUnreserved}|' +\n    '#{validateUrlPctEncoded}|' +\n    '#{validateUrlSubDelims}|' +\n    '[:|@]' +\n  ')', 'i');\n\n  twttr.txt.regexen.validateUrlScheme = /(?:[a-z][a-z0-9+\\-.]*)/i;\n  twttr.txt.regexen.validateUrlUserinfo = regexSupplant('(?:' +\n    '#{validateUrlUnreserved}|' +\n    '#{validateUrlPctEncoded}|' +\n    '#{validateUrlSubDelims}|' +\n    ':' +\n  ')*', 'i');\n\n  twttr.txt.regexen.validateUrlDecOctet = /(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))/i;\n  twttr.txt.regexen.validateUrlIpv4 = regexSupplant(/(?:#{validateUrlDecOctet}(?:\\.#{validateUrlDecOctet}){3})/i);\n\n  // Punting on real IPv6 validation for now\n  twttr.txt.regexen.validateUrlIpv6 = /(?:\\[[a-f0-9:\\.]+\\])/i;\n\n  // Also punting on IPvFuture for now\n  twttr.txt.regexen.validateUrlIp = regexSupplant('(?:' +\n    '#{validateUrlIpv4}|' +\n    '#{validateUrlIpv6}' +\n  ')', 'i');\n\n  // This is more strict than the rfc specifies\n  twttr.txt.regexen.validateUrlSubDomainSegment = /(?:[a-z0-9](?:[a-z0-9_\\-]*[a-z0-9])?)/i;\n  twttr.txt.regexen.validateUrlDomainSegment = /(?:[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?)/i;\n  twttr.txt.regexen.validateUrlDomainTld = /(?:[a-z](?:[a-z0-9\\-]*[a-z0-9])?)/i;\n  twttr.txt.regexen.validateUrlDomain = regexSupplant(/(?:(?:#{validateUrlSubDomainSegment}\\.)*(?:#{validateUrlDomainSegment}\\.)#{validateUrlDomainTld})/i);\n\n  twttr.txt.regexen.validateUrlHost = regexSupplant('(?:' +\n    '#{validateUrlIp}|' +\n    '#{validateUrlDomain}' +\n  ')', 'i');\n\n  // Unencoded internationalized domains - this doesn't check for invalid UTF-8 sequences\n  twttr.txt.regexen.validateUrlUnicodeSubDomainSegment = /(?:(?:[a-z0-9]|[^\\u0000-\\u007f])(?:(?:[a-z0-9_\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n  twttr.txt.regexen.validateUrlUnicodeDomainSegment = /(?:(?:[a-z0-9]|[^\\u0000-\\u007f])(?:(?:[a-z0-9\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n  twttr.txt.regexen.validateUrlUnicodeDomainTld = /(?:(?:[a-z]|[^\\u0000-\\u007f])(?:(?:[a-z0-9\\-]|[^\\u0000-\\u007f])*(?:[a-z0-9]|[^\\u0000-\\u007f]))?)/i;\n  twttr.txt.regexen.validateUrlUnicodeDomain = regexSupplant(/(?:(?:#{validateUrlUnicodeSubDomainSegment}\\.)*(?:#{validateUrlUnicodeDomainSegment}\\.)#{validateUrlUnicodeDomainTld})/i);\n\n  twttr.txt.regexen.validateUrlUnicodeHost = regexSupplant('(?:' +\n    '#{validateUrlIp}|' +\n    '#{validateUrlUnicodeDomain}' +\n  ')', 'i');\n\n  twttr.txt.regexen.validateUrlPort = /[0-9]{1,5}/;\n\n  twttr.txt.regexen.validateUrlUnicodeAuthority = regexSupplant(\n    '(?:(#{validateUrlUserinfo})@)?'  + // $1 userinfo\n    '(#{validateUrlUnicodeHost})'     + // $2 host\n    '(?::(#{validateUrlPort}))?'        //$3 port\n  , \"i\");\n\n  twttr.txt.regexen.validateUrlAuthority = regexSupplant(\n    '(?:(#{validateUrlUserinfo})@)?' + // $1 userinfo\n    '(#{validateUrlHost})'           + // $2 host\n    '(?::(#{validateUrlPort}))?'       // $3 port\n  , \"i\");\n\n  twttr.txt.regexen.validateUrlPath = regexSupplant(/(\\/#{validateUrlPchar}*)*/i);\n  twttr.txt.regexen.validateUrlQuery = regexSupplant(/(#{validateUrlPchar}|\\/|\\?)*/i);\n  twttr.txt.regexen.validateUrlFragment = regexSupplant(/(#{validateUrlPchar}|\\/|\\?)*/i);\n\n  // Modified version of RFC 3986 Appendix B\n  twttr.txt.regexen.validateUrlUnencoded = regexSupplant(\n    '^'                               + // Full URL\n    '(?:'                             +\n      '([^:/?#]+):\\\\/\\\\/'             + // $1 Scheme\n    ')?'                              +\n    '([^/?#]*)'                       + // $2 Authority\n    '([^?#]*)'                        + // $3 Path\n    '(?:'                             +\n      '\\\\?([^#]*)'                    + // $4 Query\n    ')?'                              +\n    '(?:'                             +\n      '#(.*)'                         + // $5 Fragment\n    ')?$'\n  , \"i\");\n\n\n  // Default CSS class for auto-linked lists (along with the url class)\n  var DEFAULT_LIST_CLASS = \"tweet-url list-slug\";\n  // Default CSS class for auto-linked usernames (along with the url class)\n  var DEFAULT_USERNAME_CLASS = \"tweet-url username\";\n  // Default CSS class for auto-linked hashtags (along with the url class)\n  var DEFAULT_HASHTAG_CLASS = \"tweet-url hashtag\";\n  // Default CSS class for auto-linked cashtags (along with the url class)\n  var DEFAULT_CASHTAG_CLASS = \"tweet-url cashtag\";\n  // Options which should not be passed as HTML attributes\n  var OPTIONS_NOT_ATTRIBUTES = {'urlClass':true, 'listClass':true, 'usernameClass':true, 'hashtagClass':true, 'cashtagClass':true,\n                            'usernameUrlBase':true, 'listUrlBase':true, 'hashtagUrlBase':true, 'cashtagUrlBase':true,\n                            'usernameUrlBlock':true, 'listUrlBlock':true, 'hashtagUrlBlock':true, 'linkUrlBlock':true,\n                            'usernameIncludeSymbol':true, 'suppressLists':true, 'suppressNoFollow':true, 'targetBlank':true,\n                            'suppressDataScreenName':true, 'urlEntities':true, 'symbolTag':true, 'textWithSymbolTag':true, 'urlTarget':true,\n                            'invisibleTagAttrs':true, 'linkAttributeBlock':true, 'linkTextBlock': true, 'htmlEscapeNonEntities': true\n                            };\n\n  var BOOLEAN_ATTRIBUTES = {'disabled':true, 'readonly':true, 'multiple':true, 'checked':true};\n\n  // Simple object cloning function for simple objects\n  function clone(o) {\n    var r = {};\n    for (var k in o) {\n      if (o.hasOwnProperty(k)) {\n        r[k] = o[k];\n      }\n    }\n\n    return r;\n  }\n\n  twttr.txt.tagAttrs = function(attributes) {\n    var htmlAttrs = \"\";\n    for (var k in attributes) {\n      var v = attributes[k];\n      if (BOOLEAN_ATTRIBUTES[k]) {\n        v = v ? k : null;\n      }\n      if (v == null) continue;\n      htmlAttrs += \" \" + twttr.txt.htmlEscape(k) + \"=\\\"\" + twttr.txt.htmlEscape(v.toString()) + \"\\\"\";\n    }\n    return htmlAttrs;\n  };\n\n  twttr.txt.linkToText = function(entity, text, attributes, options) {\n    if (!options.suppressNoFollow) {\n      attributes.rel = \"nofollow\";\n    }\n    // if linkAttributeBlock is specified, call it to modify the attributes\n    if (options.linkAttributeBlock) {\n      options.linkAttributeBlock(entity, attributes);\n    }\n    // if linkTextBlock is specified, call it to get a new/modified link text\n    if (options.linkTextBlock) {\n      text = options.linkTextBlock(entity, text);\n    }\n    var d = {\n      text: text,\n      attr: twttr.txt.tagAttrs(attributes)\n    };\n    return stringSupplant(\"<a#{attr}>#{text}</a>\", d);\n  };\n\n  twttr.txt.linkToTextWithSymbol = function(entity, symbol, text, attributes, options) {\n    var taggedSymbol = options.symbolTag ? \"<\" + options.symbolTag + \">\" + symbol + \"</\"+ options.symbolTag + \">\" : symbol;\n    text = twttr.txt.htmlEscape(text);\n    var taggedText = options.textWithSymbolTag ? \"<\" + options.textWithSymbolTag + \">\" + text + \"</\"+ options.textWithSymbolTag + \">\" : text;\n\n    if (options.usernameIncludeSymbol || !symbol.match(twttr.txt.regexen.atSigns)) {\n      return twttr.txt.linkToText(entity, taggedSymbol + taggedText, attributes, options);\n    } else {\n      return taggedSymbol + twttr.txt.linkToText(entity, taggedText, attributes, options);\n    }\n  };\n\n  twttr.txt.linkToHashtag = function(entity, text, options) {\n    var hash = text.substring(entity.indices[0], entity.indices[0] + 1);\n    var hashtag = twttr.txt.htmlEscape(entity.hashtag);\n    var attrs = clone(options.htmlAttrs || {});\n    attrs.href = options.hashtagUrlBase + hashtag;\n    attrs.title = \"#\" + hashtag;\n    attrs[\"class\"] = options.hashtagClass;\n    if (hashtag.charAt(0).match(twttr.txt.regexen.rtl_chars)){\n      attrs[\"class\"] += \" rtl\";\n    }\n    if (options.targetBlank) {\n      attrs.target = '_blank';\n    }\n\n    return twttr.txt.linkToTextWithSymbol(entity, hash, hashtag, attrs, options);\n  };\n\n  twttr.txt.linkToCashtag = function(entity, text, options) {\n    var cashtag = twttr.txt.htmlEscape(entity.cashtag);\n    var attrs = clone(options.htmlAttrs || {});\n    attrs.href = options.cashtagUrlBase + cashtag;\n    attrs.title = \"$\" + cashtag;\n    attrs[\"class\"] =  options.cashtagClass;\n    if (options.targetBlank) {\n      attrs.target = '_blank';\n    }\n\n    return twttr.txt.linkToTextWithSymbol(entity, \"$\", cashtag, attrs, options);\n  };\n\n  twttr.txt.linkToMentionAndList = function(entity, text, options) {\n    var at = text.substring(entity.indices[0], entity.indices[0] + 1);\n    var user = twttr.txt.htmlEscape(entity.screenName);\n    var slashListname = twttr.txt.htmlEscape(entity.listSlug);\n    var isList = entity.listSlug && !options.suppressLists;\n    var attrs = clone(options.htmlAttrs || {});\n    attrs[\"class\"] = (isList ? options.listClass : options.usernameClass);\n    attrs.href = isList ? options.listUrlBase + user + slashListname : options.usernameUrlBase + user;\n    if (!isList && !options.suppressDataScreenName) {\n      attrs['data-screen-name'] = user;\n    }\n    if (options.targetBlank) {\n      attrs.target = '_blank';\n    }\n\n    return twttr.txt.linkToTextWithSymbol(entity, at, isList ? user + slashListname : user, attrs, options);\n  };\n\n  twttr.txt.linkToUrl = function(entity, text, options) {\n    var url = entity.url;\n    var displayUrl = url;\n    var linkText = twttr.txt.htmlEscape(displayUrl);\n\n    // If the caller passed a urlEntities object (provided by a Twitter API\n    // response with include_entities=true), we use that to render the display_url\n    // for each URL instead of it's underlying t.co URL.\n    var urlEntity = (options.urlEntities && options.urlEntities[url]) || entity;\n    if (urlEntity.display_url) {\n      linkText = twttr.txt.linkTextWithEntity(urlEntity, options);\n    }\n\n    var attrs = clone(options.htmlAttrs || {});\n\n    if (!url.match(twttr.txt.regexen.urlHasProtocol)) {\n      url = \"http://\" + url;\n    }\n    attrs.href = url;\n\n    if (options.targetBlank) {\n      attrs.target = '_blank';\n    }\n\n    // set class only if urlClass is specified.\n    if (options.urlClass) {\n      attrs[\"class\"] = options.urlClass;\n    }\n\n    // set target only if urlTarget is specified.\n    if (options.urlTarget) {\n      attrs.target = options.urlTarget;\n    }\n\n    if (!options.title && urlEntity.display_url) {\n      attrs.title = urlEntity.expanded_url;\n    }\n\n    return twttr.txt.linkToText(entity, linkText, attrs, options);\n  };\n\n  twttr.txt.linkTextWithEntity = function (entity, options) {\n    var displayUrl = entity.display_url;\n    var expandedUrl = entity.expanded_url;\n\n    // Goal: If a user copies and pastes a tweet containing t.co'ed link, the resulting paste\n    // should contain the full original URL (expanded_url), not the display URL.\n    //\n    // Method: Whenever possible, we actually emit HTML that contains expanded_url, and use\n    // font-size:0 to hide those parts that should not be displayed (because they are not part of display_url).\n    // Elements with font-size:0 get copied even though they are not visible.\n    // Note that display:none doesn't work here. Elements with display:none don't get copied.\n    //\n    // Additionally, we want to *display* ellipses, but we don't want them copied.  To make this happen we\n    // wrap the ellipses in a tco-ellipsis class and provide an onCopy handler that sets display:none on\n    // everything with the tco-ellipsis class.\n    //\n    // Exception: pic.twitter.com images, for which expandedUrl = \"https://twitter.com/#!/username/status/1234/photo/1\n    // For those URLs, display_url is not a substring of expanded_url, so we don't do anything special to render the elided parts.\n    // For a pic.twitter.com URL, the only elided part will be the \"https://\", so this is fine.\n\n    var displayUrlSansEllipses = displayUrl.replace(/…/g, \"\"); // We have to disregard ellipses for matching\n    // Note: we currently only support eliding parts of the URL at the beginning or the end.\n    // Eventually we may want to elide parts of the URL in the *middle*.  If so, this code will\n    // become more complicated.  We will probably want to create a regexp out of display URL,\n    // replacing every ellipsis with a \".*\".\n    if (expandedUrl.indexOf(displayUrlSansEllipses) != -1) {\n      var displayUrlIndex = expandedUrl.indexOf(displayUrlSansEllipses);\n      var v = {\n        displayUrlSansEllipses: displayUrlSansEllipses,\n        // Portion of expandedUrl that precedes the displayUrl substring\n        beforeDisplayUrl: expandedUrl.substr(0, displayUrlIndex),\n        // Portion of expandedUrl that comes after displayUrl\n        afterDisplayUrl: expandedUrl.substr(displayUrlIndex + displayUrlSansEllipses.length),\n        precedingEllipsis: displayUrl.match(/^…/) ? \"…\" : \"\",\n        followingEllipsis: displayUrl.match(/…$/) ? \"…\" : \"\"\n      };\n      for (var k in v) {\n        if (v.hasOwnProperty(k)) {\n          v[k] = twttr.txt.htmlEscape(v[k]);\n        }\n      }\n      // As an example: The user tweets \"hi http://longdomainname.com/foo\"\n      // This gets shortened to \"hi http://t.co/xyzabc\", with display_url = \"…nname.com/foo\"\n      // This will get rendered as:\n      // <span class='tco-ellipsis'> <!-- This stuff should get displayed but not copied -->\n      //   …\n      //   <!-- There's a chance the onCopy event handler might not fire. In case that happens,\n      //        we include an &nbsp; here so that the … doesn't bump up against the URL and ruin it.\n      //        The &nbsp; is inside the tco-ellipsis span so that when the onCopy handler *does*\n      //        fire, it doesn't get copied.  Otherwise the copied text would have two spaces in a row,\n      //        e.g. \"hi  http://longdomainname.com/foo\".\n      //   <span style='font-size:0'>&nbsp;</span>\n      // </span>\n      // <span style='font-size:0'>  <!-- This stuff should get copied but not displayed -->\n      //   http://longdomai\n      // </span>\n      // <span class='js-display-url'> <!-- This stuff should get displayed *and* copied -->\n      //   nname.com/foo\n      // </span>\n      // <span class='tco-ellipsis'> <!-- This stuff should get displayed but not copied -->\n      //   <span style='font-size:0'>&nbsp;</span>\n      //   …\n      // </span>\n      v['invisible'] = options.invisibleTagAttrs;\n      return stringSupplant(\"<span class='tco-ellipsis'>#{precedingEllipsis}<span #{invisible}>&nbsp;</span></span><span #{invisible}>#{beforeDisplayUrl}</span><span class='js-display-url'>#{displayUrlSansEllipses}</span><span #{invisible}>#{afterDisplayUrl}</span><span class='tco-ellipsis'><span #{invisible}>&nbsp;</span>#{followingEllipsis}</span>\", v);\n    }\n    return displayUrl;\n  };\n\n  twttr.txt.autoLinkEntities = function(text, entities, options) {\n    options = clone(options || {});\n\n    options.hashtagClass = options.hashtagClass || DEFAULT_HASHTAG_CLASS;\n    options.hashtagUrlBase = options.hashtagUrlBase || \"https://twitter.com/#!/search?q=%23\";\n    options.cashtagClass = options.cashtagClass || DEFAULT_CASHTAG_CLASS;\n    options.cashtagUrlBase = options.cashtagUrlBase || \"https://twitter.com/#!/search?q=%24\";\n    options.listClass = options.listClass || DEFAULT_LIST_CLASS;\n    options.usernameClass = options.usernameClass || DEFAULT_USERNAME_CLASS;\n    options.usernameUrlBase = options.usernameUrlBase || \"https://twitter.com/\";\n    options.listUrlBase = options.listUrlBase || \"https://twitter.com/\";\n    options.htmlAttrs = twttr.txt.extractHtmlAttrsFromOptions(options);\n    options.invisibleTagAttrs = options.invisibleTagAttrs || \"style='position:absolute;left:-9999px;'\";\n\n    // remap url entities to hash\n    var urlEntities, i, len;\n    if(options.urlEntities) {\n      urlEntities = {};\n      for(i = 0, len = options.urlEntities.length; i < len; i++) {\n        urlEntities[options.urlEntities[i].url] = options.urlEntities[i];\n      }\n      options.urlEntities = urlEntities;\n    }\n\n    var result = \"\";\n    var beginIndex = 0;\n\n    // sort entities by start index\n    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n\n    var nonEntity = options.htmlEscapeNonEntities ? twttr.txt.htmlEscape : function(text) {\n      return text;\n    };\n\n    for (var i = 0; i < entities.length; i++) {\n      var entity = entities[i];\n      result += nonEntity(text.substring(beginIndex, entity.indices[0]));\n\n      if (entity.url) {\n        result += twttr.txt.linkToUrl(entity, text, options);\n      } else if (entity.hashtag) {\n        result += twttr.txt.linkToHashtag(entity, text, options);\n      } else if (entity.screenName) {\n        result += twttr.txt.linkToMentionAndList(entity, text, options);\n      } else if (entity.cashtag) {\n        result += twttr.txt.linkToCashtag(entity, text, options);\n      }\n      beginIndex = entity.indices[1];\n    }\n    result += nonEntity(text.substring(beginIndex, text.length));\n    return result;\n  };\n\n  twttr.txt.autoLinkWithJSON = function(text, json, options) {\n    // map JSON entity to twitter-text entity\n    if (json.user_mentions) {\n      for (var i = 0; i < json.user_mentions.length; i++) {\n        // this is a @mention\n        json.user_mentions[i].screenName = json.user_mentions[i].screen_name;\n      }\n    }\n\n    if (json.hashtags) {\n      for (var i = 0; i < json.hashtags.length; i++) {\n        // this is a #hashtag\n        json.hashtags[i].hashtag = json.hashtags[i].text;\n      }\n    }\n\n    if (json.symbols) {\n      for (var i = 0; i < json.symbols.length; i++) {\n        // this is a $CASH tag\n        json.symbols[i].cashtag = json.symbols[i].text;\n      }\n    }\n\n    // concatenate all entities\n    var entities = [];\n    for (var key in json) {\n      entities = entities.concat(json[key]);\n    }\n\n    // modify indices to UTF-16\n    twttr.txt.modifyIndicesFromUnicodeToUTF16(text, entities);\n\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.extractHtmlAttrsFromOptions = function(options) {\n    var htmlAttrs = {};\n    for (var k in options) {\n      var v = options[k];\n      if (OPTIONS_NOT_ATTRIBUTES[k]) continue;\n      if (BOOLEAN_ATTRIBUTES[k]) {\n        v = v ? k : null;\n      }\n      if (v == null) continue;\n      htmlAttrs[k] = v;\n    }\n    return htmlAttrs;\n  };\n\n  twttr.txt.autoLink = function(text, options) {\n    var entities = twttr.txt.extractEntitiesWithIndices(text, {extractUrlsWithoutProtocol: false});\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.autoLinkUsernamesOrLists = function(text, options) {\n    var entities = twttr.txt.extractMentionsOrListsWithIndices(text);\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.autoLinkHashtags = function(text, options) {\n    var entities = twttr.txt.extractHashtagsWithIndices(text);\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.autoLinkCashtags = function(text, options) {\n    var entities = twttr.txt.extractCashtagsWithIndices(text);\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.autoLinkUrlsCustom = function(text, options) {\n    var entities = twttr.txt.extractUrlsWithIndices(text, {extractUrlsWithoutProtocol: false});\n    return twttr.txt.autoLinkEntities(text, entities, options);\n  };\n\n  twttr.txt.removeOverlappingEntities = function(entities) {\n    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n\n    var prev = entities[0];\n    for (var i = 1; i < entities.length; i++) {\n      if (prev.indices[1] > entities[i].indices[0]) {\n        entities.splice(i, 1);\n        i--;\n      } else {\n        prev = entities[i];\n      }\n    }\n  };\n\n  twttr.txt.extractEntitiesWithIndices = function(text, options) {\n    var entities = twttr.txt.extractUrlsWithIndices(text, options)\n                    .concat(twttr.txt.extractMentionsOrListsWithIndices(text))\n                    .concat(twttr.txt.extractHashtagsWithIndices(text, {checkUrlOverlap: false}))\n                    .concat(twttr.txt.extractCashtagsWithIndices(text));\n\n    if (entities.length == 0) {\n      return [];\n    }\n\n    twttr.txt.removeOverlappingEntities(entities);\n    return entities;\n  };\n\n  twttr.txt.extractMentions = function(text) {\n    var screenNamesOnly = [],\n        screenNamesWithIndices = twttr.txt.extractMentionsWithIndices(text);\n\n    for (var i = 0; i < screenNamesWithIndices.length; i++) {\n      var screenName = screenNamesWithIndices[i].screenName;\n      screenNamesOnly.push(screenName);\n    }\n\n    return screenNamesOnly;\n  };\n\n  twttr.txt.extractMentionsWithIndices = function(text) {\n    var mentions = [],\n        mentionOrList,\n        mentionsOrLists = twttr.txt.extractMentionsOrListsWithIndices(text);\n\n    for (var i = 0 ; i < mentionsOrLists.length; i++) {\n      mentionOrList = mentionsOrLists[i];\n      if (mentionOrList.listSlug == '') {\n        mentions.push({\n          screenName: mentionOrList.screenName,\n          indices: mentionOrList.indices\n        });\n      }\n    }\n\n    return mentions;\n  };\n\n  /**\n   * Extract list or user mentions.\n   * (Presence of listSlug indicates a list)\n   */\n  twttr.txt.extractMentionsOrListsWithIndices = function(text) {\n    if (!text || !text.match(twttr.txt.regexen.atSigns)) {\n      return [];\n    }\n\n    var possibleNames = [],\n        slashListname;\n\n    text.replace(twttr.txt.regexen.validMentionOrList, function(match, before, atSign, screenName, slashListname, offset, chunk) {\n      var after = chunk.slice(offset + match.length);\n      if (!after.match(twttr.txt.regexen.endMentionMatch)) {\n        slashListname = slashListname || '';\n        var startPosition = offset + before.length;\n        var endPosition = startPosition + screenName.length + slashListname.length + 1;\n        possibleNames.push({\n          screenName: screenName,\n          listSlug: slashListname,\n          indices: [startPosition, endPosition]\n        });\n      }\n    });\n\n    return possibleNames;\n  };\n\n\n  twttr.txt.extractReplies = function(text) {\n    if (!text) {\n      return null;\n    }\n\n    var possibleScreenName = text.match(twttr.txt.regexen.validReply);\n    if (!possibleScreenName ||\n        RegExp.rightContext.match(twttr.txt.regexen.endMentionMatch)) {\n      return null;\n    }\n\n    return possibleScreenName[1];\n  };\n\n  twttr.txt.extractUrls = function(text, options) {\n    var urlsOnly = [],\n        urlsWithIndices = twttr.txt.extractUrlsWithIndices(text, options);\n\n    for (var i = 0; i < urlsWithIndices.length; i++) {\n      urlsOnly.push(urlsWithIndices[i].url);\n    }\n\n    return urlsOnly;\n  };\n\n  twttr.txt.extractUrlsWithIndices = function(text, options) {\n    if (!options) {\n      options = {extractUrlsWithoutProtocol: true};\n    }\n    if (!text || (options.extractUrlsWithoutProtocol ? !text.match(/\\./) : !text.match(/:/))) {\n      return [];\n    }\n\n    var urls = [];\n\n    while (twttr.txt.regexen.extractUrl.exec(text)) {\n      var before = RegExp.$2, url = RegExp.$3, protocol = RegExp.$4, domain = RegExp.$5, path = RegExp.$7;\n      var endPosition = twttr.txt.regexen.extractUrl.lastIndex,\n          startPosition = endPosition - url.length;\n\n      // if protocol is missing and domain contains non-ASCII characters,\n      // extract ASCII-only domains.\n      if (!protocol) {\n        if (!options.extractUrlsWithoutProtocol\n            || before.match(twttr.txt.regexen.invalidUrlWithoutProtocolPrecedingChars)) {\n          continue;\n        }\n        var lastUrl = null,\n            asciiEndPosition = 0;\n        domain.replace(twttr.txt.regexen.validAsciiDomain, function(asciiDomain) {\n          var asciiStartPosition = domain.indexOf(asciiDomain, asciiEndPosition);\n          asciiEndPosition = asciiStartPosition + asciiDomain.length;\n          lastUrl = {\n            url: asciiDomain,\n            indices: [startPosition + asciiStartPosition, startPosition + asciiEndPosition]\n          };\n          if (path\n              || asciiDomain.match(twttr.txt.regexen.validSpecialShortDomain)\n              || !asciiDomain.match(twttr.txt.regexen.invalidShortDomain)) {\n            urls.push(lastUrl);\n          }\n        });\n\n        // no ASCII-only domain found. Skip the entire URL.\n        if (lastUrl == null) {\n          continue;\n        }\n\n        // lastUrl only contains domain. Need to add path and query if they exist.\n        if (path) {\n          lastUrl.url = url.replace(domain, lastUrl.url);\n          lastUrl.indices[1] = endPosition;\n        }\n      } else {\n        // In the case of t.co URLs, don't allow additional path characters.\n        if (url.match(twttr.txt.regexen.validTcoUrl)) {\n          url = RegExp.lastMatch;\n          endPosition = startPosition + url.length;\n        }\n        urls.push({\n          url: url,\n          indices: [startPosition, endPosition]\n        });\n      }\n    }\n\n    return urls;\n  };\n\n  twttr.txt.extractHashtags = function(text) {\n    var hashtagsOnly = [],\n        hashtagsWithIndices = twttr.txt.extractHashtagsWithIndices(text);\n\n    for (var i = 0; i < hashtagsWithIndices.length; i++) {\n      hashtagsOnly.push(hashtagsWithIndices[i].hashtag);\n    }\n\n    return hashtagsOnly;\n  };\n\n  twttr.txt.extractHashtagsWithIndices = function(text, options) {\n    if (!options) {\n      options = {checkUrlOverlap: true};\n    }\n\n    if (!text || !text.match(twttr.txt.regexen.hashSigns)) {\n      return [];\n    }\n\n    var tags = [];\n\n    text.replace(twttr.txt.regexen.validHashtag, function(match, before, hash, hashText, offset, chunk) {\n      var after = chunk.slice(offset + match.length);\n      if (after.match(twttr.txt.regexen.endHashtagMatch))\n        return;\n      var startPosition = offset + before.length;\n      var endPosition = startPosition + hashText.length + 1;\n      tags.push({\n        hashtag: hashText,\n        indices: [startPosition, endPosition]\n      });\n    });\n\n    if (options.checkUrlOverlap) {\n      // also extract URL entities\n      var urls = twttr.txt.extractUrlsWithIndices(text);\n      if (urls.length > 0) {\n        var entities = tags.concat(urls);\n        // remove overlap\n        twttr.txt.removeOverlappingEntities(entities);\n        // only push back hashtags\n        tags = [];\n        for (var i = 0; i < entities.length; i++) {\n          if (entities[i].hashtag) {\n            tags.push(entities[i]);\n          }\n        }\n      }\n    }\n\n    return tags;\n  };\n\n  twttr.txt.extractCashtags = function(text) {\n    var cashtagsOnly = [],\n        cashtagsWithIndices = twttr.txt.extractCashtagsWithIndices(text);\n\n    for (var i = 0; i < cashtagsWithIndices.length; i++) {\n      cashtagsOnly.push(cashtagsWithIndices[i].cashtag);\n    }\n\n    return cashtagsOnly;\n  };\n\n  twttr.txt.extractCashtagsWithIndices = function(text) {\n    if (!text || text.indexOf(\"$\") == -1) {\n      return [];\n    }\n\n    var tags = [];\n\n    text.replace(twttr.txt.regexen.validCashtag, function(match, before, dollar, cashtag, offset, chunk) {\n      var startPosition = offset + before.length;\n      var endPosition = startPosition + cashtag.length + 1;\n      tags.push({\n        cashtag: cashtag,\n        indices: [startPosition, endPosition]\n      });\n    });\n\n    return tags;\n  };\n\n  twttr.txt.modifyIndicesFromUnicodeToUTF16 = function(text, entities) {\n    twttr.txt.convertUnicodeIndices(text, entities, false);\n  };\n\n  twttr.txt.modifyIndicesFromUTF16ToUnicode = function(text, entities) {\n    twttr.txt.convertUnicodeIndices(text, entities, true);\n  };\n\n  twttr.txt.getUnicodeTextLength = function(text) {\n    return text.replace(twttr.txt.regexen.non_bmp_code_pairs, ' ').length;\n  };\n\n  twttr.txt.convertUnicodeIndices = function(text, entities, indicesInUTF16) {\n    if (entities.length == 0) {\n      return;\n    }\n\n    var charIndex = 0;\n    var codePointIndex = 0;\n\n    // sort entities by start index\n    entities.sort(function(a,b){ return a.indices[0] - b.indices[0]; });\n    var entityIndex = 0;\n    var entity = entities[0];\n\n    while (charIndex < text.length) {\n      if (entity.indices[0] == (indicesInUTF16 ? charIndex : codePointIndex)) {\n        var len = entity.indices[1] - entity.indices[0];\n        entity.indices[0] = indicesInUTF16 ? codePointIndex : charIndex;\n        entity.indices[1] = entity.indices[0] + len;\n\n        entityIndex++;\n        if (entityIndex == entities.length) {\n          // no more entity\n          break;\n        }\n        entity = entities[entityIndex];\n      }\n\n      var c = text.charCodeAt(charIndex);\n      if (0xD800 <= c && c <= 0xDBFF && charIndex < text.length - 1) {\n        // Found high surrogate char\n        c = text.charCodeAt(charIndex + 1);\n        if (0xDC00 <= c && c <= 0xDFFF) {\n          // Found surrogate pair\n          charIndex++;\n        }\n      }\n      codePointIndex++;\n      charIndex++;\n    }\n  };\n\n  // this essentially does text.split(/<|>/)\n  // except that won't work in IE, where empty strings are ommitted\n  // so \"<>\".split(/<|>/) => [] in IE, but is [\"\", \"\", \"\"] in all others\n  // but \"<<\".split(\"<\") => [\"\", \"\", \"\"]\n  twttr.txt.splitTags = function(text) {\n    var firstSplits = text.split(\"<\"),\n        secondSplits,\n        allSplits = [],\n        split;\n\n    for (var i = 0; i < firstSplits.length; i += 1) {\n      split = firstSplits[i];\n      if (!split) {\n        allSplits.push(\"\");\n      } else {\n        secondSplits = split.split(\">\");\n        for (var j = 0; j < secondSplits.length; j += 1) {\n          allSplits.push(secondSplits[j]);\n        }\n      }\n    }\n\n    return allSplits;\n  };\n\n  twttr.txt.hitHighlight = function(text, hits, options) {\n    var defaultHighlightTag = \"em\";\n\n    hits = hits || [];\n    options = options || {};\n\n    if (hits.length === 0) {\n      return text;\n    }\n\n    var tagName = options.tag || defaultHighlightTag,\n        tags = [\"<\" + tagName + \">\", \"</\" + tagName + \">\"],\n        chunks = twttr.txt.splitTags(text),\n        i,\n        j,\n        result = \"\",\n        chunkIndex = 0,\n        chunk = chunks[0],\n        prevChunksLen = 0,\n        chunkCursor = 0,\n        startInChunk = false,\n        chunkChars = chunk,\n        flatHits = [],\n        index,\n        hit,\n        tag,\n        placed,\n        hitSpot;\n\n    for (i = 0; i < hits.length; i += 1) {\n      for (j = 0; j < hits[i].length; j += 1) {\n        flatHits.push(hits[i][j]);\n      }\n    }\n\n    for (index = 0; index < flatHits.length; index += 1) {\n      hit = flatHits[index];\n      tag = tags[index % 2];\n      placed = false;\n\n      while (chunk != null && hit >= prevChunksLen + chunk.length) {\n        result += chunkChars.slice(chunkCursor);\n        if (startInChunk && hit === prevChunksLen + chunkChars.length) {\n          result += tag;\n          placed = true;\n        }\n\n        if (chunks[chunkIndex + 1]) {\n          result += \"<\" + chunks[chunkIndex + 1] + \">\";\n        }\n\n        prevChunksLen += chunkChars.length;\n        chunkCursor = 0;\n        chunkIndex += 2;\n        chunk = chunks[chunkIndex];\n        chunkChars = chunk;\n        startInChunk = false;\n      }\n\n      if (!placed && chunk != null) {\n        hitSpot = hit - prevChunksLen;\n        result += chunkChars.slice(chunkCursor, hitSpot) + tag;\n        chunkCursor = hitSpot;\n        if (index % 2 === 0) {\n          startInChunk = true;\n        } else {\n          startInChunk = false;\n        }\n      } else if(!placed) {\n        placed = true;\n        result += tag;\n      }\n    }\n\n    if (chunk != null) {\n      if (chunkCursor < chunkChars.length) {\n        result += chunkChars.slice(chunkCursor);\n      }\n      for (index = chunkIndex + 1; index < chunks.length; index += 1) {\n        result += (index % 2 === 0 ? chunks[index] : \"<\" + chunks[index] + \">\");\n      }\n    }\n\n    return result;\n  };\n\n  var MAX_LENGTH = 140;\n\n  // Returns the length of Tweet text with consideration to t.co URL replacement\n  // and chars outside the basic multilingual plane that use 2 UTF16 code points\n  twttr.txt.getTweetLength = function(text, options) {\n    if (!options) {\n      options = {\n          // These come from https://api.twitter.com/1.1/help/configuration.json\n          // described by https://dev.twitter.com/rest/reference/get/help/configuration\n          short_url_length: 23,\n          short_url_length_https: 23\n      };\n    }\n    var textLength = twttr.txt.getUnicodeTextLength(text),\n        urlsWithIndices = twttr.txt.extractUrlsWithIndices(text);\n    twttr.txt.modifyIndicesFromUTF16ToUnicode(text, urlsWithIndices);\n\n    for (var i = 0; i < urlsWithIndices.length; i++) {\n      // Subtract the length of the original URL\n      textLength += urlsWithIndices[i].indices[0] - urlsWithIndices[i].indices[1];\n\n      // Add 23 characters for URL starting with https://\n      // http:// URLs still use https://t.co so they are 23 characters as well\n      if (urlsWithIndices[i].url.toLowerCase().match(twttr.txt.regexen.urlHasHttps)) {\n         textLength += options.short_url_length_https;\n      } else {\n        textLength += options.short_url_length;\n      }\n    }\n\n    return textLength;\n  };\n\n  // Check the text for any reason that it may not be valid as a Tweet. This is meant as a pre-validation\n  // before posting to api.twitter.com. There are several server-side reasons for Tweets to fail but this pre-validation\n  // will allow quicker feedback.\n  //\n  // Returns false if this text is valid. Otherwise one of the following strings will be returned:\n  //\n  //   \"too_long\": if the text is too long\n  //   \"empty\": if the text is nil or empty\n  //   \"invalid_characters\": if the text contains non-Unicode or any of the disallowed Unicode characters\n  twttr.txt.isInvalidTweet = function(text) {\n    if (!text) {\n      return \"empty\";\n    }\n\n    // Determine max length independent of URL length\n    if (twttr.txt.getTweetLength(text) > MAX_LENGTH) {\n      return \"too_long\";\n    }\n\n    if (twttr.txt.hasInvalidCharacters(text)) {\n      return \"invalid_characters\";\n    }\n\n    return false;\n  };\n\n  twttr.txt.hasInvalidCharacters = function(text) {\n    return twttr.txt.regexen.invalid_chars.test(text);\n  };\n\n  twttr.txt.isValidTweetText = function(text) {\n    return !twttr.txt.isInvalidTweet(text);\n  };\n\n  twttr.txt.isValidUsername = function(username) {\n    if (!username) {\n      return false;\n    }\n\n    var extracted = twttr.txt.extractMentions(username);\n\n    // Should extract the username minus the @ sign, hence the .slice(1)\n    return extracted.length === 1 && extracted[0] === username.slice(1);\n  };\n\n  var VALID_LIST_RE = regexSupplant(/^#{validMentionOrList}$/);\n\n  twttr.txt.isValidList = function(usernameList) {\n    var match = usernameList.match(VALID_LIST_RE);\n\n    // Must have matched and had nothing before or after\n    return !!(match && match[1] == \"\" && match[4]);\n  };\n\n  twttr.txt.isValidHashtag = function(hashtag) {\n    if (!hashtag) {\n      return false;\n    }\n\n    var extracted = twttr.txt.extractHashtags(hashtag);\n\n    // Should extract the hashtag minus the # sign, hence the .slice(1)\n    return extracted.length === 1 && extracted[0] === hashtag.slice(1);\n  };\n\n  twttr.txt.isValidUrl = function(url, unicodeDomains, requireProtocol) {\n    if (unicodeDomains == null) {\n      unicodeDomains = true;\n    }\n\n    if (requireProtocol == null) {\n      requireProtocol = true;\n    }\n\n    if (!url) {\n      return false;\n    }\n\n    var urlParts = url.match(twttr.txt.regexen.validateUrlUnencoded);\n\n    if (!urlParts || urlParts[0] !== url) {\n      return false;\n    }\n\n    var scheme = urlParts[1],\n        authority = urlParts[2],\n        path = urlParts[3],\n        query = urlParts[4],\n        fragment = urlParts[5];\n\n    if (!(\n      (!requireProtocol || (isValidMatch(scheme, twttr.txt.regexen.validateUrlScheme) && scheme.match(/^https?$/i))) &&\n      isValidMatch(path, twttr.txt.regexen.validateUrlPath) &&\n      isValidMatch(query, twttr.txt.regexen.validateUrlQuery, true) &&\n      isValidMatch(fragment, twttr.txt.regexen.validateUrlFragment, true)\n    )) {\n      return false;\n    }\n\n    return (unicodeDomains && isValidMatch(authority, twttr.txt.regexen.validateUrlUnicodeAuthority)) ||\n           (!unicodeDomains && isValidMatch(authority, twttr.txt.regexen.validateUrlAuthority));\n  };\n\n  function isValidMatch(string, regex, optional) {\n    if (!optional) {\n      // RegExp[\"$&\"] is the text of the last match\n      // blank strings are ok, but are falsy, so we check stringiness instead of truthiness\n      return ((typeof string === \"string\") && string.match(regex) && RegExp[\"$&\"] === string);\n    }\n\n    // RegExp[\"$&\"] is the text of the last match\n    return (!string || (string.match(regex) && RegExp[\"$&\"] === string));\n  }\n\n  if (typeof module != 'undefined' && module.exports) {\n    module.exports = twttr.txt;\n  }\n\n  if (typeof define == 'function' && define.amd) {\n    define([], twttr.txt);\n  }\n\n  if (typeof window != 'undefined') {\n    if (window.twttr) {\n      for (var prop in twttr) {\n        window.twttr[prop] = twttr[prop];\n      }\n    } else {\n      window.twttr = twttr;\n    }\n  }\n})();\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/twitter-text/twitter-text.js\n ** module id = 39\n ** module chunks = 0\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\n\nimport appendChild from '../render/appendChild';\nimport {\n  addEventListener,\n  removeEventListener\n} from './event';\nimport {\n  BORDER_COLOR,\n  disableUserSelect,\n  enableUserSelect,\n  findSVGContainer,\n  findSVGAtPoint,\n  getAnnotationRect,\n  getMetadata,\n  scaleDown,\n  scaleUp\n} from './utils';\nimport {selectComment} from \"./comments\";\nimport {readonly} from \"../initFile\";\nimport {RENDER_OPTIONS} from \".\";\n\n\nlet _enabled = false;\nlet isDragging = false, overlay;\nlet dragOffsetX, dragOffsetY, dragStartX, dragStartY;\nconst OVERLAY_BORDER_SIZE = 3;\n\n\n/**\n * Create an overlay for editing an annotation.\n *\n * @param {Element} target The annotation element to apply overlay for\n */\nexport function createEditOverlay(target) {\n  destroyEditOverlay();\n\n  overlay = document.createElement('div');\n  let anchor = document.createElement('a');\n  let parentNode = findSVGContainer(target).parentNode;\n  let id = target.getAttribute('data-pdf-annotate-id');\n  let rect = getAnnotationRect(target);\n  let scale = 1;\n  const type = target.getAttribute('data-pdf-annotate-type');\n  if(type === 'point')\n    scale = parseFloat($('select.scale').val());\n  let styleLeft = rect.left - OVERLAY_BORDER_SIZE;\n  let styleTop = rect.top - OVERLAY_BORDER_SIZE;\n  \n  overlay.setAttribute('id', 'pdf-annotate-edit-overlay');\n  overlay.setAttribute('data-target-id', id);\n  overlay.style.boxSizing = 'content-box';\n  overlay.style.position = 'absolute';\n  overlay.style.top = `${styleTop * scale}px`;\n  overlay.style.left = `${styleLeft * scale}px`;\n  overlay.style.width = `${rect.width * scale}px`;\n  overlay.style.height = `${rect.height * scale}px`;\n  overlay.style.border = `${OVERLAY_BORDER_SIZE}px solid ${BORDER_COLOR}`;\n  overlay.style.borderRadius = `${OVERLAY_BORDER_SIZE}px`;\n\n  anchor.innerHTML = '×';\n  anchor.setAttribute('href', 'javascript://');\n  anchor.style.background = '#fff';\n  anchor.style.borderRadius = '20px';\n  anchor.style.border = '1px solid #bbb';\n  anchor.style.color = '#bbb';\n  anchor.style.fontSize = '16px';\n  anchor.style.padding = '2px';\n  anchor.style.textAlign = 'center';\n  anchor.style.textDecoration = 'none';\n  anchor.style.position = 'absolute';\n  anchor.style.top = '-13px';\n  anchor.style.right = '-13px';\n  anchor.style.width = '25px';\n  anchor.style.height = '25px';\n\n  if(readonly)\n    anchor.style.display = 'none';\n  overlay.appendChild(anchor);\n  parentNode.appendChild(overlay);\n  document.addEventListener('click', handleDocumentClick);\n  document.addEventListener('keyup', handleDocumentKeyup);\n  document.addEventListener('mousedown', handleDocumentMousedown);\n  anchor.addEventListener('click', deleteAnnotation);\n  anchor.addEventListener('mouseover', () => {\n    anchor.style.color = '#35A4DC';\n    anchor.style.borderColor = '#999';\n    anchor.style.boxShadow = '0 1px 1px #ccc';\n  });\n  anchor.addEventListener('mouseout', () => {\n    anchor.style.color = '#bbb';\n    anchor.style.borderColor = '#bbb';\n    anchor.style.boxShadow = '';\n  });\n  overlay.addEventListener('mouseover', () => {\n    if (!isDragging&&!readonly) { anchor.style.display = ''; }\n  });\n  overlay.addEventListener('mouseout', () => {\n    anchor.style.display = 'none';\n  });\n}\n\n/**\n * Destroy the edit overlay if it exists.\n */\nfunction destroyEditOverlay() {\n  if (overlay && overlay.parentNode) {\n    overlay.parentNode.removeChild(overlay);\n    overlay = null;\n  }\n  document.removeEventListener('click', handleDocumentClick);\n  document.removeEventListener('keyup', handleDocumentKeyup);\n  document.removeEventListener('mousedown', handleDocumentMousedown);\n  document.removeEventListener('mousemove', handleDocumentMousemove);\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n  enableUserSelect();\n}\n\n/**\n * Delete currently selected annotation\n */\nfunction deleteAnnotation() {\n  if (!overlay) { return; }\n\n  let annotationId = overlay.getAttribute('data-target-id');\n  let nodes = document.querySelectorAll(`[data-pdf-annotate-id=\"${annotationId}\"]`);\n  let svg = overlay.parentNode.querySelector('svg.annotationLayer');\n  let { documentId } = getMetadata(svg);\n\n  [...nodes].forEach((n) => {\n    n.parentNode.removeChild(n);\n  });\n  \n  PDFJSAnnotate.getStoreAdapter().deleteAnnotation(documentId, annotationId);\n\n  destroyEditOverlay();\n}\n\n/**\n * Handle document.click event\n *\n * @param {Event} e The DOM event that needs to be handled\n */\nfunction handleDocumentClick(e) {\n  if (!findSVGAtPoint(e.clientX, e.clientY)) { return; }\n\n  // Remove current overlay\n  let overlay = document.getElementById('pdf-annotate-edit-overlay');\n  if (overlay) {\n    if (isDragging || e.target === overlay) {\n      return;\n    }\n    destroyEditOverlay();\n  }\n}\n\n/**\n * Handle document.keyup event\n *\n * @param {Event} e The DOM event that needs to be handled\n */\nfunction handleDocumentKeyup(e) {\n  if (overlay && e.keyCode === 46 &&\n      e.target.nodeName.toLowerCase() !== 'textarea' &&\n      e.target.nodeName.toLowerCase() !== 'input') {\n    if(!readonly)\n      deleteAnnotation();\n  }\n}\n\n/**\n * Handle document.mousedown event\n *\n * @param {Event} e The DOM event that needs to be handled\n */\nfunction handleDocumentMousedown(e) {\n  if (e.target !== overlay) { return; }\n\n  // Highlight and strikeout annotations are bound to text within the document.\n  // It doesn't make sense to allow repositioning these types of annotations.\n  let annotationId = overlay.getAttribute('data-target-id');\n  let target = document.querySelector(`[data-pdf-annotate-id=\"${annotationId}\"]`);\n  let type = target.getAttribute('data-pdf-annotate-type');\n\n  if (type === 'highlight' || type === 'strikeout') { return; }\n\n  let scale = 1;\n  if(type === 'point')\n    scale = parseFloat($('select.scale').val());\n\n\n  if(!readonly)\n    isDragging = true;\n    dragOffsetX = e.clientX;\n    dragOffsetY = e.clientY;\n    dragStartX = overlay.offsetLeft;\n    dragStartY = overlay.offsetTop;\n\n  overlay.style.background = 'rgba(255, 255, 255, 0.7)';\n  overlay.style.cursor = 'move';\n  // if(!readonly)\n    overlay.querySelector('a').style.display = 'none';\n\n  document.addEventListener('mousemove', handleDocumentMousemove);\n  document.addEventListener('mouseup', handleDocumentMouseup);\n  disableUserSelect();\n}\n\n/**\n * Handle document.mousemove event\n *\n * @param {Event} e The DOM event that needs to be handled\n */\nfunction handleDocumentMousemove(e) {\n  if(readonly)\n    return;\n  \n  let annotationId = overlay.getAttribute('data-target-id');\n  let parentNode = overlay.parentNode;\n  let rect = parentNode.getBoundingClientRect();\n  let y = (dragStartY + (e.clientY - dragOffsetY));\n  let x = (dragStartX + (e.clientX - dragOffsetX));\n  let minY = 0;\n  let maxY = rect.height;\n  let minX = 0;\n  let maxX = rect.width;\n  if (y > minY && y + overlay.offsetHeight < maxY) {\n    overlay.style.top = `${y}px`;\n  }\n\n  if (x > minX && x + overlay.offsetWidth < maxX) {\n    overlay.style.left = `${x}px`;\n  }\n}\n\n/**\n * Handle document.mouseup event\n *\n * @param {Event} e The DOM event that needs to be handled\n */\nfunction handleDocumentMouseup(e) {\n  let annotationId = overlay.getAttribute('data-target-id');\n  let target = document.querySelectorAll(`[data-pdf-annotate-id=\"${annotationId}\"]`);\n  let type = target[0].getAttribute('data-pdf-annotate-type');\n  let svg = overlay.parentNode.querySelector('svg.annotationLayer');\n  let { documentId } = getMetadata(svg);\n  \n  overlay.querySelector('a').style.display = '';\n\n  let scale = 1;\n  if(type === 'point')\n    scale = parseFloat($('select.scale').val());\n\n  function getDelta(propX, propY) {\n    return calcDelta(parseInt(target[0].getAttribute(propX), 10), parseInt(target[0].getAttribute(propY), 10));\n  }\n\n  function calcDelta(x, y) {\n    return {\n      deltaX: OVERLAY_BORDER_SIZE + scaleDown(svg, {x: overlay.offsetLeft}).x - x,\n      deltaY: OVERLAY_BORDER_SIZE + scaleDown(svg, {y: overlay.offsetTop}).y - y\n    };\n  }\n\n  PDFJSAnnotate.getStoreAdapter().getAnnotation(documentId, annotationId).then((annotation) => {\n    if (['area', 'highlight', 'point', 'textbox'].indexOf(type) > -1) {\n      let { deltaX, deltaY } = getDelta('x', 'y');\n      [...target].forEach((t, i) => {\n        if (deltaY !== 0) {\n          let modelY = parseInt(t.getAttribute('y'), 10) + deltaY;\n          let viewY = modelY;\n\n          if (type === 'textbox') {\n            viewY += annotation.size;\n          }\n\n          if (type === 'point' && !$.browser.mozilla) {\n            viewY = scaleUp(svg, { viewY }).viewY / scale;\n          }\n          if($.browser.mozilla)\n            viewY -= 8;\n\n          t.setAttribute('y', viewY);\n          if (annotation.rectangles) {\n            annotation.rectangles[i].y = modelY;\n          } else if (annotation.y) {\n            annotation.y = modelY;\n          }\n        }\n        if (deltaX !== 0) {\n          let modelX = parseInt(t.getAttribute('x'), 10) + deltaX;\n          let viewX = modelX;\n\n          if (type === 'point' && !$.browser.mozilla) {\n            viewX = scaleUp(svg, { viewX }).viewX / scale;\n          }\n          if($.browser.mozilla)\n            viewX -= 8;\n\n          t.setAttribute('x', viewX);\n          if (annotation.rectangles) {\n            annotation.rectangles[i].x = modelX;\n          } else if (annotation.x) {\n            annotation.x = modelX;\n          }\n        }\n      });\n    // } else if (type === 'strikeout') {\n    //   let { deltaX, deltaY } = getDelta('x1', 'y1');\n    //   [...target].forEach(target, (t, i) => {\n    //     if (deltaY !== 0) {\n    //       t.setAttribute('y1', parseInt(t.getAttribute('y1'), 10) + deltaY);\n    //       t.setAttribute('y2', parseInt(t.getAttribute('y2'), 10) + deltaY);\n    //       annotation.rectangles[i].y = parseInt(t.getAttribute('y1'), 10);\n    //     }\n    //     if (deltaX !== 0) {\n    //       t.setAttribute('x1', parseInt(t.getAttribute('x1'), 10) + deltaX);\n    //       t.setAttribute('x2', parseInt(t.getAttribute('x2'), 10) + deltaX);\n    //       annotation.rectangles[i].x = parseInt(t.getAttribute('x1'), 10);\n    //     }\n    //   });\n    } else if (type === 'drawing') {\n      let rect = scaleDown(svg, getAnnotationRect(target[0]));\n      let [originX, originY] = annotation.lines[0];\n      let { deltaX, deltaY } = calcDelta(originX, originY);\n\n      // origin isn't necessarily at 0/0 in relation to overlay x/y\n      // adjust the difference between overlay and drawing coords\n      deltaY += (originY - rect.top);\n      deltaX += (originX - rect.left);\n\n      annotation.lines.forEach((line, i) => {\n        let [x, y] = annotation.lines[i];\n        annotation.lines[i][0] = x + deltaX;\n        annotation.lines[i][1] = y + deltaY;\n      });\n\n      target[0].parentNode.removeChild(target[0]);\n      appendChild(svg, annotation);\n    }\n\n    if(!readonly)\n      PDFJSAnnotate.getStoreAdapter().editAnnotation(documentId, annotationId, annotation);\n  });\n\n  setTimeout(() => {\n    isDragging = false;\n  }, 0);\n\n  overlay.style.background = '';\n  overlay.style.cursor = '';\n\n  document.removeEventListener('mousemove', handleDocumentMousemove);\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n  enableUserSelect();\n}\n\n/**\n * Handle annotation.click event\n *\n * @param {Element} e The annotation element that was clicked\n */\nfunction handleAnnotationClick(target) {\n  const type = target.dataset['pdfAnnotateType']\n  if(type==='point')\n    selectComment(target.dataset['pdfAnnotateId']);\n  createEditOverlay(target);\n}\n\n/**\n * Enable edit mode behavior.\n */\nexport function enableEdit () {\n  if (_enabled) { return; }\n\n  _enabled = true;\n  addEventListener('annotation:click', handleAnnotationClick);\n};\n\n/**\n * Disable edit mode behavior.\n */\nexport function disableEdit () {\n  destroyEditOverlay();\n\n\n  if (!_enabled) { return; }\n\n  _enabled = false;\n  removeEventListener('annotation:click', handleAnnotationClick);\n};\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/edit.js\n **/","import objectAssign from 'object-assign';\nimport renderLine from './renderLine';\nimport renderPath from './renderPath';\nimport renderPoint from './renderPoint';\nimport renderRect from './renderRect';\nimport renderText from './renderText';\n\nconst isFirefox = /firefox/i.test(navigator.userAgent);\n\n/**\n * Get the x/y translation to be used for transforming the annotations\n * based on the rotation of the viewport.\n *\n * @param {Object} viewport The viewport data from the page\n * @return {Object}\n */\nfunction getTranslation(viewport) {\n    let x;\n    let y;\n\n    // Modulus 360 on the rotation so that we only\n    // have to worry about four possible values.\n    switch (viewport.rotation % 360) {\n        case 0:\n            x = y = 0;\n            break;\n        case 90:\n            x = 0;\n            y = (viewport.width / viewport.scale) * -1;\n            break;\n        case 180:\n            x = (viewport.width / viewport.scale) * -1;\n            y = (viewport.height / viewport.scale) * -1;\n            break;\n        case 270:\n            x = (viewport.height / viewport.scale) * -1;\n            y = 0;\n            break;\n    }\n\n    return {x, y};\n}\n\n/**\n * Transform the rotation and scale of a node using SVG's native transform attribute.\n *\n * @param {Node} node The node to be transformed\n * @param {Object} viewport The page's viewport data\n * @return {Node}\n */\nfunction transform(node, viewport) {\n    let trans = getTranslation(viewport);\n\n    // Let SVG natively transform the element\n    node.setAttribute('transform', `scale(${viewport.scale}) rotate(${viewport.rotation}) translate(${trans.x}, ${trans.y})`);\n\n    // Manually adjust x/y for nested SVG nodes\n    // console.log(node);\n    // console.log(viewport.scale);\n    // if (!isFirefox && node.nodeName.toLowerCase() === 'svg') {\n    //     node.setAttribute('x', parseInt(node.getAttribute('x'), 10) * viewport.scale);\n    //     node.setAttribute('y', parseInt(node.getAttribute('y'), 10) * viewport.scale);\n\n    //     let x = parseInt(node.getAttribute('x', 10));\n    //     let y = parseInt(node.getAttribute('y', 10));\n    //     let width = parseInt(node.getAttribute('width'), 10);\n    //     let height = parseInt(node.getAttribute('height'), 10);\n    //     let path = node.querySelector('path');\n    //     let svg = path.parentNode;\n\n    //     // Scale width/height\n    //     [node, svg, path, node.querySelector('rect')].forEach((n) => {\n    //         n.setAttribute('width', parseInt(n.getAttribute('width'), 10) * viewport.scale);\n    //         n.setAttribute('height', parseInt(n.getAttribute('height'), 10) * viewport.scale);\n    //     });\n\n    //     // Transform path but keep scale at 100% since it will be handled natively\n    //     transform(path, objectAssign({}, viewport, {scale: 1}));\n\n    //     switch (viewport.rotation % 360) {\n    //         case 90:\n    //             node.setAttribute('x', viewport.width - y - width);\n    //             node.setAttribute('y', x);\n    //             svg.setAttribute('x', 1);\n    //             svg.setAttribute('y', 0);\n    //             break;\n    //         case 180:\n    //             node.setAttribute('x', viewport.width - x - width);\n    //             node.setAttribute('y', viewport.height - y - height);\n    //             svg.setAttribute('y', 2);\n    //             break;\n    //         case 270:\n    //             node.setAttribute('x', y);\n    //             node.setAttribute('y', viewport.height - x - height);\n    //             svg.setAttribute('x', -1);\n    //             svg.setAttribute('y', 0);\n    //             break;\n    //     }\n    // }\n    // else{\n    //     Object.keys(node).forEach((key) => {\n    //     node[key] = node[key] * viewport.scale;\n    //     });\n    // }\n\n    return node;\n}\n\n/**\n * Append an annotation as a child of an SVG.\n *\n * @param {SVGElement} svg The SVG element to append the annotation to\n * @param {Object} annotation The annotation definition to render and append\n * @param {Object} viewport The page's viewport data\n * @return {SVGElement} A node that was created and appended by this function\n */\nexport default function appendChild(svg, annotation, viewport) {\n    if (!viewport) {\n        viewport = JSON.parse(svg.getAttribute('data-pdf-annotate-viewport'));\n    }\n\n    let child;\n    switch (annotation.type) {\n        case 'area':\n        case 'highlight':\n            child = renderRect(annotation);\n            break;\n        case 'strikeout':\n            child = renderLine(annotation);\n            break;\n        case 'point':\n            child = renderPoint(annotation);\n            break;\n        case 'textbox':\n            child = renderText(annotation);\n            break;\n        case 'drawing':\n            child = renderPath(annotation);\n            break;\n    }\n\n    // If no type was provided for an annotation it will result in node being null.\n    // Skip appending/transforming if node doesn't exist.\n    if (child) {\n        // Set attributes\n        child.setAttribute('data-pdf-annotate-id', annotation.uuid);\n        child.setAttribute('data-pdf-annotate-type', annotation.type);\n        child.setAttribute('aria-hidden', true);\n\n        svg.appendChild(transform(child, viewport));\n    }\n\n    return child;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/appendChild.js\n **/","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/object-assign/index.js\n ** module id = 42\n ** module chunks = 0\n **/","import setAttributes from '../utils/setAttributes';\nimport normalizeColor from '../utils/normalizeColor';\n\n/**\n * Create SVGLineElements from an annotation definition.\n * This is used for anntations of type `strikeout`.\n *\n * @param {Object} a The annotation definition\n * @return {SVGGElement} A group of all lines to be rendered\n */\nexport default function renderLine(a) {\n  let group = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n  setAttributes(group, {\n    stroke: normalizeColor(a.color || '#f00'),\n    strokeWidth: 1\n  });\n\n  a.rectangles.forEach((r) => {\n    let line = document.createElementNS('http://www.w3.org/2000/svg', 'line');\n\n    setAttributes(line, {\n      x1: r.x,\n      y1: r.y,\n      x2: r.x + r.width,\n      y2: r.y,\n    });\n\n    group.appendChild(line);\n  });\n\n  return group;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/renderLine.js\n **/","const UPPER_REGEX = /[A-Z]/g;\n\n// Don't convert these attributes from camelCase to hyphenated-attributes\nconst BLACKLIST = [\n  'viewBox'\n];\n\nlet keyCase = (key) => {\n  if (BLACKLIST.indexOf(key) === -1) {\n    key = key.replace(UPPER_REGEX, match => '-' + match.toLowerCase());\n  }\n  return key;\n}\n\n/**\n * Set attributes for a node from a map\n *\n * @param {Node} node The node to set attributes on\n * @param {Object} attributes The map of key/value pairs to use for attributes\n */\nexport default function setAttributes(node, attributes) {\n  Object.keys(attributes).forEach((key) => {\n    node.setAttribute(keyCase(key), attributes[key]);\n  });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/setAttributes.js\n **/","const REGEX_HASHLESS_HEX = /^([a-f0-9]{6}|[a-f0-9]{3})$/i;\n\n/**\n * Normalize a color value\n *\n * @param {String} color The color to normalize\n * @return {String}\n */\nexport default function normalizeColor(color) {\n  if (REGEX_HASHLESS_HEX.test(color)) {\n    color = `#${color}`;\n  }\n  return color;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/normalizeColor.js\n **/","import setAttributes from '../utils/setAttributes';\nimport normalizeColor from '../utils/normalizeColor';\n\n/**\n * Create SVGPathElement from an annotation definition.\n * This is used for anntations of type `drawing`.\n *\n * @param {Object} a The annotation definition\n * @return {SVGPathElement} The path to be rendered\n */\nexport default function renderPath(a) {\n  let d = [];\n  let path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n  \n  for (let i=0, l=a.lines.length; i<l; i++) {\n    var p1 = a.lines[i];\n    var p2 = a.lines[i+1];\n    if (p2) {\n      d.push(`M${p1[0]} ${p1[1]} ${p2[0]} ${p2[1]}`);\n    }\n  }\n  \n  setAttributes(path, {\n    d: `${d.join(' ')}Z`,\n    stroke: normalizeColor(a.color || '#000'),\n    strokeWidth: a.width || 1,\n    fill: 'none'\n  });\n\n  return path;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/renderPath.js\n **/","import setAttributes from '../utils/setAttributes';\n\nconst SIZE = 25;\nconst D = 'M499.968 214.336q-113.832 0 -212.877 38.781t-157.356 104.625 -58.311 142.29q0 62.496 39.897 119.133t112.437 97.929l48.546 27.9 -15.066 53.568q-13.392 50.778 -39.06 95.976 84.816 -35.154 153.45 -95.418l23.994 -21.204 31.806 3.348q38.502 4.464 72.54 4.464 113.832 0 212.877 -38.781t157.356 -104.625 58.311 -142.29 -58.311 -142.29 -157.356 -104.625 -212.877 -38.781z';\n\n/**\n * Create SVGElement from an annotation definition.\n * This is used for anntations of type `comment`.\n *\n * @param {Object} a The annotation definition\n * @return {SVGElement} A svg to be rendered\n */\nexport default function renderPoint(a) {\n  let outerSVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  let innerSVG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  let rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n  let path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\n  setAttributes(outerSVG,  {\n    width: SIZE,\n    height: SIZE,\n    x: a.x,\n    y: a.y\n  });\n\n  setAttributes(innerSVG, {\n    width: SIZE,\n    height: SIZE,\n    x: 0,\n    y: (SIZE * 0.05) * -1,\n    viewBox: '0 0 1000 1000'\n  });\n\n  setAttributes(rect, {\n    width: SIZE,\n    height: SIZE,\n    stroke: '#000',\n    fill: '#ff0'\n  });\n\n  setAttributes(path, {\n    d: D,\n    strokeWidth: 50,\n    stroke: '#000',\n    fill: '#fff'\n  });\n\n  innerSVG.appendChild(path);\n  outerSVG.appendChild(rect);\n  outerSVG.appendChild(innerSVG);\n\n  return outerSVG;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/renderPoint.js\n **/","import setAttributes from '../utils/setAttributes';\nimport normalizeColor from '../utils/normalizeColor';\n\n/**\n * Create SVGRectElements from an annotation definition.\n * This is used for anntations of type `area` and `highlight`.\n *\n * @param {Object} a The annotation definition\n * @return {SVGGElement|SVGRectElement} A group of all rects to be rendered\n */\nexport default function renderRect(a) {\n  if (a.type === 'highlight') {\n    let group = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n    setAttributes(group, {\n      fill: normalizeColor(a.color || '#ff0'),\n      fillOpacity: 0.2\n    });\n    \n    a.rectangles.forEach((r) => {\n      group.appendChild(createRect(r));\n    });\n\n    return group;\n  } else {\n    let rect = createRect(a);\n    setAttributes(rect, {\n      stroke: normalizeColor(a.color || '#f00'),\n      fill: 'none'\n    });\n\n    return rect;\n  }\n}\n\nfunction createRect(r) {\n  let rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n\n  setAttributes(rect, {\n    x: r.x,\n    y: r.y,\n    width: r.width,\n    height: r.height\n  });\n\n  return rect;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/renderRect.js\n **/","import setAttributes from '../utils/setAttributes';\nimport normalizeColor from '../utils/normalizeColor';\n\n/**\n * Create SVGTextElement from an annotation definition.\n * This is used for anntations of type `textbox`.\n *\n * @param {Object} a The annotation definition\n * @return {SVGTextElement} A text to be rendered\n */\nexport default function renderText(a) {\n  var text = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n\n  setAttributes(text, {\n    x: a.x,\n    y: a.y + parseInt(a.size, 10),\n    fill: normalizeColor(a.color || '#000'),\n    fontSize: a.size\n  });\n  text.innerHTML = a.content;\n\n  return text;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/renderText.js\n **/","import { addEventListener, removeEventListener, fireEvent } from './event';\nimport { disableEdit, enableEdit } from './edit';\nimport { disablePen, enablePen, setPen } from './pen';\nimport { disablePoint, enablePoint } from './point';\nimport { disableRect, enableRect } from './rect';\nimport { disableText, enableText, setText } from './text';\nimport { createPage, renderPage } from './page';\nimport { setActiveToolbarItem } from './utils';\n\n\nexport default {\n  addEventListener, removeEventListener, fireEvent,\n  disableEdit, enableEdit,\n  disablePen, enablePen, setPen,\n  disablePoint, enablePoint,\n  disableRect, enableRect,\n  disableText, enableText, setText,\n  createPage, renderPage,\n  setActiveToolbarItem\n};\n\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/index.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport appendChild from '../render/appendChild';\nimport {\n  disableUserSelect,\n  enableUserSelect,\n  findSVGAtPoint,\n  getMetadata,\n  scaleDown\n} from './utils';\n\nlet _enabled = false;\nlet _penSize;\nlet _penColor;\nlet path;\nlet lines;\n\n/**\n * Handle document.mousedown event\n */\nfunction handleDocumentMousedown() {\n  path = null;\n  lines = [];\n\n  document.addEventListener('mousemove', handleDocumentMousemove);\n  document.addEventListener('mouseup', handleDocumentMouseup);\n}\n\n/**\n * Handle document.mouseup event\n *\n * @param {Event} e The DOM event to be handled\n */\nfunction handleDocumentMouseup(e) {\n  let svg;\n  if (lines.length > 1 && (svg = findSVGAtPoint(e.clientX, e.clientY))) {\n    let { documentId, pageNumber } = getMetadata(svg);\n\n    PDFJSAnnotate.getStoreAdapter().addAnnotation(documentId, pageNumber, {\n        type: 'drawing',\n        width: _penSize,\n        color: _penColor,\n        lines\n      }\n    ).then((annotation) => {\n      if (path) {\n        svg.removeChild(path);\n      }\n\n      appendChild(svg, annotation);\n    });\n  }\n\n  document.removeEventListener('mousemove', handleDocumentMousemove);\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n}\n\n/**\n * Handle document.mousemove event\n *\n * @param {Event} e The DOM event to be handled\n */\nfunction handleDocumentMousemove(e) {\n  savePoint(e.clientX, e.clientY);\n}\n\n/**\n * Handle document.keyup event\n *\n * @param {Event} e The DOM event to be handled\n */\nfunction handleDocumentKeyup(e) {\n  // Cancel rect if Esc is pressed\n  if (e.keyCode === 27) {\n    lines = null;\n    path.parentNode.removeChild(path);\n    document.removeEventListener('mousemove', handleDocumentMousemove);\n    document.removeEventListener('mouseup', handleDocumentMouseup);\n  }\n}\n\n/**\n * Save a point to the line being drawn.\n *\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n */\nfunction savePoint(x, y) {\n  let svg = findSVGAtPoint(x, y);\n  if (!svg) {\n    return;\n  }\n\n  let rect = svg.getBoundingClientRect();\n  let point = scaleDown(svg, {\n    x: x - rect.left,\n    y: y - rect.top\n  });\n\n  lines.push([point.x, point.y]);\n\n  if (lines.length <= 1) {\n    return;\n  }\n\n  if (path) {\n    svg.removeChild(path);\n  }\n\n  path = appendChild(svg, {\n    type: 'drawing',\n    color: _penColor,\n    width: _penSize,\n    lines\n  });\n}\n\n/**\n * Set the attributes of the pen.\n *\n * @param {Number} penSize The size of the lines drawn by the pen\n * @param {String} penColor The color of the lines drawn by the pen\n */\nexport function setPen(penSize = 1, penColor = '000000') {\n  _penSize = parseInt(penSize, 10);\n  _penColor = penColor;\n}\n\n/**\n * Enable the pen behavior\n */\nexport function enablePen() {\n  if (_enabled) { return; }\n\n  _enabled = true;\n  document.addEventListener('mousedown', handleDocumentMousedown);\n  document.addEventListener('keyup', handleDocumentKeyup);\n  disableUserSelect();\n}\n\n/**\n * Disable the pen behavior\n */\nexport function disablePen() {\n  if (!_enabled) { return; }\n\n  _enabled = false;\n  document.removeEventListener('mousedown', handleDocumentMousedown);\n  document.removeEventListener('keyup', handleDocumentKeyup);\n  enableUserSelect();\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/pen.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport appendChild from '../render/appendChild';\nimport {\n  BORDER_COLOR,\n  findSVGAtPoint,\n  getMetadata,\n  scaleDown\n} from './utils';\n\nlet _enabled = false;\nlet input;\n\n/**\n * Handle document.mouseup event\n *\n * @param {Event} The DOM event to be handled\n */\nfunction handleDocumentMouseup(e) {\n\n  if (input || !findSVGAtPoint(e.clientX, e.clientY)) {\n    return\n  }\n  \n  input = document.createElement('textarea');\n  input.setAttribute('id', 'pdf-annotate-point-input');\n  input.setAttribute('placeholder', 'Saisir un commentaire');\n  input.style.border = `3px solid ${BORDER_COLOR}`;\n  input.style.borderRadius = '3px';\n  input.style.position = 'absolute';\n  input.style.top = `${e.clientY}px`;\n  input.style.left = `${e.clientX}px`;\n  input.style.width = '220px';\n  input.style.height = '130px';\n\n  input.addEventListener('blur', handleInputBlur);\n  input.addEventListener('keyup', handleInputKeyup);\n\n  document.body.appendChild(input);\n  input.focus();\n}\n\n/**\n * Handle input.blur event\n */\nfunction handleInputBlur() {\n  savePoint();\n}\n\n/**\n * Handle input.keyup event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleInputKeyup(e) {\n  if (e.keyCode === 27) {\n    closeInput();\n  } else if (e.keyCode === 13) {\n    savePoint();\n  }\n}\n\n/**\n * Save a new point annotation from input\n */\nfunction savePoint() {\n  if (input.value.trim().length > 0) {\n    let clientX = parseInt(input.style.left, 10);\n    let clientY = parseInt(input.style.top, 10);\n    let content = input.value.trim();\n    let svg = findSVGAtPoint(clientX, clientY);\n    if (!svg) {\n      return;\n    }\n\n    let rect = svg.getBoundingClientRect();\n    let { documentId, pageNumber } = getMetadata(svg);\n    let annotation = Object.assign({\n        type: 'point'\n      }, scaleDown(svg, {\n        x: clientX - rect.left,\n        y: clientY - rect.top\n      })\n    );\n\n    PDFJSAnnotate.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation)\n      .then((annotation) => {\n        PDFJSAnnotate.getStoreAdapter().addComment(\n          documentId,\n          annotation.uuid,\n          content\n        );\n\n        appendChild(svg, annotation);\n      });\n  }\n\n  closeInput();\n}\n\n/**\n * Close the input element\n */\nfunction closeInput() {\n  input.removeEventListener('blur', handleInputBlur);\n  input.removeEventListener('keyup', handleInputKeyup);\n  document.body.removeChild(input);\n  input = null;\n}\n\n/**\n * Enable point annotation behavior\n */\nexport function enablePoint() {\n  if (_enabled) { return; }\n\n  _enabled = true;\n  document.addEventListener('mouseup', handleDocumentMouseup);\n}\n\n/**\n * Disable point annotation behavior\n */\nexport function disablePoint() {\n  if (!_enabled) { return; }\n\n  _enabled = false;\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/point.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport appendChild from '../render/appendChild';\nimport {\n  BORDER_COLOR,\n  disableUserSelect,\n  enableUserSelect,\n  findSVGAtPoint,\n  getMetadata,\n  getOffset,\n  scaleDown,\n  scaleUp\n} from './utils';\n\nlet _enabled = false;\nlet _type;\nlet overlay;\nlet originY;\nlet originX;\n\n/**\n * Get the current window selection as rects\n *\n * @return {Array} An Array of rects\n */\nfunction getSelectionRects() {\n  try {\n    let selection = window.getSelection();\n    let range = selection.getRangeAt(0);\n    let rects = range.getClientRects();\n\n    if (rects.length > 0 &&\n        rects[0].width > 0 &&\n        rects[0].height > 0) {\n      return rects;\n    }\n  } catch (e) {}\n  \n  return null;\n}\n\n/**\n * Handle document.mousedown event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleDocumentMousedown(e) {\n  let svg;\n  if (_type !== 'area' || !(svg = findSVGAtPoint(e.clientX, e.clientY))) {\n    return;\n  }\n\n  let rect = svg.getBoundingClientRect();\n  originY = e.clientY;\n  originX = e.clientX;\n\n  overlay = document.createElement('div');\n  overlay.style.position = 'absolute';\n  overlay.style.top = `${originY - rect.top}px`;\n  overlay.style.left = `${originX - rect.left}px`;\n  overlay.style.border = `3px solid ${BORDER_COLOR}`;\n  overlay.style.borderRadius = '3px';\n  svg.parentNode.appendChild(overlay);\n  \n  document.addEventListener('mousemove', handleDocumentMousemove);\n  disableUserSelect();\n}\n\n/**\n * Handle document.mousemove event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleDocumentMousemove(e) {\n  let svg = overlay.parentNode.querySelector('svg.annotationLayer');\n  let rect = svg.getBoundingClientRect();\n\n  if (originX + (e.clientX - originX) < rect.right) {\n    overlay.style.width = `${e.clientX - originX}px`;\n  }\n\n  if (originY + (e.clientY - originY) < rect.bottom) {\n    overlay.style.height = `${e.clientY - originY}px`;\n  }\n}\n\n/**\n * Handle document.mouseup event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleDocumentMouseup(e) {\n  let rects;\n  if (_type !== 'area' && (rects = getSelectionRects())) {\n    let svg = findSVGAtPoint(rects[0].left, rects[0].top);\n    saveRect(_type, [...rects].map((r) => {\n      return {\n        top: r.top,\n        left: r.left,\n        width: r.width,\n        height: r.height\n      };\n    }));\n  } else if (_type === 'area' && overlay) {\n    let svg = overlay.parentNode.querySelector('svg.annotationLayer');\n    let rect = svg.getBoundingClientRect();\n    saveRect(_type, [{\n      top: parseInt(overlay.style.top, 10) + rect.top,\n      left: parseInt(overlay.style.left, 10) + rect.left,\n      width: parseInt(overlay.style.width, 10),\n      height: parseInt(overlay.style.height, 10)\n    }]);\n\n    overlay.parentNode.removeChild(overlay);\n    overlay = null;\n\n    document.removeEventListener('mousemove', handleDocumentMousemove);\n    enableUserSelect();\n  }\n}\n\n/**\n * Handle document.keyup event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleDocumentKeyup(e) {\n  // Cancel rect if Esc is pressed\n  if (e.keyCode === 27) {\n    let selection = window.getSelection();\n    selection.removeAllRanges();\n    if (overlay && overlay.parentNode) {\n      overlay.parentNode.removeChild(overlay);\n      overlay = null;\n      document.removeEventListener('mousemove', handleDocumentMousemove);\n    }\n  }\n}\n\n/**\n * Save a rect annotation\n *\n * @param {String} type The type of rect (area, highlight, strikeout)\n * @param {Array} rects The rects to use for annotation\n * @param {String} color The color of the rects\n */\nfunction saveRect(type, rects, color) {\n  let svg = findSVGAtPoint(rects[0].left, rects[0].top);\n  let node;\n  let annotation;\n\n  if (!svg) {\n    return;\n  }\n\n  let boundingRect = svg.getBoundingClientRect();\n\n  if (!color) {\n    if (type === 'highlight') {\n      color = 'FFFF00';\n    } else if (type === 'strikeout') {\n      color = 'FF0000';\n    }\n  }\n\n  // Initialize the annotation\n  annotation = {\n    type,\n    color,\n    rectangles: [...rects].map((r) => {\n      let offset = 0;\n\n      if (type === 'strikeout') {\n        offset = r.height / 2;\n      }\n\n      return scaleDown(svg, {\n        y: (r.top + offset) - boundingRect.top,\n        x: r.left - boundingRect.left,\n        width: r.width,\n        height: r.height\n      });\n    }).filter((r) => r.width > 0 && r.height > 0 && r.x > -1 && r.y > -1)\n  };\n  \n  // Short circuit if no rectangles exist\n  if (annotation.rectangles.length === 0) {\n    return;\n  }\n\n  // Special treatment for area as it only supports a single rect\n  if (type === 'area') {\n    let rect = annotation.rectangles[0];\n    delete annotation.rectangles;\n    annotation.x = rect.x;\n    annotation.y = rect.y;\n    annotation.width = rect.width;\n    annotation.height = rect.height;\n  }\n\n  let { documentId, pageNumber } = getMetadata(svg);\n\n  // Add the annotation\n  PDFJSAnnotate.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation)\n    .then((annotation) => {\n      appendChild(svg, annotation);\n    });\n}\n\n/**\n * Enable rect behavior\n */\nexport function enableRect(type) {\n  _type = type;\n  \n  if (_enabled) { return; }\n\n  _enabled = true;\n  document.addEventListener('mouseup', handleDocumentMouseup);\n  document.addEventListener('mousedown', handleDocumentMousedown);\n  document.addEventListener('keyup', handleDocumentKeyup);\n}\n\n/**\n * Disable rect behavior\n */\nexport function disableRect() {\n  if (!_enabled) { return; }\n\n  _enabled = false;\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n  document.removeEventListener('mousedown', handleDocumentMousedown);\n  document.removeEventListener('keyup', handleDocumentKeyup);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/rect.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport appendChild from '../render/appendChild';\nimport {\n  BORDER_COLOR,\n  findSVGAtPoint,\n  getMetadata,\n  scaleDown\n} from './utils';\n\nlet _enabled = false;\nlet input;\nlet _textSize;\nlet _textColor;\n\n/**\n * Handle document.mouseup event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleDocumentMouseup(e) {\n  if (input || !findSVGAtPoint(e.clientX, e.clientY)) {\n    return;\n  }\n\n  input = document.createElement('input');\n  input.setAttribute('id', 'pdf-annotate-text-input');\n  input.setAttribute('placeholder', 'Enter text');\n  input.style.border = `3px solid ${BORDER_COLOR}`;\n  input.style.borderRadius = '3px';\n  input.style.position = 'absolute';\n  input.style.top = `${e.clientY}px`;\n  input.style.left = `${e.clientX}px`;\n  input.style.fontSize = `${_textSize}px`;\n\n  input.addEventListener('blur', handleInputBlur);\n  input.addEventListener('keyup', handleInputKeyup);\n\n  document.body.appendChild(input);\n  input.focus();\n}\n\n/**\n * Handle input.blur event\n */\nfunction handleInputBlur() {\n  saveText();\n}\n\n/**\n * Handle input.keyup event\n *\n * @param {Event} e The DOM event to handle\n */\nfunction handleInputKeyup(e) {\n  if (e.keyCode === 27) {\n    closeInput();\n  } else if (e.keyCode === 13) {\n    saveText();\n  }\n}\n\n/**\n * Save a text annotation from input\n */\nfunction saveText() {\n  if (input.value.trim().length > 0) {\n    let clientX = parseInt(input.style.left, 10);\n    let clientY = parseInt(input.style.top, 10);\n    let svg = findSVGAtPoint(clientX, clientY);\n    if (!svg) {\n      return;\n    }\n\n    let { documentId, pageNumber } = getMetadata(svg);\n    let rect = svg.getBoundingClientRect();\n    let annotation = Object.assign({\n      type: 'textbox',\n      size: _textSize,\n      color: _textColor,\n      content: input.value.trim()\n    }, scaleDown(svg, {\n      x: clientX - rect.left,\n      y: clientY - rect.top,\n      width: input.offsetWidth,\n      height: input.offsetHeight\n    })\n    );\n\n    PDFJSAnnotate.getStoreAdapter().addAnnotation(documentId, pageNumber, annotation)\n      .then((annotation) => {\n        appendChild(svg, annotation);\n      });\n  }\n\n  closeInput();\n}\n\n/**\n * Close the input\n */\nfunction closeInput() {\n  try {\n    if (input) {\n      input.removeEventListener('blur', handleInputBlur);\n      input.removeEventListener('keyup', handleInputKeyup);\n      document.body.removeChild(input);\n      input = null;\n    }\n  } catch(e){\n    console.log('Try/catch is necessary because exist a error in Safari');\n  }\n}\n\n/**\n * Set the text attributes\n *\n * @param {Number} textSize The size of the text\n * @param {String} textColor The color of the text\n */\nexport function setText(textSize = 12, textColor = '000000') {\n  _textSize = parseInt(textSize, 10);\n  _textColor = textColor;\n}\n\n\n/**\n * Enable text behavior\n */\nexport function enableText() {\n  if (_enabled) { return; }\n\n  _enabled = true;\n  document.addEventListener('mouseup', handleDocumentMouseup);\n}\n\n\n/**\n * Disable text behavior\n */\nexport function disableText() {\n  if (!_enabled) { return; }\n\n  _enabled = false;\n  document.removeEventListener('mouseup', handleDocumentMouseup);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/text.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport renderScreenReaderHints from '../a11y/renderScreenReaderHints';\n\n// Template for creating a new page\nconst PAGE_TEMPLATE = `\n  <div style=\"visibility: hidden;\" class=\"page\" data-loaded=\"false\">\n    <div class=\"canvasWrapper\">\n      <canvas></canvas>\n    </div>\n    <svg class=\"annotationLayer\"></svg>\n    <div class=\"textLayer\"></div>\n  </div>\n`;\n\n/**\n * Create a new page to be appended to the DOM.\n *\n * @param {Number} pageNumber The page number that is being created\n * @return {HTMLElement}\n */\nexport function createPage(pageNumber) {\n  let temp = document.createElement('div');\n  temp.innerHTML = PAGE_TEMPLATE;\n\n  let page = temp.children[0];\n  let canvas = page.querySelector('canvas');\n\n  page.setAttribute('id', `pageContainer${pageNumber}`);\n  page.setAttribute('data-page-number', pageNumber);\n\n  canvas.mozOpaque = true;\n  canvas.setAttribute('id', `page${pageNumber}`);\n\n  // let svg = page.querySelector('.');\n  //   // let svg = document.body;\n  // console.log(svg)\n  // // let svg = document.getElementById();\n  //\n  // document.addEventListener('click', function handleDocumentClick(e) {\n  //   console.log(click)\n  //     if (!findSVGAtPoint(e.clientX, e.clientY)) {\n  //         return;\n  //     }\n  //\n  //     let target = findAnnotationAtPoint(e.clientX, e.clientY);\n  //\n  //     // Emit annotation:blur if clickNode is no longer clicked\n  //     if (clickNode && clickNode !== target) {\n  //         emitter.emit('annotation:blur', clickNode);\n  //     }\n  //\n  //     // Emit annotation:click if target was clicked\n  //     if (target) {\n  //         emitter.emit('annotation:click', target);\n  //     }\n  //\n  //     clickNode = target;\n  // });\n\n  return page;\n}\n\n/**\n * Render a page that has already been created.\n *\n * @param {Number} pageNumber The page number to be rendered\n * @param {Object} renderOptions The options for rendering\n * @return {Promise} Settled once rendering has completed\n *  A settled Promise will be either:\n *    - fulfilled: [pdfPage, annotations]\n *    - rejected: Error\n */\nexport function renderPage(pageNumber, annotations, renderOptions) {\n  let {\n    documentId,\n    pdfDocument,\n    scale,\n    rotate\n  } = renderOptions;\n\n  // Load the page and annotations\n  return Promise.all([\n    pdfDocument.getPage(pageNumber),\n  ]).then(([pdfPage]) => {\n    let page = document.getElementById(`pageContainer${pageNumber}`);\n    let svg = page.querySelector('.annotationLayer');\n    let canvas = page.querySelector('.canvasWrapper canvas');\n    let canvasContext = canvas.getContext('2d', {alpha: false});\n    let viewport = pdfPage.getViewport(scale);\n    let transform = scalePage(pageNumber, viewport, canvasContext);\n\n    // Render the page\n    return Promise.all([\n      pdfPage.render({ canvasContext, viewport, transform }),\n      PDFJSAnnotate.render(svg, viewport, {pageNumber, documentId, annotations:annotations[pageNumber]})\n    ]).then(() => {\n      // Text content is needed for a11y, but is also necessary for creating\n      // highlight and strikeout annotations which require selecting text.\n      return pdfPage.getTextContent({normalizeWhitespace: true}).then((textContent) => {\n        return new Promise((resolve, reject) => {\n          // Render text layer for a11y of text content\n          let textLayer = page.querySelector(`.textLayer`);\n          let textLayerFactory = new pdfjsViewer.DefaultTextLayerFactory();\n          let textLayerBuilder = textLayerFactory.createTextLayerBuilder(textLayer, pageNumber -1, viewport);\n          textLayerBuilder.setTextContent(textContent);\n          textLayerBuilder.render();\n\n          // Enable a11y for annotations\n          // Timeout is needed to wait for `textLayerBuilder.render`\n          setTimeout(() => {\n            try {\n              renderScreenReaderHints(annotations.annotations);\n              resolve();\n            } catch (e) {\n              reject(e);\n            }\n          });\n        });\n      });\n    }).then(() => {\n      // Indicate that the page was loaded\n      page.setAttribute('data-loaded', 'true');\n\n      return [pdfPage, annotations];\n    });\n  });\n}\n\n/**\n * Scale the elements of a page.\n *\n * @param {Number} pageNumber The page number to be scaled\n * @param {Object} viewport The viewport of the PDF page (see pdfPage.getViewport(scale, rotate))\n * @param {Object} context The canvas context that the PDF page is rendered to\n * @return {Array} The transform data for rendering the PDF page\n */\nfunction scalePage(pageNumber, viewport, context) {\n  let page = document.getElementById(`pageContainer${pageNumber}`);\n  let canvas = page.querySelector('.canvasWrapper canvas');\n  let svg = page.querySelector('.annotationLayer');\n  let wrapper = page.querySelector('.canvasWrapper');\n  let textLayer = page.querySelector('.textLayer');\n  let outputScale = getOutputScale(context);\n  let transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0];\n  let sfx = approximateFraction(outputScale.sx);\n  let sfy = approximateFraction(outputScale.sy);\n\n  // Adjust width/height for scale\n  page.style.visibility = '';\n  canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]);\n  canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]);\n  canvas.style.width = roundToDivide(viewport.width, sfx[1]) + 'px';\n  canvas.style.height = roundToDivide(viewport.height, sfx[1]) + 'px';\n  svg.setAttribute('width', viewport.width);\n  svg.setAttribute('height', viewport.height);\n  svg.style.width = `${viewport.width}px`;\n  svg.style.height = `${viewport.height}px`;\n  page.style.width = `${viewport.width}px`;\n  page.style.height = `${viewport.height}px`;\n  wrapper.style.width = `${viewport.width}px`;\n  wrapper.style.height = `${viewport.height}px`;\n  textLayer.style.width = `${viewport.width}px`;\n  textLayer.style.height = `${viewport.height}px`;\n\n  return transform;\n}\n\n/**\n * The following methods are taken from mozilla/pdf.js and as such fall under\n * the Apache License (http://www.apache.org/licenses/).\n *\n * Original source can be found at mozilla/pdf.js:\n * https://github.com/mozilla/pdf.js/blob/master/web/ui_utils.js\n */\n\n/**\n * Approximates a float number as a fraction using Farey sequence (max order\n * of 8).\n *\n * @param {Number} x Positive float number\n * @return {Array} Estimated fraction: the first array item is a numerator,\n *                 the second one is a denominator.\n */\nfunction approximateFraction(x) {\n  // Fast path for int numbers or their inversions.\n  if (Math.floor(x) === x) {\n    return [x, 1];\n  }\n\n  const xinv = 1 / x;\n  const limit = 8;\n  if (xinv > limit) {\n    return [1, limit];\n  } else if (Math.floor(xinv) === xinv) {\n    return [1, xinv];\n  }\n\n  const x_ = x > 1 ? xinv : x;\n  \n  // a/b and c/d are neighbours in Farey sequence.\n  let a = 0, b = 1, c = 1, d = 1;\n  \n  // Limit search to order 8.\n  while (true) {\n    // Generating next term in sequence (order of q).\n    let p = a + c, q = b + d;\n    if (q > limit) {\n      break;\n    }\n    if (x_ <= p / q) {\n      c = p; d = q;\n    } else {\n      a = p; b = q;\n    }\n  }\n\n  // Select closest of neighbours to x.\n  if (x_ - a / b < c / d - x_) {\n    return x_ === x ? [a, b] : [b, a];\n  } else {\n    return x_ === x ? [c, d] : [d, c];\n  }\n}\n\nfunction getOutputScale(ctx) {\n  let devicePixelRatio = window.devicePixelRatio || 1;\n  let backingStoreRatio = ctx.webkitBackingStorePixelRatio ||\n                          ctx.mozBackingStorePixelRatio ||\n                          ctx.msBackingStorePixelRatio ||\n                          ctx.oBackingStorePixelRatio ||\n                          ctx.backingStorePixelRatio || 1;\n  let pixelRatio = devicePixelRatio / backingStoreRatio;\n  return {\n    sx: pixelRatio,\n    sy: pixelRatio,\n    scaled: pixelRatio !== 1\n  };\n}\n\nfunction roundToDivide(x, div) {\n  let r = x % div;\n  return r === 0 ? x : Math.round(x - r + div);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UI/page.js\n **/","import insertScreenReaderHint from './insertScreenReaderHint';\nimport initEventHandlers from './initEventHandlers';\n\n// TODO This is not the right place for this to live\ninitEventHandlers();\n\n/**\n * Insert hints into the DOM for screen readers.\n *\n * @param {Array} annotations The annotations that hints are inserted for\n */\nexport default function renderScreenReaderHints(annotations) {\n  annotations = Array.isArray(annotations) ? annotations : [];\n\n  // Insert hints for each type\n  Object.keys(SORT_TYPES).forEach((type) => {\n    let sortBy = SORT_TYPES[type];\n    annotations\n      .filter((a) => a.type === type)\n      .sort(sortBy)\n      .forEach((a, i) => insertScreenReaderHint(a, i + 1));\n  });\n}\n\n// Sort annotations first by y, then by x.\n// This allows hints to be injected in the order they appear,\n// which makes numbering them easier.\nfunction sortByPoint(a, b) {\n  if (a.y < b.y) {\n    return a.x - b.x;\n  } else {\n    return 1;\n  }\n}\n\n// Sort annotation by it's first rectangle\nfunction sortByRectPoint(a, b) {\n  return sortByPoint(a.rectangles[0], b.rectangles[0]);\n}\n\n// Sort annotation by it's first line\nfunction sortByLinePoint(a, b) {\n  let lineA = a.lines[0];\n  let lineB = b.lines[0];\n  return sortByPoint(\n    {x: lineA[0], y: lineA[1]},\n    {x: lineB[0], y: lineB[1]}\n  );\n}\n\n// Arrange supported types and associated sort methods\nconst SORT_TYPES = {\n  'highlight': sortByRectPoint,\n  'strikeout': sortByRectPoint,\n  'drawing': sortByLinePoint,\n  'textbox': sortByPoint,\n  'point': sortByPoint,\n  'area': sortByPoint\n};\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/renderScreenReaderHints.js\n **/","import createScreenReaderOnly from './createScreenReaderOnly';\nimport insertElementWithinChildren from './insertElementWithinChildren';\nimport insertElementWithinElement from './insertElementWithinElement';\nimport renderScreenReaderComments from './renderScreenReaderComments';\n\n// Annotation types that support comments\nconst COMMENT_TYPES = ['highlight', 'point', 'area'];\n\n/**\n * Insert a hint into the DOM for screen readers for a specific annotation.\n *\n * @param {Object} annotation The annotation to insert a hint for\n * @param {Number} num The number of the annotation out of all annotations of the same type\n */\nexport default function insertScreenReaderHint(annotation, num = 0) {\n  switch (annotation.type) {\n    case 'highlight':\n    case 'strikeout':\n      let rects = annotation.rectangles;\n      let first = rects[0];\n      let last = rects[rects.length - 1];\n\n      insertElementWithinElement(\n        createScreenReaderOnly(`Begin ${annotation.type} annotation ${num}`, annotation.uuid),\n        first.x, first.y, annotation.page, true\n      );\n\n      insertElementWithinElement(\n        createScreenReaderOnly(`End ${annotation.type} annotation ${num}`, `${annotation.uuid}-end`),\n        last.x + last.width, last.y, annotation.page, false\n      );\n      break;\n\n    case 'textbox':\n    case 'point':\n      let text = annotation.type === 'textbox' ? ` (content: ${annotation.content})` : '';\n\n      insertElementWithinChildren(\n        createScreenReaderOnly(`${annotation.type} annotation ${num}${text}`, annotation.uuid),\n        annotation.x, annotation.y, annotation.page\n      );\n      break;\n\n    case 'drawing':\n    case 'area':\n      let x = typeof annotation.x !== 'undefined' ? annotation.x : annotation.lines[0][0];\n      let y = typeof annotation.y !== 'undefined' ? annotation.y : annotation.lines[0][1];\n\n      insertElementWithinChildren(\n        createScreenReaderOnly(`Unlabeled drawing`, annotation.uuid),\n        x, y, annotation.page\n      );\n      break;\n  }\n\n  // Include comments in screen reader hint\n  if (COMMENT_TYPES.includes(annotation.type)) {\n    renderScreenReaderComments(annotation.documentId, annotation.uuid);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/insertScreenReaderHint.js\n **/","/**\n * Create a node that is only visible to screen readers\n *\n * @param {String} content The text content that should be read by screen reader\n * @param {String} [annotationId] The ID of the annotation assocaited\n * @return {Element} An Element that is only visible to screen readers\n */\nexport default function createScreenReaderOnly(content, annotationId) {\n  let node = document.createElement('div');\n  let text = document.createTextNode(content);\n  node.appendChild(text);\n  node.setAttribute('id', `pdf-annotate-screenreader-${annotationId}`);\n  node.style.position = 'absolute';\n  node.style.left = '-10000px';\n  node.style.top = 'auto';\n  node.style.width = '1px';\n  node.style.height = '1px';\n  node.style.overflow = 'hidden';\n  return node;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/createScreenReaderOnly.js\n **/","import insertElementWithinElement from './insertElementWithinElement';\nimport { pointIntersectsRect } from '../UI/utils';\nimport { scaleUp } from '../UI/utils'; \n\n/**\n * Insert an element at a point within the document.\n * This algorithm will try to insert between elements if possible.\n * It will however use `insertElementWithinElement` if it is more accurate.\n *\n * @param {Element} el The element to be inserted\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @param {Number} pageNumber The page number to limit elements to\n * @return {Boolean} True if element was able to be inserted, otherwise false\n */\nexport default function insertElementWithinChildren(el, x, y, pageNumber) {\n  // Try and use most accurate method of inserting within an element\n  if (insertElementWithinElement(el, x, y, pageNumber, true)) {\n    return true;\n  }\n\n  // Fall back to inserting between elements\n  let svg = document.querySelector(`svg[data-pdf-annotate-page=\"${pageNumber}\"]`);\n  let rect = svg.getBoundingClientRect();\n  let nodes = [...svg.parentNode.querySelectorAll('.textLayer > div')];\n\n  y = scaleUp(svg, {y}).y + rect.top;\n  x = scaleUp(svg, {x}).x + rect.left;\n\n  // Find the best node to insert before\n  for (let i=0, l=nodes.length; i<l; i++) {\n    let n = nodes[i];\n    let r = n.getBoundingClientRect();\n    if (y <= r.top) {\n      n.parentNode.insertBefore(el, n);\n      return true;\n    }\n  }\n\n  // If all else fails try to append to the bottom\n  let textLayer = svg.parentNode.querySelector('.textLayer');\n  if (textLayer) {\n    let textRect = textLayer.getBoundingClientRect();\n    if (pointIntersectsRect(x, y, textRect)) {\n      textLayer.appendChild(el);\n      return true;\n    }\n  }\n\n  return false;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/insertElementWithinChildren.js\n **/","import {\n  pointIntersectsRect,\n  scaleUp,\n  scaleDown\n} from '../UI/utils'; \n\n/**\n * Insert an element at a point within the document.\n * This algorithm will only insert within an element amidst it's text content.\n *\n * @param {Element} el The element to be inserted\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @param {Number} pageNumber The page number to limit elements to\n * @param {Boolean} insertBefore Whether the element is to be inserted before or after x\n * @return {Boolean} True if element was able to be inserted, otherwise false\n */\nexport default function insertElementWithinElement(el, x, y, pageNumber, insertBefore) {\n  const OFFSET_ADJUST = 2;\n\n  // If inserting before adjust `x` by looking for element a few px to the right\n  // Otherwise adjust a few px to the left\n  // This is to allow a little tolerance by searching within the box, instead\n  // of getting a false negative by testing right on the border.\n  x = Math.max(x + (OFFSET_ADJUST * (insertBefore ? 1 : -1)), 0);\n\n  let node = textLayerElementFromPoint(x, y + OFFSET_ADJUST, pageNumber);\n  if (!node) {\n    return false;\n  }\n  \n  // Now that node has been found inverse the adjustment for `x`.\n  // This is done to accomodate tolerance by cutting off on the outside of the\n  // text boundary, instead of missing a character by cutting off within.\n  x = x + (OFFSET_ADJUST * (insertBefore ? -1 : 1));\n\n  let svg = document.querySelector(`svg[data-pdf-annotate-page=\"${pageNumber}\"]`);\n  let left = scaleDown(svg, {left: node.getBoundingClientRect().left}).left - svg.getBoundingClientRect().left;\n  let temp = node.cloneNode(true);\n  let head = temp.innerHTML.split('');\n  let tail = [];\n\n  // Insert temp off screen\n  temp.style.position = 'absolute';\n  temp.style.top = '-10000px';\n  temp.style.left = '-10000px';\n  document.body.appendChild(temp);\n\n  while (head.length) {\n    // Don't insert within HTML tags\n    if (head[head.length - 1] === '>') {\n      while(head.length) {\n        tail.unshift(head.pop());\n        if (tail[0] === '<') {\n          break;\n        }\n      }\n    }\n    \n    // Check if width of temp based on current head value satisfies x\n    temp.innerHTML = head.join('');\n    let width = scaleDown(svg, {width: temp.getBoundingClientRect().width}).width;\n    if (left + width <= x) {\n      break;\n    }\n    tail.unshift(head.pop());\n  }\n  \n  // Update original node with new markup, including element to be inserted\n  node.innerHTML = head.join('') + el.outerHTML + tail.join('');\n  temp.parentNode.removeChild(temp);\n\n  return true;\n}\n\n/**\n * Get a text layer element at a given point on a page\n *\n * @param {Number} x The x coordinate of the point\n * @param {Number} y The y coordinate of the point\n * @param {Number} pageNumber The page to limit elements to\n * @return {Element} First text layer element found at the point\n */\nfunction textLayerElementFromPoint(x, y, pageNumber) {\n  let svg = document.querySelector(`svg[data-pdf-annotate-page=\"${pageNumber}\"]`);\n  let rect = svg.getBoundingClientRect();\n  y = scaleUp(svg, {y}).y + rect.top;\n  x = scaleUp(svg, {x}).x + rect.left;\n  return [...svg.parentNode.querySelectorAll('.textLayer [data-canvas-width]')].filter((el) => {\n    return pointIntersectsRect(x, y, el.getBoundingClientRect());\n  })[0];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/insertElementWithinElement.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport insertScreenReaderComment from './insertScreenReaderComment';\n\n/**\n * Insert the comments into the DOM to be available by screen reader\n *\n * Example output:\n *   <div class=\"screenReaderOnly\">\n *    <div>Begin highlight 1</div>\n *    <ol aria-label=\"Comments\">\n *      <li>Foo</li>\n *      <li>Bar</li>\n *      <li>Baz</li>\n *      <li>Qux</li>\n *    </ol>\n *  </div>\n *  <div>Some highlighted text goes here...</div>\n *  <div class=\"screenReaderOnly\">End highlight 1</div>\n *\n * NOTE: `screenReaderOnly` is not a real class, just used for brevity\n *\n * @param {String} documentId The ID of the document\n * @param {String} annotationId The ID of the annotation\n * @param {Array} [comments] Optionally preloaded comments to be rendered\n * @return {Promise}\n */\nexport default function renderScreenReaderComments(documentId, annotationId, comments) {\n  let promise;\n\n  if (Array.isArray(comments)) {\n    promise = Promise.resolve(comments);\n  } else {\n    promise = PDFJSAnnotate.getStoreAdapter().getComments(documentId, annotationId);\n  }\n\n  return promise.then((comments) => {\n    // Node needs to be found by querying DOM as it may have been inserted as innerHTML\n    // leaving `screenReaderNode` as an invalid reference (see `insertElementWithinElement`).\n    let node = document.getElementById(`pdf-annotate-screenreader-${annotationId}`);\n    if (node) { \n      let list = document.createElement('ol');\n      list.setAttribute('id', `pdf-annotate-screenreader-comment-list-${annotationId}`);\n      list.setAttribute('aria-label', 'Comments');\n      node.appendChild(list);\n      comments.forEach(insertScreenReaderComment);\n    }\n  });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/renderScreenReaderComments.js\n **/","/**\n * Insert a comment into the DOM to be available by screen reader\n *\n * @param {Object} comment The comment to be inserted\n */\nexport default function insertScreenReaderComment(comment) {\n  if (!comment) {\n    return;\n  }\n\n  let list = document.querySelector(`#pdf-annotate-screenreader-${comment.annotation} ol`);\n  if (list) {\n    let item = document.createElement('li');\n    item.setAttribute('id', `pdf-annotate-screenreader-comment-${comment.uuid}`);\n    item.appendChild(document.createTextNode(`${comment.content}`));\n    list.appendChild(item);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/insertScreenReaderComment.js\n **/","import insertScreenReaderHint from './insertScreenReaderHint';\nimport renderScreenReaderHints from './renderScreenReaderHints';\nimport insertScreenReaderComment from './insertScreenReaderComment';\nimport renderScreenReaderComments from './renderScreenReaderComments';\nimport { addEventListener } from '../UI/event';\nimport PDFJSAnnotate from '../PDFJSAnnotate';\n\n/**\n * Initialize the event handlers for keeping screen reader hints synced with data\n */\nexport default function initEventHandlers() {\n  addEventListener('annotation:add', (documentId, pageNumber, annotation) => {\n    reorderAnnotationsByType(documentId, pageNumber, annotation.type);\n  });\n  addEventListener('annotation:edit', (documentId, annotationId, annotation) => {\n    reorderAnnotationsByType(documentId, annotation.page, annotation.type);\n  });\n  addEventListener('annotation:delete', removeAnnotation);\n  addEventListener('comment:add', insertComment);\n  addEventListener('comment:update', updateComment);\n  addEventListener('comment:delete', removeComment);\n}\n\n/**\n * Reorder the annotation numbers by annotation type\n *\n * @param {String} documentId The ID of the document\n * @param {Number} pageNumber The page number of the annotations\n * @param {Strig} type The annotation type\n */\nfunction reorderAnnotationsByType(documentId, pageNumber, type) {\n  PDFJSAnnotate.getStoreAdapter().getAnnotations(documentId)\n    .then((annotationsByPage) => {\n      let annotations = [];\n      for(const page of Object.keys(annotationsByPage))\n        for(const annotation in annotationsByPage[page]){\n          if(annotation.type == type)\n            annotations.push(annotation)\n        }\n        return annotations;\n      //   annotationsByPage(page) =\n      //       return annotationsByPage[page].filter((a) => {\n      //         return a.type === type;\n      //       });\n      // return annotationsByPage;\n    })\n    .then((annotations) => {\n      annotations.forEach((a) => {\n        removeAnnotation(documentId, a.uuid);\n      });\n\n      return annotations;\n    })\n    .then(renderScreenReaderHints);\n}\n\n/**\n * Remove the screen reader hint for an annotation\n *\n * @param {String} documentId The ID of the document\n * @param {String} annotationId The Id of the annotation\n */\nfunction removeAnnotation(documentId, annotationId) {\n  removeElementById(`pdf-annotate-screenreader-${annotationId}`);\n  removeElementById(`pdf-annotate-screenreader-${annotationId}-end`);\n}\n\n/**\n * Insert a screen reader hint for a comment\n *\n * @param {String} documentId The ID of the document\n * @param {String} annotationId The ID of tha assocated annotation\n * @param {Object} comment The comment to insert a hint for\n */\nfunction insertComment(documentId, annotationId, comment) {\n  let list = document.querySelector(`pdf-annotate-screenreader-comment-list-${annotationId}`);\n  let promise;\n\n  if (!list) {\n    promise = renderScreenReaderComments(documentId, annotationId, []).then(() => {\n      list = document.querySelector(`pdf-annotate-screenreader-comment-list-${annotationId}`);\n      return true;\n    });\n  } else {\n    promise = Promise.resolve(true);\n  }\n\n  promise.then(() => {\n    insertScreenReaderComment(comment);\n  });\n}\n\n\n/**\n * Update a comment content\n *\n * @param {String} documentId The ID of the document\n * @param {String} annotationId The ID of tha assocated annotation\n * @param {Object} comment The comment to insert a hint for\n */\nfunction updateComment(documentId, annotationId, comment) {\n  alert('updateComment')\n}\n\n/**\n * Remove a screen reader hint for a comment\n *\n * @param {String} documentId The ID of the document\n * @param {String} commentId The ID of the comment\n */\nfunction removeComment(documentId, commentId) {\n  removeElementById(`pdf-annotate-screenreader-comment-${commentId}`);\n}\n\n/**\n * Remove an element from the DOM by it's ID if it exists\n *\n * @param {String} elementID The ID of the element to be removed\n */\nfunction removeElementById(elementId) {\n  let el = document.getElementById(elementId);\n  if (el) {\n    el.parentNode.removeChild(el);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/a11y/initEventHandlers.js\n **/","import PDFJSAnnotate from '../PDFJSAnnotate';\nimport appendChild from './appendChild';\nimport renderScreenReaderHints from '../a11y/renderScreenReaderHints';\n\n/**\n * Render the response from PDFJSAnnotate.getStoreAdapter().getAnnotations to SVG\n *\n * @param {SVGElement} svg The SVG element to render the annotations to\n * @param {Object} viewport The page viewport data\n * @param {Object} data The response from PDFJSAnnotate.getStoreAdapter().getAnnotations\n * @return {Promise} Settled once rendering has completed\n *  A settled Promise will be either:\n *    - fulfilled: SVGElement\n *    - rejected: Error\n */\nexport default function render(svg, viewport, data) {\n  return new Promise((resolve, reject) => {\n    // Reset the content of the SVG\n    svg.innerHTML = ''; \n    svg.setAttribute('data-pdf-annotate-container', true);\n    svg.setAttribute('data-pdf-annotate-viewport', JSON.stringify(viewport));\n    svg.removeAttribute('data-pdf-annotate-document');\n    svg.removeAttribute('data-pdf-annotate-page');\n\n    // If there's no data nothing can be done\n    if (!data) {\n      return resolve(svg);\n    }\n\n    svg.setAttribute('data-pdf-annotate-document', data.documentId);\n    svg.setAttribute('data-pdf-annotate-page', data.pageNumber);\n  \n    // Make sure annotations is an array\n    if (!Array.isArray(data.annotations) || data.annotations.length === 0) {\n      return resolve(svg);\n    }\n\n    // Append annotation to svg\n    data.annotations.forEach((a) => {\n      appendChild(svg, a, viewport);\n    });\n\n    resolve(svg);\n  });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/render/index.js\n **/","// Color picker component\nconst COLORS = [\n  {hex: '#000000', name: 'Black'},\n  {hex: '#EF4437', name: 'Red'},\n  {hex: '#E71F63', name: 'Pink'},\n  {hex: '#8F3E97', name: 'Purple'},\n  {hex: '#65499D', name: 'Deep Purple'},\n  {hex: '#4554A4', name: 'Indigo'},\n  {hex: '#2083C5', name: 'Blue'},\n  {hex: '#35A4DC', name: 'Light Blue'},\n  {hex: '#09BCD3', name: 'Cyan'},\n  {hex: '#009688', name: 'Teal'},\n  {hex: '#43A047', name: 'Green'},\n  {hex: '#8BC34A', name: 'Light Green'},\n  {hex: '#FDC010', name: 'Yellow'},\n  {hex: '#F8971C', name: 'Orange'},\n  {hex: '#F0592B', name: 'Deep Orange'},\n  {hex: '#F06291', name: 'Light Pink'}\n];\n\nexport default function initColorPicker(el, value, onChange) {\n  function setColor(value, fireOnChange = true) {\n    currentValue = value;\n    a.setAttribute('data-color', value);\n    a.style.background = value;\n    if (fireOnChange && typeof onChange === 'function') {\n      onChange(value);\n    }\n    closePicker();\n  }\n\n  function togglePicker() {\n    if (isPickerOpen) {\n      closePicker();\n    } else {\n      openPicker();\n    }\n  }\n\n  function closePicker() {\n    document.removeEventListener('keyup', handleDocumentKeyup);\n    if (picker && picker.parentNode) {\n      picker.parentNode.removeChild(picker);\n    }\n    isPickerOpen = false;\n    a.focus();\n  }\n\n  function openPicker() {\n    if (!picker) {\n      picker = document.createElement('div');\n      picker.style.background = '#fff';\n      picker.style.border = '1px solid #ccc';\n      picker.style.padding = '2px';\n      picker.style.position = 'absolute';\n      picker.style.width = '122px';\n      el.style.position = 'relative';\n\n      COLORS.map(createColorOption).forEach((c) => {\n        c.style.margin = '2px';\n        c.onclick = function () { setColor(c.getAttribute('data-color')); };\n        picker.appendChild(c);\n      });\n    }\n\n    document.addEventListener('keyup', handleDocumentKeyup);\n    el.appendChild(picker);\n    isPickerOpen = true;\n  }\n\n  function createColorOption(color) {\n    let e = document.createElement('a');\n    e.className = 'color';\n    e.setAttribute('href', 'javascript://');\n\n    if(color.name)\n      e.setAttribute('title', color.name);\n    else\n      e.setAttribute('title', 'Choisir une couleur');\n\n    e.setAttribute('data-color', color.hex);\n    e.style.background = color.hex;\n    return e;\n  }\n\n  function handleDocumentKeyup(e) {\n    if (e.keyCode === 27) {\n      closePicker();\n    }\n  }\n\n  let picker;\n  let isPickerOpen = false;\n  let currentValue;\n  let a = createColorOption({hex: value});\n  a.onclick = togglePicker;\n  el.appendChild(a);\n  setColor(value, false);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/initColorPicker.js\n **/"],"sourceRoot":""}
\ No newline at end of file