Plugin Directory

Changeset 2046151


Ignore:
Timestamp:
03/07/2019 05:19:53 PM (7 years ago)
Author:
dwayneparton
Message:

Code clean up and allows core/columns to be converted to grid.

Location:
gecko-grid-layout/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • gecko-grid-layout/trunk/dist/editor-styles.css

    r2045438 r2046151  
    238238  background-color: #f0f0f0;
    239239}
    240 
    241 /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZWRpdG9yLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLG1CQUFlO01BQWYsZUFBZTtBQUNqQjtBQUNBO0VBQ0Usa0JBQWtCO0VBQ2xCLGtCQUFrQjtFQUNsQixvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLDRCQUFzQjtFQUF0Qiw2QkFBc0I7TUFBdEIsMEJBQXNCO1VBQXRCLHNCQUFzQjtFQUN0QixrQkFBa0I7RUFDbEIsd0JBQXVCO01BQXZCLHFCQUF1QjtVQUF2Qix1QkFBdUI7RUFDdkIseUJBQW1CO01BQW5CLHNCQUFtQjtVQUFuQixtQkFBbUI7RUFDbkIsZUFBZTtFQUNmLDZCQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsbUJBQVk7TUFBWixvQkFBWTtVQUFaLFlBQVk7RUFDWix5QkFBeUI7RUFDekIsZUFBZTtBQUNqQjtBQUNBO0VBQ0UseUJBQXlCO0FBQzNCO0FBQ0E7RUFDRSx5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsK0NBQStDO0VBQy9DLGtEQUFrRDtFQUNsRCw2RUFBNkU7QUFDL0U7QUFDQTtFQUNFLG9CQUFhO0VBQWIsb0JBQWE7RUFBYixhQUFhO0FBQ2Y7QUFDQTtFQUNFLFdBQVc7QUFDYjtBQUNBO0VBQ0UsWUFBWTtBQUNkO0FBQ0E7RUFDRSxZQUFZO0FBQ2Q7QUFDQTtFQUNFLFlBQVk7QUFDZDtBQUNBO0VBQ0UsWUFBWTtBQUNkO0FBQ0E7RUFDRSxZQUFZO0VBQ1oseUJBQXlCO0VBQ3pCLGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0UsY0FBYztFQUNkLFdBQVc7RUFDWCxXQUFXO0VBQ1gsdUJBQXVCO0VBQ3ZCLGtCQUFrQjtFQUNsQixvQkFBb0I7QUFDdEI7QUFDQTtFQUNFLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLFVBQVU7RUFDVixZQUFZO0VBQ1osdUJBQXVCO0VBQ3ZCLGtCQUFrQjtFQUNsQixxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLFdBQVc7RUFDWCxZQUFZO0VBQ1osc0JBQXNCO0VBQ3RCLGtCQUFrQjtFQUNsQixvQkFBb0I7RUFDcEIscUJBQXFCO0FBQ3ZCO0FBQ0E7RUFDRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsYUFBYTtFQUNiLG1EQUFtRDtFQUNuRCxjQUFjO0VBQ2Qsa0NBQWtDO0VBQ2xDLHFCQUFxQjtFQUNyQiw0QkFBNEI7RUFDNUIsU0FBUztBQUNYO0FBQ0E7OztFQUdFLHlCQUF5QjtFQUN6QiwwQkFBMEI7RUFDMUIsdUJBQXVCO0VBQ3ZCLG9CQUFvQjtFQUNwQixZQUFZO0VBQ1osc0JBQXNCO0VBQ3RCLHlCQUF5QjtFQUN6QixvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLDRCQUFzQjtFQUF0Qiw2QkFBc0I7TUFBdEIsMEJBQXNCO1VBQXRCLHNCQUFzQjtFQUN0QixtQkFBTztNQUFQLFdBQU87VUFBUCxPQUFPO0VBQ1AsNkJBQWdCO01BQWhCLGdCQUFnQjtFQUNoQixjQUFjO0VBQ2QsaUJBQWlCO0VBQ2pCLFlBQVk7RUFDWixzQkFBc0I7RUFDdEIsMkJBQTJCO0VBQzNCLGlDQUFpQztFQUNqQyx3Q0FBd0M7RUFDeEMsNEJBQTRCO0FBQzlCO0FBQ0E7RUFDRSw2QkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLG9CQUFhO0VBQWIsb0JBQWE7RUFBYixhQUFhO0VBQ2IsNEJBQXNCO0VBQXRCLDZCQUFzQjtNQUF0QiwwQkFBc0I7VUFBdEIsc0JBQXNCO0VBQ3RCLG1CQUFPO01BQVAsV0FBTztVQUFQLE9BQU87QUFDVDtBQUNBO0VBQ0UsNkJBQWdCO01BQWhCLGdCQUFnQjtFQUNoQixZQUFZO0FBQ2Q7QUFDQTtFQUNFLGNBQWM7RUFDZCxrQkFBa0I7RUFDbEIsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixlQUFlO0VBQ2YseUJBQXlCO0FBQzNCO0FBQ0E7RUFDRSx5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRSx3QkFBd0I7QUFDMUI7O0FBRUE7OztFQUdFLG9CQUFhO0VBQWIsb0JBQWE7RUFBYixhQUFhO0VBQ2IsNEJBQXNCO0VBQXRCLDZCQUFzQjtNQUF0QiwwQkFBc0I7VUFBdEIsc0JBQXNCO0VBQ3RCLFlBQVk7RUFDWixXQUFXO0VBQ1gsU0FBUztBQUNYOztBQUVBO0VBQ0UscUJBQXFCO0FBQ3ZCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHFEQUFxRDtFQUNyRCxjQUFjO0VBQ2Qsb0JBQW9CO0VBQ3BCLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLHVCQUF1QjtFQUN2QixvQkFBb0I7RUFDcEIsYUFBYTtFQUNiLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIseUJBQXlCO0VBQ3pCLGVBQWU7RUFDZixrQkFBa0I7QUFDcEI7QUFDQTtFQUNFLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQix5QkFBeUI7RUFDekIsWUFBWTtFQUNaLGFBQWE7RUFDYixxREFBcUQ7RUFDckQsYUFBYTtFQUNiLGtDQUFrQztFQUNsQyxxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLGNBQWM7RUFDZCx1QkFBdUI7RUFDdkIsb0JBQW9CO0VBQ3BCLHlCQUF5QjtBQUMzQixDIiwiZmlsZSI6ImVkaXRvci1zdHlsZXMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0X19pdGVtIHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgZmxleC1iYXNpczogOTBweDtcbiAgZmxleC1ncm93OiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtdHlwZS1zZWxlY3RfX2l0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkFGQUZBO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0X19pdGVtLS1zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7XG59XG5cbi5nZWNrby10cmJsIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiByZXBlYXQoMywgbWlubWF4KDFweCwgMWZyKSk7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIG1pbm1heCgxcHgsIDFmcikpO1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcInRsIHRsIHQgdCB0IHRyIHRyXCIgXCJsIGwgbCBjIHIgciByIFwiIFwiYmwgYmwgYiBiIGIgYnIgYnJcIjtcbn1cbi5nZWNrby10cmJsX19pbnB1dCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uZ2Vja28tdHJibF9faW5wdXQgaW5wdXQge1xuICB3aWR0aDogMTAwJTtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tdCB7XG4gIGdyaWQtYXJlYTogdDtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tciB7XG4gIGdyaWQtYXJlYTogcjtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tYiB7XG4gIGdyaWQtYXJlYTogYjtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tbCB7XG4gIGdyaWQtYXJlYTogbDtcbn1cbi5nZWNrby10cmJsX19sb2NrIHtcbiAgZ3JpZC1hcmVhOiBjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBkaW1ncmF5O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uZ2Vja28tdHJibF9fbG9ja19feCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYyg1MCUgLSAxcHgpO1xufVxuLmdlY2tvLXRyYmxfX2xvY2tfX3gudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbi5nZWNrby10cmJsX19sb2NrX195IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAycHg7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogY2FsYyg1MCUgLSAxcHgpO1xufVxuLmdlY2tvLXRyYmxfX2xvY2tfX3kudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbi5nZWNrby10cmJsX19sb2NrX194eSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDVweCk7XG59XG4uZ2Vja28tdHJibF9fbG9ja19feHkudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cblxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciA+IC5lZGl0b3ItaW5uZXItYmxvY2tzID4gLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXQge1xuICBwYWRkaW5nOiAxcmVtO1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxMiwgbWlubWF4KDFweCwgMWZyKSk7XG4gIGdyaWQtZ2FwOiAxcmVtO1xuICBncmlkLWF1dG8tcm93czogbWlubWF4KDUwcHgsIGF1dG8pO1xuICBncmlkLWF1dG8tZmxvdzogZGVuc2U7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7XG4gIG1hcmdpbjogMDtcbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWl0ZW1cIl0sXG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCA+IFtkYXRhLXR5cGU9XCJnZWNrby9ncmlkLWxheW91dC1iYXNpY1wiXSxcbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWltYWdlXCJdIHtcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiAxO1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgbWluLXdpZHRoOiAwO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAxO1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICBwYWRkaW5nLXRvcDogMDtcbiAgcGFkZGluZy1ib3R0b206IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCAuZWRpdG9yLWJsb2NrLWxpc3RfX2Jsb2NrLWVkaXQge1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAxO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciA+IC5lZGl0b3ItaW5uZXItYmxvY2tzID4gLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXQgLmVkaXRvci1ibG9jay1saXN0X19ibG9jay1lZGl0ID4gW2RhdGEtYmxvY2tdIHtcbiAgZmxleC1iYXNpczogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciAuYmxvY2stbGlzdC1hcHBlbmRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGdyaWQtY29sdW1uOiAxLy0xO1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciAuYmxvY2stbGlzdC1hcHBlbmRlcjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2YzZjM7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uZ2Vja28tZ3JpZC1sYXlvdXQtYmFzaWMsXG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UsXG4uZ2Vja28tZ3JpZC1sYXlvdXQtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbn1cblxuLmlzLWRyYWdnaW5nLWNvbXBvbmVudHMtZHJhZ2dhYmxlIC5nZWNrby1ncmlkLWxheW91dC1pbWFnZS5pcy1zdHlsZS1ob3ZlciAuZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb24ge1xuICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RfX3RlbXBsYXRlcyB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDEyLCBtaW5tYXgoMTVweCwgYXV0bykpO1xuICBncmlkLWdhcDogMXJlbTtcbiAgZ3JpZC1hdXRvLXJvd3M6IGF1dG87XG4gIGdyaWQtYXV0by1mbG93OiBkZW5zZTtcbn1cbi5nZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RfX3RlbXBsYXRlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgcGFkZGluZzogMXJlbTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEMEQwRDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuLmdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGU6aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwO1xufVxuXG4uZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtcHJldmlldyB7XG4gIG1pbi1oZWlnaHQ6IDEwMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDBEMEQwO1xuICBwYWRkaW5nOiAzcHg7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDEyLCBtaW5tYXgoMTVweCwgYXV0bykpO1xuICBncmlkLWdhcDogM3B4O1xuICBncmlkLWF1dG8tcm93czogbWlubWF4KDE1cHgsIGF1dG8pO1xuICBncmlkLWF1dG8tZmxvdzogZGVuc2U7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtcHJldmlld19faXRlbSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gNDtcbiAgZ3JpZC1yb3ctZW5kOiBzcGFuIDE7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==*/
  • gecko-grid-layout/trunk/dist/editor.bundle.js

    r2046091 r2046151  
    1 /******/ (function(modules) { // webpackBootstrap
    2 /******/    // The module cache
    3 /******/    var installedModules = {};
    4 /******/
    5 /******/    // The require function
    6 /******/    function __webpack_require__(moduleId) {
    7 /******/
    8 /******/        // Check if module is in cache
    9 /******/        if(installedModules[moduleId]) {
    10 /******/            return installedModules[moduleId].exports;
    11 /******/        }
    12 /******/        // Create a new module (and put it into the cache)
    13 /******/        var module = installedModules[moduleId] = {
    14 /******/            i: moduleId,
    15 /******/            l: false,
    16 /******/            exports: {}
    17 /******/        };
    18 /******/
    19 /******/        // Execute the module function
    20 /******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
    21 /******/
    22 /******/        // Flag the module as loaded
    23 /******/        module.l = true;
    24 /******/
    25 /******/        // Return the exports of the module
    26 /******/        return module.exports;
    27 /******/    }
    28 /******/
    29 /******/
    30 /******/    // expose the modules object (__webpack_modules__)
    31 /******/    __webpack_require__.m = modules;
    32 /******/
    33 /******/    // expose the module cache
    34 /******/    __webpack_require__.c = installedModules;
    35 /******/
    36 /******/    // define getter function for harmony exports
    37 /******/    __webpack_require__.d = function(exports, name, getter) {
    38 /******/        if(!__webpack_require__.o(exports, name)) {
    39 /******/            Object.defineProperty(exports, name, { enumerable: true, get: getter });
    40 /******/        }
    41 /******/    };
    42 /******/
    43 /******/    // define __esModule on exports
    44 /******/    __webpack_require__.r = function(exports) {
    45 /******/        if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
    46 /******/            Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
    47 /******/        }
    48 /******/        Object.defineProperty(exports, '__esModule', { value: true });
    49 /******/    };
    50 /******/
    51 /******/    // create a fake namespace object
    52 /******/    // mode & 1: value is a module id, require it
    53 /******/    // mode & 2: merge all properties of value into the ns
    54 /******/    // mode & 4: return value when already ns object
    55 /******/    // mode & 8|1: behave like require
    56 /******/    __webpack_require__.t = function(value, mode) {
    57 /******/        if(mode & 1) value = __webpack_require__(value);
    58 /******/        if(mode & 8) return value;
    59 /******/        if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
    60 /******/        var ns = Object.create(null);
    61 /******/        __webpack_require__.r(ns);
    62 /******/        Object.defineProperty(ns, 'default', { enumerable: true, value: value });
    63 /******/        if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
    64 /******/        return ns;
    65 /******/    };
    66 /******/
    67 /******/    // getDefaultExport function for compatibility with non-harmony modules
    68 /******/    __webpack_require__.n = function(module) {
    69 /******/        var getter = module && module.__esModule ?
    70 /******/            function getDefault() { return module['default']; } :
    71 /******/            function getModuleExports() { return module; };
    72 /******/        __webpack_require__.d(getter, 'a', getter);
    73 /******/        return getter;
    74 /******/    };
    75 /******/
    76 /******/    // Object.prototype.hasOwnProperty.call
    77 /******/    __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
    78 /******/
    79 /******/    // __webpack_public_path__
    80 /******/    __webpack_require__.p = "/wp-content/plugins/gecko-grid-layout/dist/";
    81 /******/
    82 /******/
    83 /******/    // Load entry module and return exports
    84 /******/    return __webpack_require__(__webpack_require__.s = "./src/index.js");
    85 /******/ })
    86 /************************************************************************/
    87 /******/ ({
    88 
    89 /***/ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js":
    90 /*!**********************************************************************!*\
    91   !*** ./node_modules/@babel/runtime/helpers/assertThisInitialized.js ***!
    92   \**********************************************************************/
    93 /*! no static exports found */
    94 /***/ (function(module, exports) {
    95 
    96 function _assertThisInitialized(self) {
    97   if (self === void 0) {
    98     throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
    99   }
    100 
    101   return self;
    102 }
    103 
    104 module.exports = _assertThisInitialized;
    105 
    106 /***/ }),
    107 
    108 /***/ "./node_modules/@babel/runtime/helpers/classCallCheck.js":
    109 /*!***************************************************************!*\
    110   !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***!
    111   \***************************************************************/
    112 /*! no static exports found */
    113 /***/ (function(module, exports) {
    114 
    115 function _classCallCheck(instance, Constructor) {
    116   if (!(instance instanceof Constructor)) {
    117     throw new TypeError("Cannot call a class as a function");
    118   }
    119 }
    120 
    121 module.exports = _classCallCheck;
    122 
    123 /***/ }),
    124 
    125 /***/ "./node_modules/@babel/runtime/helpers/createClass.js":
    126 /*!************************************************************!*\
    127   !*** ./node_modules/@babel/runtime/helpers/createClass.js ***!
    128   \************************************************************/
    129 /*! no static exports found */
    130 /***/ (function(module, exports) {
    131 
    132 function _defineProperties(target, props) {
    133   for (var i = 0; i < props.length; i++) {
    134     var descriptor = props[i];
    135     descriptor.enumerable = descriptor.enumerable || false;
    136     descriptor.configurable = true;
    137     if ("value" in descriptor) descriptor.writable = true;
    138     Object.defineProperty(target, descriptor.key, descriptor);
    139   }
    140 }
    141 
    142 function _createClass(Constructor, protoProps, staticProps) {
    143   if (protoProps) _defineProperties(Constructor.prototype, protoProps);
    144   if (staticProps) _defineProperties(Constructor, staticProps);
    145   return Constructor;
    146 }
    147 
    148 module.exports = _createClass;
    149 
    150 /***/ }),
    151 
    152 /***/ "./node_modules/@babel/runtime/helpers/defineProperty.js":
    153 /*!***************************************************************!*\
    154   !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***!
    155   \***************************************************************/
    156 /*! no static exports found */
    157 /***/ (function(module, exports) {
    158 
    159 function _defineProperty(obj, key, value) {
    160   if (key in obj) {
    161     Object.defineProperty(obj, key, {
    162       value: value,
    163       enumerable: true,
    164       configurable: true,
    165       writable: true
    166     });
    167   } else {
    168     obj[key] = value;
    169   }
    170 
    171   return obj;
    172 }
    173 
    174 module.exports = _defineProperty;
    175 
    176 /***/ }),
    177 
    178 /***/ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js":
    179 /*!***************************************************************!*\
    180   !*** ./node_modules/@babel/runtime/helpers/getPrototypeOf.js ***!
    181   \***************************************************************/
    182 /*! no static exports found */
    183 /***/ (function(module, exports) {
    184 
    185 function _getPrototypeOf(o) {
    186   module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
    187     return o.__proto__ || Object.getPrototypeOf(o);
    188   };
    189   return _getPrototypeOf(o);
    190 }
    191 
    192 module.exports = _getPrototypeOf;
    193 
    194 /***/ }),
    195 
    196 /***/ "./node_modules/@babel/runtime/helpers/inherits.js":
    197 /*!*********************************************************!*\
    198   !*** ./node_modules/@babel/runtime/helpers/inherits.js ***!
    199   \*********************************************************/
    200 /*! no static exports found */
    201 /***/ (function(module, exports, __webpack_require__) {
    202 
    203 var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js");
    204 
    205 function _inherits(subClass, superClass) {
    206   if (typeof superClass !== "function" && superClass !== null) {
    207     throw new TypeError("Super expression must either be null or a function");
    208   }
    209 
    210   subClass.prototype = Object.create(superClass && superClass.prototype, {
    211     constructor: {
    212       value: subClass,
    213       writable: true,
    214       configurable: true
    215     }
    216   });
    217   if (superClass) setPrototypeOf(subClass, superClass);
    218 }
    219 
    220 module.exports = _inherits;
    221 
    222 /***/ }),
    223 
    224 /***/ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js":
    225 /*!**************************************************************************!*\
    226   !*** ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***!
    227   \**************************************************************************/
    228 /*! no static exports found */
    229 /***/ (function(module, exports, __webpack_require__) {
    230 
    231 var _typeof = __webpack_require__(/*! ../helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");
    232 
    233 var assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js");
    234 
    235 function _possibleConstructorReturn(self, call) {
    236   if (call && (_typeof(call) === "object" || typeof call === "function")) {
    237     return call;
    238   }
    239 
    240   return assertThisInitialized(self);
    241 }
    242 
    243 module.exports = _possibleConstructorReturn;
    244 
    245 /***/ }),
    246 
    247 /***/ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js":
    248 /*!***************************************************************!*\
    249   !*** ./node_modules/@babel/runtime/helpers/setPrototypeOf.js ***!
    250   \***************************************************************/
    251 /*! no static exports found */
    252 /***/ (function(module, exports) {
    253 
    254 function _setPrototypeOf(o, p) {
    255   module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
    256     o.__proto__ = p;
    257     return o;
    258   };
    259 
    260   return _setPrototypeOf(o, p);
    261 }
    262 
    263 module.exports = _setPrototypeOf;
    264 
    265 /***/ }),
    266 
    267 /***/ "./node_modules/@babel/runtime/helpers/typeof.js":
    268 /*!*******************************************************!*\
    269   !*** ./node_modules/@babel/runtime/helpers/typeof.js ***!
    270   \*******************************************************/
    271 /*! no static exports found */
    272 /***/ (function(module, exports) {
    273 
    274 function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }
    275 
    276 function _typeof(obj) {
    277   if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") {
    278     module.exports = _typeof = function _typeof(obj) {
    279       return _typeof2(obj);
    280     };
    281   } else {
    282     module.exports = _typeof = function _typeof(obj) {
    283       return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj);
    284     };
    285   }
    286 
    287   return _typeof(obj);
    288 }
    289 
    290 module.exports = _typeof;
    291 
    292 /***/ }),
    293 
    294 /***/ "./node_modules/tinycolor2/tinycolor.js":
    295 /*!**********************************************!*\
    296   !*** ./node_modules/tinycolor2/tinycolor.js ***!
    297   \**********************************************/
    298 /*! no static exports found */
    299 /***/ (function(module, exports, __webpack_require__) {
    300 
    301 var __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.1
    302 // https://github.com/bgrins/TinyColor
    303 // Brian Grinstead, MIT License
    304 
    305 (function(Math) {
    306 
    307 var trimLeft = /^\s+/,
    308     trimRight = /\s+$/,
    309     tinyCounter = 0,
    310     mathRound = Math.round,
    311     mathMin = Math.min,
    312     mathMax = Math.max,
    313     mathRandom = Math.random;
    314 
    315 function tinycolor (color, opts) {
    316 
    317     color = (color) ? color : '';
    318     opts = opts || { };
    319 
    320     // If input is already a tinycolor, return itself
    321     if (color instanceof tinycolor) {
    322        return color;
    323     }
    324     // If we are called as a function, call using new instead
    325     if (!(this instanceof tinycolor)) {
    326         return new tinycolor(color, opts);
    327     }
    328 
    329     var rgb = inputToRGB(color);
    330     this._originalInput = color,
    331     this._r = rgb.r,
    332     this._g = rgb.g,
    333     this._b = rgb.b,
    334     this._a = rgb.a,
    335     this._roundA = mathRound(100*this._a) / 100,
    336     this._format = opts.format || rgb.format;
    337     this._gradientType = opts.gradientType;
    338 
    339     // Don't let the range of [0,255] come back in [0,1].
    340     // Potentially lose a little bit of precision here, but will fix issues where
    341     // .5 gets interpreted as half of the total, instead of half of 1
    342     // If it was supposed to be 128, this was already taken care of by `inputToRgb`
    343     if (this._r < 1) { this._r = mathRound(this._r); }
    344     if (this._g < 1) { this._g = mathRound(this._g); }
    345     if (this._b < 1) { this._b = mathRound(this._b); }
    346 
    347     this._ok = rgb.ok;
    348     this._tc_id = tinyCounter++;
    349 }
    350 
    351 tinycolor.prototype = {
    352     isDark: function() {
    353         return this.getBrightness() < 128;
    354     },
    355     isLight: function() {
    356         return !this.isDark();
    357     },
    358     isValid: function() {
    359         return this._ok;
    360     },
    361     getOriginalInput: function() {
    362       return this._originalInput;
    363     },
    364     getFormat: function() {
    365         return this._format;
    366     },
    367     getAlpha: function() {
    368         return this._a;
    369     },
    370     getBrightness: function() {
    371         //http://www.w3.org/TR/AERT#color-contrast
    372         var rgb = this.toRgb();
    373         return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;
    374     },
    375     getLuminance: function() {
    376         //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
    377         var rgb = this.toRgb();
    378         var RsRGB, GsRGB, BsRGB, R, G, B;
    379         RsRGB = rgb.r/255;
    380         GsRGB = rgb.g/255;
    381         BsRGB = rgb.b/255;
    382 
    383         if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}
    384         if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}
    385         if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}
    386         return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);
    387     },
    388     setAlpha: function(value) {
    389         this._a = boundAlpha(value);
    390         this._roundA = mathRound(100*this._a) / 100;
    391         return this;
    392     },
    393     toHsv: function() {
    394         var hsv = rgbToHsv(this._r, this._g, this._b);
    395         return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };
    396     },
    397     toHsvString: function() {
    398         var hsv = rgbToHsv(this._r, this._g, this._b);
    399         var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
    400         return (this._a == 1) ?
    401           "hsv("  + h + ", " + s + "%, " + v + "%)" :
    402           "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")";
    403     },
    404     toHsl: function() {
    405         var hsl = rgbToHsl(this._r, this._g, this._b);
    406         return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };
    407     },
    408     toHslString: function() {
    409         var hsl = rgbToHsl(this._r, this._g, this._b);
    410         var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
    411         return (this._a == 1) ?
    412           "hsl("  + h + ", " + s + "%, " + l + "%)" :
    413           "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")";
    414     },
    415     toHex: function(allow3Char) {
    416         return rgbToHex(this._r, this._g, this._b, allow3Char);
    417     },
    418     toHexString: function(allow3Char) {
    419         return '#' + this.toHex(allow3Char);
    420     },
    421     toHex8: function(allow4Char) {
    422         return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);
    423     },
    424     toHex8String: function(allow4Char) {
    425         return '#' + this.toHex8(allow4Char);
    426     },
    427     toRgb: function() {
    428         return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };
    429     },
    430     toRgbString: function() {
    431         return (this._a == 1) ?
    432           "rgb("  + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" :
    433           "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")";
    434     },
    435     toPercentageRgb: function() {
    436         return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a };
    437     },
    438     toPercentageRgbString: function() {
    439         return (this._a == 1) ?
    440           "rgb("  + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" :
    441           "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")";
    442     },
    443     toName: function() {
    444         if (this._a === 0) {
    445             return "transparent";
    446         }
    447 
    448         if (this._a < 1) {
    449             return false;
    450         }
    451 
    452         return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;
    453     },
    454     toFilter: function(secondColor) {
    455         var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);
    456         var secondHex8String = hex8String;
    457         var gradientType = this._gradientType ? "GradientType = 1, " : "";
    458 
    459         if (secondColor) {
    460             var s = tinycolor(secondColor);
    461             secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);
    462         }
    463 
    464         return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")";
    465     },
    466     toString: function(format) {
    467         var formatSet = !!format;
    468         format = format || this._format;
    469 
    470         var formattedString = false;
    471         var hasAlpha = this._a < 1 && this._a >= 0;
    472         var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name");
    473 
    474         if (needsAlphaFormat) {
    475             // Special case for "transparent", all other non-alpha formats
    476             // will return rgba when there is transparency.
    477             if (format === "name" && this._a === 0) {
    478                 return this.toName();
    479             }
    480             return this.toRgbString();
    481         }
    482         if (format === "rgb") {
    483             formattedString = this.toRgbString();
    484         }
    485         if (format === "prgb") {
    486             formattedString = this.toPercentageRgbString();
    487         }
    488         if (format === "hex" || format === "hex6") {
    489             formattedString = this.toHexString();
    490         }
    491         if (format === "hex3") {
    492             formattedString = this.toHexString(true);
    493         }
    494         if (format === "hex4") {
    495             formattedString = this.toHex8String(true);
    496         }
    497         if (format === "hex8") {
    498             formattedString = this.toHex8String();
    499         }
    500         if (format === "name") {
    501             formattedString = this.toName();
    502         }
    503         if (format === "hsl") {
    504             formattedString = this.toHslString();
    505         }
    506         if (format === "hsv") {
    507             formattedString = this.toHsvString();
    508         }
    509 
    510         return formattedString || this.toHexString();
    511     },
    512     clone: function() {
    513         return tinycolor(this.toString());
    514     },
    515 
    516     _applyModification: function(fn, args) {
    517         var color = fn.apply(null, [this].concat([].slice.call(args)));
    518         this._r = color._r;
    519         this._g = color._g;
    520         this._b = color._b;
    521         this.setAlpha(color._a);
    522         return this;
    523     },
    524     lighten: function() {
    525         return this._applyModification(lighten, arguments);
    526     },
    527     brighten: function() {
    528         return this._applyModification(brighten, arguments);
    529     },
    530     darken: function() {
    531         return this._applyModification(darken, arguments);
    532     },
    533     desaturate: function() {
    534         return this._applyModification(desaturate, arguments);
    535     },
    536     saturate: function() {
    537         return this._applyModification(saturate, arguments);
    538     },
    539     greyscale: function() {
    540         return this._applyModification(greyscale, arguments);
    541     },
    542     spin: function() {
    543         return this._applyModification(spin, arguments);
    544     },
    545 
    546     _applyCombination: function(fn, args) {
    547         return fn.apply(null, [this].concat([].slice.call(args)));
    548     },
    549     analogous: function() {
    550         return this._applyCombination(analogous, arguments);
    551     },
    552     complement: function() {
    553         return this._applyCombination(complement, arguments);
    554     },
    555     monochromatic: function() {
    556         return this._applyCombination(monochromatic, arguments);
    557     },
    558     splitcomplement: function() {
    559         return this._applyCombination(splitcomplement, arguments);
    560     },
    561     triad: function() {
    562         return this._applyCombination(triad, arguments);
    563     },
    564     tetrad: function() {
    565         return this._applyCombination(tetrad, arguments);
    566     }
    567 };
    568 
    569 // If input is an object, force 1 into "1.0" to handle ratios properly
    570 // String input requires "1.0" as input, so 1 will be treated as 1
    571 tinycolor.fromRatio = function(color, opts) {
    572     if (typeof color == "object") {
    573         var newColor = {};
    574         for (var i in color) {
    575             if (color.hasOwnProperty(i)) {
    576                 if (i === "a") {
    577                     newColor[i] = color[i];
    578                 }
    579                 else {
    580                     newColor[i] = convertToPercentage(color[i]);
    581                 }
    582             }
    583         }
    584         color = newColor;
    585     }
    586 
    587     return tinycolor(color, opts);
    588 };
    589 
    590 // Given a string or object, convert that input to RGB
    591 // Possible string inputs:
    592 //
    593 //     "red"
    594 //     "#f00" or "f00"
    595 //     "#ff0000" or "ff0000"
    596 //     "#ff000000" or "ff000000"
    597 //     "rgb 255 0 0" or "rgb (255, 0, 0)"
    598 //     "rgb 1.0 0 0" or "rgb (1, 0, 0)"
    599 //     "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
    600 //     "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
    601 //     "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
    602 //     "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
    603 //     "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
    604 //
    605 function inputToRGB(color) {
    606 
    607     var rgb = { r: 0, g: 0, b: 0 };
    608     var a = 1;
    609     var s = null;
    610     var v = null;
    611     var l = null;
    612     var ok = false;
    613     var format = false;
    614 
    615     if (typeof color == "string") {
    616         color = stringInputToObject(color);
    617     }
    618 
    619     if (typeof color == "object") {
    620         if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
    621             rgb = rgbToRgb(color.r, color.g, color.b);
    622             ok = true;
    623             format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
    624         }
    625         else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
    626             s = convertToPercentage(color.s);
    627             v = convertToPercentage(color.v);
    628             rgb = hsvToRgb(color.h, s, v);
    629             ok = true;
    630             format = "hsv";
    631         }
    632         else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
    633             s = convertToPercentage(color.s);
    634             l = convertToPercentage(color.l);
    635             rgb = hslToRgb(color.h, s, l);
    636             ok = true;
    637             format = "hsl";
    638         }
    639 
    640         if (color.hasOwnProperty("a")) {
    641             a = color.a;
    642         }
    643     }
    644 
    645     a = boundAlpha(a);
    646 
    647     return {
    648         ok: ok,
    649         format: color.format || format,
    650         r: mathMin(255, mathMax(rgb.r, 0)),
    651         g: mathMin(255, mathMax(rgb.g, 0)),
    652         b: mathMin(255, mathMax(rgb.b, 0)),
    653         a: a
    654     };
    655 }
    656 
    657 
    658 // Conversion Functions
    659 // --------------------
    660 
    661 // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
    662 // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
    663 
    664 // `rgbToRgb`
    665 // Handle bounds / percentage checking to conform to CSS color spec
    666 // <http://www.w3.org/TR/css3-color/>
    667 // *Assumes:* r, g, b in [0, 255] or [0, 1]
    668 // *Returns:* { r, g, b } in [0, 255]
    669 function rgbToRgb(r, g, b){
    670     return {
    671         r: bound01(r, 255) * 255,
    672         g: bound01(g, 255) * 255,
    673         b: bound01(b, 255) * 255
    674     };
    675 }
    676 
    677 // `rgbToHsl`
    678 // Converts an RGB color value to HSL.
    679 // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
    680 // *Returns:* { h, s, l } in [0,1]
    681 function rgbToHsl(r, g, b) {
    682 
    683     r = bound01(r, 255);
    684     g = bound01(g, 255);
    685     b = bound01(b, 255);
    686 
    687     var max = mathMax(r, g, b), min = mathMin(r, g, b);
    688     var h, s, l = (max + min) / 2;
    689 
    690     if(max == min) {
    691         h = s = 0; // achromatic
    692     }
    693     else {
    694         var d = max - min;
    695         s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
    696         switch(max) {
    697             case r: h = (g - b) / d + (g < b ? 6 : 0); break;
    698             case g: h = (b - r) / d + 2; break;
    699             case b: h = (r - g) / d + 4; break;
    700         }
    701 
    702         h /= 6;
    703     }
    704 
    705     return { h: h, s: s, l: l };
    706 }
    707 
    708 // `hslToRgb`
    709 // Converts an HSL color value to RGB.
    710 // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
    711 // *Returns:* { r, g, b } in the set [0, 255]
    712 function hslToRgb(h, s, l) {
    713     var r, g, b;
    714 
    715     h = bound01(h, 360);
    716     s = bound01(s, 100);
    717     l = bound01(l, 100);
    718 
    719     function hue2rgb(p, q, t) {
    720         if(t < 0) t += 1;
    721         if(t > 1) t -= 1;
    722         if(t < 1/6) return p + (q - p) * 6 * t;
    723         if(t < 1/2) return q;
    724         if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
    725         return p;
    726     }
    727 
    728     if(s === 0) {
    729         r = g = b = l; // achromatic
    730     }
    731     else {
    732         var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
    733         var p = 2 * l - q;
    734         r = hue2rgb(p, q, h + 1/3);
    735         g = hue2rgb(p, q, h);
    736         b = hue2rgb(p, q, h - 1/3);
    737     }
    738 
    739     return { r: r * 255, g: g * 255, b: b * 255 };
    740 }
    741 
    742 // `rgbToHsv`
    743 // Converts an RGB color value to HSV
    744 // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
    745 // *Returns:* { h, s, v } in [0,1]
    746 function rgbToHsv(r, g, b) {
    747 
    748     r = bound01(r, 255);
    749     g = bound01(g, 255);
    750     b = bound01(b, 255);
    751 
    752     var max = mathMax(r, g, b), min = mathMin(r, g, b);
    753     var h, s, v = max;
    754 
    755     var d = max - min;
    756     s = max === 0 ? 0 : d / max;
    757 
    758     if(max == min) {
    759         h = 0; // achromatic
    760     }
    761     else {
    762         switch(max) {
    763             case r: h = (g - b) / d + (g < b ? 6 : 0); break;
    764             case g: h = (b - r) / d + 2; break;
    765             case b: h = (r - g) / d + 4; break;
    766         }
    767         h /= 6;
    768     }
    769     return { h: h, s: s, v: v };
    770 }
    771 
    772 // `hsvToRgb`
    773 // Converts an HSV color value to RGB.
    774 // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
    775 // *Returns:* { r, g, b } in the set [0, 255]
    776  function hsvToRgb(h, s, v) {
    777 
    778     h = bound01(h, 360) * 6;
    779     s = bound01(s, 100);
    780     v = bound01(v, 100);
    781 
    782     var i = Math.floor(h),
    783         f = h - i,
    784         p = v * (1 - s),
    785         q = v * (1 - f * s),
    786         t = v * (1 - (1 - f) * s),
    787         mod = i % 6,
    788         r = [v, q, p, p, t, v][mod],
    789         g = [t, v, v, q, p, p][mod],
    790         b = [p, p, t, v, v, q][mod];
    791 
    792     return { r: r * 255, g: g * 255, b: b * 255 };
    793 }
    794 
    795 // `rgbToHex`
    796 // Converts an RGB color to hex
    797 // Assumes r, g, and b are contained in the set [0, 255]
    798 // Returns a 3 or 6 character hex
    799 function rgbToHex(r, g, b, allow3Char) {
    800 
    801     var hex = [
    802         pad2(mathRound(r).toString(16)),
    803         pad2(mathRound(g).toString(16)),
    804         pad2(mathRound(b).toString(16))
    805     ];
    806 
    807     // Return a 3 character hex if possible
    808     if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {
    809         return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
    810     }
    811 
    812     return hex.join("");
    813 }
    814 
    815 // `rgbaToHex`
    816 // Converts an RGBA color plus alpha transparency to hex
    817 // Assumes r, g, b are contained in the set [0, 255] and
    818 // a in [0, 1]. Returns a 4 or 8 character rgba hex
    819 function rgbaToHex(r, g, b, a, allow4Char) {
    820 
    821     var hex = [
    822         pad2(mathRound(r).toString(16)),
    823         pad2(mathRound(g).toString(16)),
    824         pad2(mathRound(b).toString(16)),
    825         pad2(convertDecimalToHex(a))
    826     ];
    827 
    828     // Return a 4 character hex if possible
    829     if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {
    830         return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);
    831     }
    832 
    833     return hex.join("");
    834 }
    835 
    836 // `rgbaToArgbHex`
    837 // Converts an RGBA color to an ARGB Hex8 string
    838 // Rarely used, but required for "toFilter()"
    839 function rgbaToArgbHex(r, g, b, a) {
    840 
    841     var hex = [
    842         pad2(convertDecimalToHex(a)),
    843         pad2(mathRound(r).toString(16)),
    844         pad2(mathRound(g).toString(16)),
    845         pad2(mathRound(b).toString(16))
    846     ];
    847 
    848     return hex.join("");
    849 }
    850 
    851 // `equals`
    852 // Can be called with any tinycolor input
    853 tinycolor.equals = function (color1, color2) {
    854     if (!color1 || !color2) { return false; }
    855     return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();
    856 };
    857 
    858 tinycolor.random = function() {
    859     return tinycolor.fromRatio({
    860         r: mathRandom(),
    861         g: mathRandom(),
    862         b: mathRandom()
    863     });
    864 };
    865 
    866 
    867 // Modification Functions
    868 // ----------------------
    869 // Thanks to less.js for some of the basics here
    870 // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>
    871 
    872 function desaturate(color, amount) {
    873     amount = (amount === 0) ? 0 : (amount || 10);
    874     var hsl = tinycolor(color).toHsl();
    875     hsl.s -= amount / 100;
    876     hsl.s = clamp01(hsl.s);
    877     return tinycolor(hsl);
    878 }
    879 
    880 function saturate(color, amount) {
    881     amount = (amount === 0) ? 0 : (amount || 10);
    882     var hsl = tinycolor(color).toHsl();
    883     hsl.s += amount / 100;
    884     hsl.s = clamp01(hsl.s);
    885     return tinycolor(hsl);
    886 }
    887 
    888 function greyscale(color) {
    889     return tinycolor(color).desaturate(100);
    890 }
    891 
    892 function lighten (color, amount) {
    893     amount = (amount === 0) ? 0 : (amount || 10);
    894     var hsl = tinycolor(color).toHsl();
    895     hsl.l += amount / 100;
    896     hsl.l = clamp01(hsl.l);
    897     return tinycolor(hsl);
    898 }
    899 
    900 function brighten(color, amount) {
    901     amount = (amount === 0) ? 0 : (amount || 10);
    902     var rgb = tinycolor(color).toRgb();
    903     rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));
    904     rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));
    905     rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));
    906     return tinycolor(rgb);
    907 }
    908 
    909 function darken (color, amount) {
    910     amount = (amount === 0) ? 0 : (amount || 10);
    911     var hsl = tinycolor(color).toHsl();
    912     hsl.l -= amount / 100;
    913     hsl.l = clamp01(hsl.l);
    914     return tinycolor(hsl);
    915 }
    916 
    917 // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
    918 // Values outside of this range will be wrapped into this range.
    919 function spin(color, amount) {
    920     var hsl = tinycolor(color).toHsl();
    921     var hue = (hsl.h + amount) % 360;
    922     hsl.h = hue < 0 ? 360 + hue : hue;
    923     return tinycolor(hsl);
    924 }
    925 
    926 // Combination Functions
    927 // ---------------------
    928 // Thanks to jQuery xColor for some of the ideas behind these
    929 // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>
    930 
    931 function complement(color) {
    932     var hsl = tinycolor(color).toHsl();
    933     hsl.h = (hsl.h + 180) % 360;
    934     return tinycolor(hsl);
    935 }
    936 
    937 function triad(color) {
    938     var hsl = tinycolor(color).toHsl();
    939     var h = hsl.h;
    940     return [
    941         tinycolor(color),
    942         tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
    943         tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
    944     ];
    945 }
    946 
    947 function tetrad(color) {
    948     var hsl = tinycolor(color).toHsl();
    949     var h = hsl.h;
    950     return [
    951         tinycolor(color),
    952         tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
    953         tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
    954         tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
    955     ];
    956 }
    957 
    958 function splitcomplement(color) {
    959     var hsl = tinycolor(color).toHsl();
    960     var h = hsl.h;
    961     return [
    962         tinycolor(color),
    963         tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),
    964         tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})
    965     ];
    966 }
    967 
    968 function analogous(color, results, slices) {
    969     results = results || 6;
    970     slices = slices || 30;
    971 
    972     var hsl = tinycolor(color).toHsl();
    973     var part = 360 / slices;
    974     var ret = [tinycolor(color)];
    975 
    976     for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
    977         hsl.h = (hsl.h + part) % 360;
    978         ret.push(tinycolor(hsl));
    979     }
    980     return ret;
    981 }
    982 
    983 function monochromatic(color, results) {
    984     results = results || 6;
    985     var hsv = tinycolor(color).toHsv();
    986     var h = hsv.h, s = hsv.s, v = hsv.v;
    987     var ret = [];
    988     var modification = 1 / results;
    989 
    990     while (results--) {
    991         ret.push(tinycolor({ h: h, s: s, v: v}));
    992         v = (v + modification) % 1;
    993     }
    994 
    995     return ret;
    996 }
    997 
    998 // Utility Functions
    999 // ---------------------
    1000 
    1001 tinycolor.mix = function(color1, color2, amount) {
    1002     amount = (amount === 0) ? 0 : (amount || 50);
    1003 
    1004     var rgb1 = tinycolor(color1).toRgb();
    1005     var rgb2 = tinycolor(color2).toRgb();
    1006 
    1007     var p = amount / 100;
    1008 
    1009     var rgba = {
    1010         r: ((rgb2.r - rgb1.r) * p) + rgb1.r,
    1011         g: ((rgb2.g - rgb1.g) * p) + rgb1.g,
    1012         b: ((rgb2.b - rgb1.b) * p) + rgb1.b,
    1013         a: ((rgb2.a - rgb1.a) * p) + rgb1.a
    1014     };
    1015 
    1016     return tinycolor(rgba);
    1017 };
    1018 
    1019 
    1020 // Readability Functions
    1021 // ---------------------
    1022 // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)
    1023 
    1024 // `contrast`
    1025 // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)
    1026 tinycolor.readability = function(color1, color2) {
    1027     var c1 = tinycolor(color1);
    1028     var c2 = tinycolor(color2);
    1029     return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05);
    1030 };
    1031 
    1032 // `isReadable`
    1033 // Ensure that foreground and background color combinations meet WCAG2 guidelines.
    1034 // The third argument is an optional Object.
    1035 //      the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';
    1036 //      the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.
    1037 // If the entire object is absent, isReadable defaults to {level:"AA",size:"small"}.
    1038 
    1039 // *Example*
    1040 //    tinycolor.isReadable("#000", "#111") => false
    1041 //    tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false
    1042 tinycolor.isReadable = function(color1, color2, wcag2) {
    1043     var readability = tinycolor.readability(color1, color2);
    1044     var wcag2Parms, out;
    1045 
    1046     out = false;
    1047 
    1048     wcag2Parms = validateWCAG2Parms(wcag2);
    1049     switch (wcag2Parms.level + wcag2Parms.size) {
    1050         case "AAsmall":
    1051         case "AAAlarge":
    1052             out = readability >= 4.5;
    1053             break;
    1054         case "AAlarge":
    1055             out = readability >= 3;
    1056             break;
    1057         case "AAAsmall":
    1058             out = readability >= 7;
    1059             break;
    1060     }
    1061     return out;
    1062 
    1063 };
    1064 
    1065 // `mostReadable`
    1066 // Given a base color and a list of possible foreground or background
    1067 // colors for that base, returns the most readable color.
    1068 // Optionally returns Black or White if the most readable color is unreadable.
    1069 // *Example*
    1070 //    tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255"
    1071 //    tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString();  // "#ffffff"
    1072 //    tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3"
    1073 //    tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff"
    1074 tinycolor.mostReadable = function(baseColor, colorList, args) {
    1075     var bestColor = null;
    1076     var bestScore = 0;
    1077     var readability;
    1078     var includeFallbackColors, level, size ;
    1079     args = args || {};
    1080     includeFallbackColors = args.includeFallbackColors ;
    1081     level = args.level;
    1082     size = args.size;
    1083 
    1084     for (var i= 0; i < colorList.length ; i++) {
    1085         readability = tinycolor.readability(baseColor, colorList[i]);
    1086         if (readability > bestScore) {
    1087             bestScore = readability;
    1088             bestColor = tinycolor(colorList[i]);
    1089         }
    1090     }
    1091 
    1092     if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) {
    1093         return bestColor;
    1094     }
    1095     else {
    1096         args.includeFallbackColors=false;
    1097         return tinycolor.mostReadable(baseColor,["#fff", "#000"],args);
    1098     }
    1099 };
    1100 
    1101 
    1102 // Big List of Colors
    1103 // ------------------
    1104 // <http://www.w3.org/TR/css3-color/#svg-color>
    1105 var names = tinycolor.names = {
    1106     aliceblue: "f0f8ff",
    1107     antiquewhite: "faebd7",
    1108     aqua: "0ff",
    1109     aquamarine: "7fffd4",
    1110     azure: "f0ffff",
    1111     beige: "f5f5dc",
    1112     bisque: "ffe4c4",
    1113     black: "000",
    1114     blanchedalmond: "ffebcd",
    1115     blue: "00f",
    1116     blueviolet: "8a2be2",
    1117     brown: "a52a2a",
    1118     burlywood: "deb887",
    1119     burntsienna: "ea7e5d",
    1120     cadetblue: "5f9ea0",
    1121     chartreuse: "7fff00",
    1122     chocolate: "d2691e",
    1123     coral: "ff7f50",
    1124     cornflowerblue: "6495ed",
    1125     cornsilk: "fff8dc",
    1126     crimson: "dc143c",
    1127     cyan: "0ff",
    1128     darkblue: "00008b",
    1129     darkcyan: "008b8b",
    1130     darkgoldenrod: "b8860b",
    1131     darkgray: "a9a9a9",
    1132     darkgreen: "006400",
    1133     darkgrey: "a9a9a9",
    1134     darkkhaki: "bdb76b",
    1135     darkmagenta: "8b008b",
    1136     darkolivegreen: "556b2f",
    1137     darkorange: "ff8c00",
    1138     darkorchid: "9932cc",
    1139     darkred: "8b0000",
    1140     darksalmon: "e9967a",
    1141     darkseagreen: "8fbc8f",
    1142     darkslateblue: "483d8b",
    1143     darkslategray: "2f4f4f",
    1144     darkslategrey: "2f4f4f",
    1145     darkturquoise: "00ced1",
    1146     darkviolet: "9400d3",
    1147     deeppink: "ff1493",
    1148     deepskyblue: "00bfff",
    1149     dimgray: "696969",
    1150     dimgrey: "696969",
    1151     dodgerblue: "1e90ff",
    1152     firebrick: "b22222",
    1153     floralwhite: "fffaf0",
    1154     forestgreen: "228b22",
    1155     fuchsia: "f0f",
    1156     gainsboro: "dcdcdc",
    1157     ghostwhite: "f8f8ff",
    1158     gold: "ffd700",
    1159     goldenrod: "daa520",
    1160     gray: "808080",
    1161     green: "008000",
    1162     greenyellow: "adff2f",
    1163     grey: "808080",
    1164     honeydew: "f0fff0",
    1165     hotpink: "ff69b4",
    1166     indianred: "cd5c5c",
    1167     indigo: "4b0082",
    1168     ivory: "fffff0",
    1169     khaki: "f0e68c",
    1170     lavender: "e6e6fa",
    1171     lavenderblush: "fff0f5",
    1172     lawngreen: "7cfc00",
    1173     lemonchiffon: "fffacd",
    1174     lightblue: "add8e6",
    1175     lightcoral: "f08080",
    1176     lightcyan: "e0ffff",
    1177     lightgoldenrodyellow: "fafad2",
    1178     lightgray: "d3d3d3",
    1179     lightgreen: "90ee90",
    1180     lightgrey: "d3d3d3",
    1181     lightpink: "ffb6c1",
    1182     lightsalmon: "ffa07a",
    1183     lightseagreen: "20b2aa",
    1184     lightskyblue: "87cefa",
    1185     lightslategray: "789",
    1186     lightslategrey: "789",
    1187     lightsteelblue: "b0c4de",
    1188     lightyellow: "ffffe0",
    1189     lime: "0f0",
    1190     limegreen: "32cd32",
    1191     linen: "faf0e6",
    1192     magenta: "f0f",
    1193     maroon: "800000",
    1194     mediumaquamarine: "66cdaa",
    1195     mediumblue: "0000cd",
    1196     mediumorchid: "ba55d3",
    1197     mediumpurple: "9370db",
    1198     mediumseagreen: "3cb371",
    1199     mediumslateblue: "7b68ee",
    1200     mediumspringgreen: "00fa9a",
    1201     mediumturquoise: "48d1cc",
    1202     mediumvioletred: "c71585",
    1203     midnightblue: "191970",
    1204     mintcream: "f5fffa",
    1205     mistyrose: "ffe4e1",
    1206     moccasin: "ffe4b5",
    1207     navajowhite: "ffdead",
    1208     navy: "000080",
    1209     oldlace: "fdf5e6",
    1210     olive: "808000",
    1211     olivedrab: "6b8e23",
    1212     orange: "ffa500",
    1213     orangered: "ff4500",
    1214     orchid: "da70d6",
    1215     palegoldenrod: "eee8aa",
    1216     palegreen: "98fb98",
    1217     paleturquoise: "afeeee",
    1218     palevioletred: "db7093",
    1219     papayawhip: "ffefd5",
    1220     peachpuff: "ffdab9",
    1221     peru: "cd853f",
    1222     pink: "ffc0cb",
    1223     plum: "dda0dd",
    1224     powderblue: "b0e0e6",
    1225     purple: "800080",
    1226     rebeccapurple: "663399",
    1227     red: "f00",
    1228     rosybrown: "bc8f8f",
    1229     royalblue: "4169e1",
    1230     saddlebrown: "8b4513",
    1231     salmon: "fa8072",
    1232     sandybrown: "f4a460",
    1233     seagreen: "2e8b57",
    1234     seashell: "fff5ee",
    1235     sienna: "a0522d",
    1236     silver: "c0c0c0",
    1237     skyblue: "87ceeb",
    1238     slateblue: "6a5acd",
    1239     slategray: "708090",
    1240     slategrey: "708090",
    1241     snow: "fffafa",
    1242     springgreen: "00ff7f",
    1243     steelblue: "4682b4",
    1244     tan: "d2b48c",
    1245     teal: "008080",
    1246     thistle: "d8bfd8",
    1247     tomato: "ff6347",
    1248     turquoise: "40e0d0",
    1249     violet: "ee82ee",
    1250     wheat: "f5deb3",
    1251     white: "fff",
    1252     whitesmoke: "f5f5f5",
    1253     yellow: "ff0",
    1254     yellowgreen: "9acd32"
    1255 };
    1256 
    1257 // Make it easy to access colors via `hexNames[hex]`
    1258 var hexNames = tinycolor.hexNames = flip(names);
    1259 
    1260 
    1261 // Utilities
    1262 // ---------
    1263 
    1264 // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
    1265 function flip(o) {
    1266     var flipped = { };
    1267     for (var i in o) {
    1268         if (o.hasOwnProperty(i)) {
    1269             flipped[o[i]] = i;
    1270         }
    1271     }
    1272     return flipped;
    1273 }
    1274 
    1275 // Return a valid alpha value [0,1] with all invalid values being set to 1
    1276 function boundAlpha(a) {
    1277     a = parseFloat(a);
    1278 
    1279     if (isNaN(a) || a < 0 || a > 1) {
    1280         a = 1;
    1281     }
    1282 
    1283     return a;
    1284 }
    1285 
    1286 // Take input from [0, n] and return it as [0, 1]
    1287 function bound01(n, max) {
    1288     if (isOnePointZero(n)) { n = "100%"; }
    1289 
    1290     var processPercent = isPercentage(n);
    1291     n = mathMin(max, mathMax(0, parseFloat(n)));
    1292 
    1293     // Automatically convert percentage into number
    1294     if (processPercent) {
    1295         n = parseInt(n * max, 10) / 100;
    1296     }
    1297 
    1298     // Handle floating point rounding errors
    1299     if ((Math.abs(n - max) < 0.000001)) {
    1300         return 1;
    1301     }
    1302 
    1303     // Convert into [0, 1] range if it isn't already
    1304     return (n % max) / parseFloat(max);
    1305 }
    1306 
    1307 // Force a number between 0 and 1
    1308 function clamp01(val) {
    1309     return mathMin(1, mathMax(0, val));
    1310 }
    1311 
    1312 // Parse a base-16 hex value into a base-10 integer
    1313 function parseIntFromHex(val) {
    1314     return parseInt(val, 16);
    1315 }
    1316 
    1317 // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
    1318 // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
    1319 function isOnePointZero(n) {
    1320     return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
    1321 }
    1322 
    1323 // Check to see if string passed in is a percentage
    1324 function isPercentage(n) {
    1325     return typeof n === "string" && n.indexOf('%') != -1;
    1326 }
    1327 
    1328 // Force a hex value to have 2 characters
    1329 function pad2(c) {
    1330     return c.length == 1 ? '0' + c : '' + c;
    1331 }
    1332 
    1333 // Replace a decimal with it's percentage value
    1334 function convertToPercentage(n) {
    1335     if (n <= 1) {
    1336         n = (n * 100) + "%";
    1337     }
    1338 
    1339     return n;
    1340 }
    1341 
    1342 // Converts a decimal to a hex value
    1343 function convertDecimalToHex(d) {
    1344     return Math.round(parseFloat(d) * 255).toString(16);
    1345 }
    1346 // Converts a hex value to a decimal
    1347 function convertHexToDecimal(h) {
    1348     return (parseIntFromHex(h) / 255);
    1349 }
    1350 
    1351 var matchers = (function() {
    1352 
    1353     // <http://www.w3.org/TR/css3-values/#integers>
    1354     var CSS_INTEGER = "[-\\+]?\\d+%?";
    1355 
    1356     // <http://www.w3.org/TR/css3-values/#number-value>
    1357     var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";
    1358 
    1359     // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.
    1360     var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";
    1361 
    1362     // Actual matching.
    1363     // Parentheses and commas are optional, but not required.
    1364     // Whitespace can take the place of commas or opening paren
    1365     var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
    1366     var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
    1367 
    1368     return {
    1369         CSS_UNIT: new RegExp(CSS_UNIT),
    1370         rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
    1371         rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
    1372         hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
    1373         hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
    1374         hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
    1375         hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
    1376         hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
    1377         hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
    1378         hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
    1379         hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
    1380     };
    1381 })();
    1382 
    1383 // `isValidCSSUnit`
    1384 // Take in a single string / number and check to see if it looks like a CSS unit
    1385 // (see `matchers` above for definition).
    1386 function isValidCSSUnit(color) {
    1387     return !!matchers.CSS_UNIT.exec(color);
    1388 }
    1389 
    1390 // `stringInputToObject`
    1391 // Permissive string parsing.  Take in a number of formats, and output an object
    1392 // based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
    1393 function stringInputToObject(color) {
    1394 
    1395     color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();
    1396     var named = false;
    1397     if (names[color]) {
    1398         color = names[color];
    1399         named = true;
    1400     }
    1401     else if (color == 'transparent') {
    1402         return { r: 0, g: 0, b: 0, a: 0, format: "name" };
    1403     }
    1404 
    1405     // Try to match string input using regular expressions.
    1406     // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
    1407     // Just return an object and let the conversion functions handle that.
    1408     // This way the result will be the same whether the tinycolor is initialized with string or object.
    1409     var match;
    1410     if ((match = matchers.rgb.exec(color))) {
    1411         return { r: match[1], g: match[2], b: match[3] };
    1412     }
    1413     if ((match = matchers.rgba.exec(color))) {
    1414         return { r: match[1], g: match[2], b: match[3], a: match[4] };
    1415     }
    1416     if ((match = matchers.hsl.exec(color))) {
    1417         return { h: match[1], s: match[2], l: match[3] };
    1418     }
    1419     if ((match = matchers.hsla.exec(color))) {
    1420         return { h: match[1], s: match[2], l: match[3], a: match[4] };
    1421     }
    1422     if ((match = matchers.hsv.exec(color))) {
    1423         return { h: match[1], s: match[2], v: match[3] };
    1424     }
    1425     if ((match = matchers.hsva.exec(color))) {
    1426         return { h: match[1], s: match[2], v: match[3], a: match[4] };
    1427     }
    1428     if ((match = matchers.hex8.exec(color))) {
    1429         return {
    1430             r: parseIntFromHex(match[1]),
    1431             g: parseIntFromHex(match[2]),
    1432             b: parseIntFromHex(match[3]),
    1433             a: convertHexToDecimal(match[4]),
    1434             format: named ? "name" : "hex8"
    1435         };
    1436     }
    1437     if ((match = matchers.hex6.exec(color))) {
    1438         return {
    1439             r: parseIntFromHex(match[1]),
    1440             g: parseIntFromHex(match[2]),
    1441             b: parseIntFromHex(match[3]),
    1442             format: named ? "name" : "hex"
    1443         };
    1444     }
    1445     if ((match = matchers.hex4.exec(color))) {
    1446         return {
    1447             r: parseIntFromHex(match[1] + '' + match[1]),
    1448             g: parseIntFromHex(match[2] + '' + match[2]),
    1449             b: parseIntFromHex(match[3] + '' + match[3]),
    1450             a: convertHexToDecimal(match[4] + '' + match[4]),
    1451             format: named ? "name" : "hex8"
    1452         };
    1453     }
    1454     if ((match = matchers.hex3.exec(color))) {
    1455         return {
    1456             r: parseIntFromHex(match[1] + '' + match[1]),
    1457             g: parseIntFromHex(match[2] + '' + match[2]),
    1458             b: parseIntFromHex(match[3] + '' + match[3]),
    1459             format: named ? "name" : "hex"
    1460         };
    1461     }
    1462 
    1463     return false;
    1464 }
    1465 
    1466 function validateWCAG2Parms(parms) {
    1467     // return valid WCAG2 parms for isReadable.
    1468     // If input parms are invalid, return {"level":"AA", "size":"small"}
    1469     var level, size;
    1470     parms = parms || {"level":"AA", "size":"small"};
    1471     level = (parms.level || "AA").toUpperCase();
    1472     size = (parms.size || "small").toLowerCase();
    1473     if (level !== "AA" && level !== "AAA") {
    1474         level = "AA";
    1475     }
    1476     if (size !== "small" && size !== "large") {
    1477         size = "small";
    1478     }
    1479     return {"level":level, "size":size};
    1480 }
    1481 
    1482 // Node: Export function
    1483 if ( true && module.exports) {
    1484     module.exports = tinycolor;
    1485 }
    1486 // AMD/requirejs: Define the module
    1487 else if (true) {
    1488     !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {return tinycolor;}).call(exports, __webpack_require__, exports, module),
    1489                 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    1490 }
    1491 // Browser: Expose to window
    1492 else {}
    1493 
    1494 })(Math);
    1495 
    1496 
    1497 /***/ }),
    1498 
    1499 /***/ "./src/grid-layout-basic.js":
    1500 /*!**********************************!*\
    1501   !*** ./src/grid-layout-basic.js ***!
    1502   \**********************************/
    1503 /*! exports provided: name, settings */
    1504 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    1505 
    1506 "use strict";
    1507 __webpack_require__.r(__webpack_exports__);
    1508 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
    1509 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
    1510 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
    1511 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
    1512 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
    1513 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__);
    1514 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    1515 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
    1516 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    1517 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__);
    1518 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    1519 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);
    1520 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
    1521 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__);
    1522 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
    1523 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__);
    1524 
    1525 
    1526 /**
    1527  * WordPress dependencies
    1528  */
    1529 
    1530 
    1531 
    1532 
    1533 
    1534 
    1535 var name = 'gecko/grid-layout-basic';
    1536 var settings = {
    1537   title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Basic'),
    1538   parent: ['gecko/grid-layout'],
    1539   icon: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
    1540     viewBox: "0 0 24 24",
    1541     xmlns: "http://www.w3.org/2000/svg"
    1542   }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], {
    1543     d: "M0,0h24v24H0V0z M0,0h24v24H0V0z",
    1544     fill: "none"
    1545   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], {
    1546     d: "m20 7v10h-16v-10h16m0-2h-16c-1.1 0-1.99 0.9-1.99 2l-0.01 10c0 1.1 0.9 2 2 2h16c1.1 0 2-0.9 2-2v-10c0-1.1-0.9-2-2-2z"
    1547   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1548     x: "11",
    1549     y: "8",
    1550     width: "2",
    1551     height: "2"
    1552   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1553     x: "11",
    1554     y: "11",
    1555     width: "2",
    1556     height: "2"
    1557   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1558     x: "8",
    1559     y: "8",
    1560     width: "2",
    1561     height: "2"
    1562   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1563     x: "8",
    1564     y: "11",
    1565     width: "2",
    1566     height: "2"
    1567   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1568     x: "5",
    1569     y: "11",
    1570     width: "2",
    1571     height: "2"
    1572   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1573     x: "5",
    1574     y: "8",
    1575     width: "2",
    1576     height: "2"
    1577   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1578     x: "8",
    1579     y: "14",
    1580     width: "8",
    1581     height: "2"
    1582   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1583     x: "14",
    1584     y: "11",
    1585     width: "2",
    1586     height: "2"
    1587   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1588     x: "14",
    1589     y: "8",
    1590     width: "2",
    1591     height: "2"
    1592   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1593     x: "17",
    1594     y: "11",
    1595     width: "2",
    1596     height: "2"
    1597   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Rect"], {
    1598     x: "17",
    1599     y: "8",
    1600     width: "2",
    1601     height: "2"
    1602   })),
    1603   description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('An image Grid Block.'),
    1604   category: 'common',
    1605   supports: {
    1606     className: true,
    1607     inserter: true,
    1608     reusable: false,
    1609     html: false
    1610   },
    1611   styles: [{
    1612     name: 'default',
    1613     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Default'),
    1614     isDefault: true
    1615   }],
    1616   attributes: {
    1617     h: {
    1618       type: 'number',
    1619       default: 1
    1620     },
    1621     w: {
    1622       type: 'number',
    1623       default: 1
    1624     }
    1625   },
    1626   transforms: {
    1627     from: [{
    1628       type: 'block',
    1629       blocks: ['gecko/grid-layout-item', 'gecko/grid-layout-image'],
    1630       transform: function transform(attributes, innerBlocks) {
    1631         var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work.
    1632         // It appears that innerBlocks will be added in the future.
    1633 
    1634         var h = attributes.h,
    1635             w = attributes.w;
    1636         return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__["createBlock"])('gecko/grid-layout-basic', {
    1637           h: h,
    1638           w: w
    1639         }, selected.innerBlocks);
    1640       }
    1641     }]
    1642   },
    1643   deprecated: [{
    1644     migrate: function migrate() {},
    1645     save: function save() {
    1646       return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null);
    1647     }
    1648   }],
    1649   edit: function edit(_ref) {
    1650     var attributes = _ref.attributes,
    1651         setAttributes = _ref.setAttributes,
    1652         className = _ref.className,
    1653         insertBlocksAfter = _ref.insertBlocksAfter;
    1654     var h = attributes.h,
    1655         w = attributes.w;
    1656     var styles = {
    1657       gridColumnEnd: 'span ' + w,
    1658       gridRowEnd: 'span ' + h
    1659     };
    1660     return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InspectorControls"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], {
    1661       title: "Grid Item"
    1662     }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], {
    1663       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Width'),
    1664       value: w,
    1665       onChange: function onChange(next) {
    1666         setAttributes({
    1667           w: next
    1668         });
    1669       },
    1670       min: 1,
    1671       max: 12
    1672     }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], {
    1673       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Span Rows'),
    1674       value: h,
    1675       onChange: function onChange(next) {
    1676         setAttributes({
    1677           h: next
    1678         });
    1679       },
    1680       min: 1,
    1681       max: 12
    1682     }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    1683       className: "gecko-grid-layout-editor-styles",
    1684       style: styles
    1685     }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    1686       className: "wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-basic ".concat(attributes.className)
    1687     }, typeof insertBlocksAfter === 'function' //This line makes sure styles do not break
    1688     ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"], {
    1689       templateLock: false
    1690     }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, "Lorem Ipsum") // This is what shows as the preview content.
    1691     ));
    1692   },
    1693   save: function save() {
    1694     return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null)); // Honestly I don't want to do this but conventions are conventions.
    1695   }
    1696 };
    1697 
    1698 /***/ }),
    1699 
    1700 /***/ "./src/grid-layout-image.js":
    1701 /*!**********************************!*\
    1702   !*** ./src/grid-layout-image.js ***!
    1703   \**********************************/
    1704 /*! exports provided: name, settings */
    1705 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    1706 
    1707 "use strict";
    1708 __webpack_require__.r(__webpack_exports__);
    1709 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
    1710 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
    1711 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
    1712 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
    1713 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
    1714 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__);
    1715 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    1716 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
    1717 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    1718 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__);
    1719 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    1720 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);
    1721 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
    1722 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__);
    1723 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
    1724 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__);
    1725 
    1726 
    1727 /**
    1728  * WordPress dependencies
    1729  */
    1730 
    1731 
    1732 
    1733 
    1734 
    1735 
    1736 var ALLOWED_BLOCKS = ['core/paragraph', 'core/heading', 'core/button', 'core/list', 'core/quote'];
    1737 var name = 'gecko/grid-layout-image';
    1738 var settings = {
    1739   title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Image'),
    1740   parent: ['gecko/grid-layout'],
    1741   icon: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
    1742     viewBox: "0 0 24 24",
    1743     xmlns: "http://www.w3.org/2000/svg"
    1744   }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], {
    1745     d: "M0,0h24v24H0V0z",
    1746     fill: "none"
    1747   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], {
    1748     d: "m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z"
    1749   }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], {
    1750     d: "m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z"
    1751   })),
    1752   description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('An image Grid Block.'),
    1753   category: 'common',
    1754   supports: {
    1755     className: true,
    1756     inserter: true,
    1757     reusable: false,
    1758     html: false
    1759   },
    1760   styles: [{
    1761     name: 'default',
    1762     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Default'),
    1763     isDefault: true
    1764   }, {
    1765     name: 'hover',
    1766     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Hover')
    1767   }, {
    1768     name: 'no-caption',
    1769     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('No Caption')
    1770   }],
    1771   attributes: {
    1772     h: {
    1773       type: 'number',
    1774       default: 1
    1775     },
    1776     w: {
    1777       type: 'number',
    1778       default: 1
    1779     },
    1780     minHeight: {
    1781       type: 'number',
    1782       default: 200
    1783     },
    1784     imgId: {
    1785       type: 'number'
    1786     },
    1787     imgUrl: {
    1788       type: 'string'
    1789     }
    1790   },
    1791   transforms: {
    1792     from: [{
    1793       type: 'block',
    1794       blocks: ['gecko/grid-layout-item', 'gecko/grid-layout-basic'],
    1795       transform: function transform(attributes, innerBlocks) {
    1796         var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work.
    1797         // It appears that innerBlocks will be added in the future.
    1798 
    1799         var h = attributes.h,
    1800             w = attributes.w,
    1801             bgMedia = attributes.bgMedia,
    1802             bgMediaUrl = attributes.bgMediaUrl,
    1803             mediaId = attributes.mediaId,
    1804             mediaUrl = attributes.mediaUrl,
    1805             minHeight = attributes.minHeight;
    1806         return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__["createBlock"])('gecko/grid-layout-image', {
    1807           h: h,
    1808           w: w,
    1809           imgId: bgMedia || mediaId,
    1810           imgUrl: bgMediaUrl || mediaUrl,
    1811           minHeight: minHeight
    1812         }, selected.innerBlocks);
    1813       }
    1814     }]
    1815   },
    1816   deprecated: [{
    1817     migrate: function migrate() {},
    1818     save: function save() {
    1819       return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null);
    1820     }
    1821   }],
    1822   edit: function edit(_ref) {
    1823     var attributes = _ref.attributes,
    1824         setAttributes = _ref.setAttributes,
    1825         className = _ref.className,
    1826         insertBlocksAfter = _ref.insertBlocksAfter;
    1827     var h = attributes.h,
    1828         w = attributes.w,
    1829         imgId = attributes.imgId,
    1830         imgUrl = attributes.imgUrl,
    1831         minHeight = attributes.minHeight;
    1832     var styles = {
    1833       gridColumnEnd: 'span ' + w,
    1834       gridRowEnd: 'span ' + h,
    1835       minHeight: minHeight + 'px'
    1836     };
    1837     return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InspectorControls"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], {
    1838       title: "Grid Item"
    1839     }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], {
    1840       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Minimum Height'),
    1841       value: minHeight,
    1842       onChange: function onChange(next) {
    1843         setAttributes({
    1844           minHeight: next
    1845         });
    1846       },
    1847       min: "50",
    1848       max: "600",
    1849       step: "1"
    1850     }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], {
    1851       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Width'),
    1852       value: w,
    1853       onChange: function onChange(next) {
    1854         setAttributes({
    1855           w: next
    1856         });
    1857       },
    1858       min: 1,
    1859       max: 12
    1860     }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], {
    1861       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Span Rows'),
    1862       value: h,
    1863       onChange: function onChange(next) {
    1864         setAttributes({
    1865           h: next
    1866         });
    1867       },
    1868       min: 1,
    1869       max: 12
    1870     }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["BlockControls"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Toolbar"], null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["MediaUpload"], {
    1871       onSelect: function onSelect(value) {
    1872         // console.log(value);
    1873         setAttributes({
    1874           imgId: value.id,
    1875           imgUrl: value.url
    1876         });
    1877       },
    1878       type: ['image'],
    1879       value: imgId ? imgId : null,
    1880       render: function render(_ref2) {
    1881         var open = _ref2.open;
    1882         return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["IconButton"], {
    1883           className: "components-icon-button components-toolbar__control",
    1884           label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Edit image'),
    1885           onClick: open,
    1886           icon: "edit"
    1887         });
    1888       }
    1889     }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
    1890       className: "gecko-grid-layout-editor-styles",
    1891       style: styles
    1892     }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("figure", {
    1893       className: "wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-image ".concat(attributes.className)
    1894     }, !imgId && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["MediaPlaceholder"], {
    1895       onSelect: function onSelect(value) {
    1896         setAttributes({
    1897           imgId: value.id,
    1898           imgUrl: value.url
    1899         });
    1900       },
    1901       allowedTypes: ['image'],
    1902       accept: "image/*"
    1903     }), imgUrl && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
    1904       className: "gecko-grid-layout-image__image",
    1905       src: imgUrl
    1906     }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("figcaption", {
    1907       className: "gecko-grid-layout-image__caption"
    1908     }, typeof insertBlocksAfter === 'function' //This line makes sure styles do not break
    1909     ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"], {
    1910       templateLock: false,
    1911       allowedBlocks: ALLOWED_BLOCKS
    1912     }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, "Lorem Ipsum") // This is what shows as the preview content.
    1913     )));
    1914   },
    1915   save: function save() {
    1916     return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null)); // Honestly I don't want to do this but conventions are conventions.
    1917   }
    1918 };
    1919 
    1920 /***/ }),
    1921 
    1922 /***/ "./src/grid-layout-item.js":
    1923 /*!*********************************!*\
    1924   !*** ./src/grid-layout-item.js ***!
    1925   \*********************************/
    1926 /*! exports provided: name, settings */
    1927 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    1928 
    1929 "use strict";
    1930 __webpack_require__.r(__webpack_exports__);
    1931 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
    1932 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
    1933 /* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinycolor2 */ "./node_modules/tinycolor2/tinycolor.js");
    1934 /* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinycolor2__WEBPACK_IMPORTED_MODULE_0__);
    1935 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
    1936 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__);
    1937 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    1938 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
    1939 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    1940 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__);
    1941 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    1942 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);
    1943 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
    1944 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__);
    1945 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
    1946 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__);
    1947 
    1948 /**
    1949  * WordPress dependencies
    1950  */
    1951 
    1952 
    1953 
    1954 
    1955 
    1956 
    1957 
    1958 var name = 'gecko/grid-layout-item';
    1959 var settings = {
    1960   title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Experimental (Do Not Use)'),
    1961   parent: ['gecko/grid-layout'],
    1962   icon: React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
    1963     xmlns: "http://www.w3.org/2000/svg",
    1964     viewBox: "0 0 24 24"
    1965   }, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], {
    1966     fill: "none",
    1967     d: "M0 0h24v24H0V0z"
    1968   }), React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], {
    1969     d: "M11.99 18.54l-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16zm0-11.47L17.74 9 12 13.47 6.26 9 12 4.53z"
    1970   })),
    1971   description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('A single grid item within a grid block.'),
    1972   category: 'common',
    1973   supports: {
    1974     className: true,
    1975     inserter: true,
    1976     reusable: false,
    1977     html: false
    1978   },
    1979   styles: [{
    1980     name: 'default',
    1981     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Default'),
    1982     isDefault: true
    1983   }, {
    1984     name: 'hover',
    1985     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Hover')
    1986   }],
    1987   attributes: {
    1988     type: {
    1989       type: 'string',
    1990       default: undefined
    1991     },
    1992     //solid, image, image-content
    1993     // theme:{ type: 'string',default: undefined, }, //light, dark
    1994     // borderRadius: { type: 'number'},
    1995     // border: { type: 'object'},
    1996     // boxShadow: { type: 'object'},
    1997     // padding: { type: 'string'}, // t b l r ui '5px 10px' '5px 10px 5px'
    1998     // margin: { type: 'object'}, // t b l r ui
    1999     // alignContent: { type: 'string'}, // normal, start, end, center
    2000     // justifyContent: { type: 'string'}, // normal, start, end, center
    2001     // backgroundImage: { type: 'string'}, // process for creating bg images
    2002     // backgroundRepeat: { type: 'string'}, // no-repeat, repeat, repeat-x, repeat-y
    2003     // backgroundSize: { type: 'string'}, // cover,contain,auto
    2004     // backgroundColor: { type: 'string'},
    2005     h: {
    2006       type: 'number',
    2007       default: 1
    2008     },
    2009     w: {
    2010       type: 'number'
    2011     },
    2012     minHeight: {
    2013       type: 'number',
    2014       default: 200
    2015     },
    2016     opacity: {
    2017       type: 'number',
    2018       default: 1
    2019     },
    2020     bgMedia: {
    2021       type: 'number'
    2022     },
    2023     bgMediaUrl: {
    2024       type: 'string'
    2025     },
    2026     bgColor: {
    2027       type: 'string'
    2028     },
    2029     bgColorSlug: {
    2030       type: 'string'
    2031     },
    2032     bgColorBrightness: {
    2033       type: 'number'
    2034     } //light or dark
    2035 
    2036   },
    2037   transforms: {
    2038     from: [{
    2039       type: 'block',
    2040       blocks: ['gecko/grid-layout-image', 'gecko/grid-layout-basic'],
    2041       transform: function transform(attributes, innerBlocks) {
    2042         var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work.
    2043         // It appears that innerBlocks will be added in the future.
    2044 
    2045         var h = attributes.h,
    2046             w = attributes.w,
    2047             imgId = attributes.imgId,
    2048             imgUrl = attributes.imgUrl,
    2049             mediaId = attributes.mediaId,
    2050             mediaUrl = attributes.mediaUrl,
    2051             minHeight = attributes.minHeight;
    2052         return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__["createBlock"])('gecko/grid-layout-item', {
    2053           h: h,
    2054           w: w,
    2055           bgMedia: imgId || mediaId,
    2056           bgMediaUrl: imgUrl || mediaUrl,
    2057           minHeight: minHeight
    2058         }, selected.innerBlocks);
    2059       }
    2060     }]
    2061   },
    2062   deprecated: [{
    2063     migrate: function migrate() {},
    2064     save: function save() {
    2065       return React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null);
    2066     }
    2067   }],
    2068   edit: function edit(_ref) {
    2069     var attributes = _ref.attributes,
    2070         setAttributes = _ref.setAttributes,
    2071         className = _ref.className,
    2072         insertBlocksAfter = _ref.insertBlocksAfter;
    2073     var opacity = attributes.opacity,
    2074         h = attributes.h,
    2075         w = attributes.w,
    2076         type = attributes.type,
    2077         padding = attributes.padding,
    2078         bgMedia = attributes.bgMedia,
    2079         bgMediaUrl = attributes.bgMediaUrl,
    2080         bgColor = attributes.bgColor,
    2081         bgColorBrightness = attributes.bgColorBrightness,
    2082         bgColorSlug = attributes.bgColorSlug,
    2083         minHeight = attributes.minHeight;
    2084     var styles = {
    2085       '--background': bgColor,
    2086       '--opacity': opacity,
    2087       gridColumnEnd: 'span ' + w,
    2088       gridRowEnd: 'span ' + h,
    2089       backgroundColor: bgColor,
    2090       backgroundImage: 'url(' + bgMediaUrl + ')',
    2091       minHeight: minHeight + 'px'
    2092     };
    2093     var lightOrDark = 'light';
    2094     if (bgColorBrightness < 130) lightOrDark = 'dark';
    2095     return React.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_3__["Fragment"], null, React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InspectorControls"], null, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], {
    2096       title: "Settings"
    2097     }, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], {
    2098       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Width'),
    2099       value: w,
    2100       onChange: function onChange(next) {
    2101         setAttributes({
    2102           w: next
    2103         });
    2104       },
    2105       min: 1,
    2106       max: 12
    2107     }), React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], {
    2108       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Span Rows'),
    2109       value: h,
    2110       onChange: function onChange(next) {
    2111         setAttributes({
    2112           h: next
    2113         });
    2114       },
    2115       min: 1,
    2116       max: 12
    2117     })), React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], {
    2118       title: "Style"
    2119     }, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["RangeControl"], {
    2120       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Minimum Height'),
    2121       value: minHeight,
    2122       onChange: function onChange(next) {
    2123         setAttributes({
    2124           minHeight: next
    2125         });
    2126       },
    2127       min: "50",
    2128       max: "600",
    2129       step: "1"
    2130     }), type !== "solid" && React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["MediaUpload"], {
    2131       onSelect: function onSelect(value) {
    2132         // console.log(value);
    2133         setAttributes({
    2134           bgMedia: value.id,
    2135           bgMediaUrl: value.url
    2136         });
    2137       },
    2138       type: ['image', 'video'],
    2139       value: bgMedia ? bgMedia : null,
    2140       render: function render(_ref2) {
    2141         var open = _ref2.open;
    2142         return React.createElement("div", null, bgMediaUrl && React.createElement("img", {
    2143           src: bgMediaUrl,
    2144           onClick: open,
    2145           width: "100%",
    2146           height: "auto",
    2147           style: {
    2148             cursor: "pointer"
    2149           }
    2150         }), !bgMediaUrl && React.createElement("div", {
    2151           className: 'button button-large',
    2152           onClick: open
    2153         }, "Choose Background"));
    2154       }
    2155     }), React.createElement("hr", null), React.createElement("div", null, React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["ColorPalette"], {
    2156       label: "Background Color",
    2157       value: bgColor ? bgColor.color : undefined,
    2158       onChange: function onChange(value) {
    2159         var settings = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__["select"])('core/editor').getEditorSettings();
    2160         var colorSlug = value ? Object(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["getColorObjectByColorValue"])(settings.colors, value).slug : undefined;
    2161         setAttributes({
    2162           bgColorSlug: colorSlug
    2163         });
    2164         var brightness = value ? tinycolor2__WEBPACK_IMPORTED_MODULE_0___default()(value).getBrightness() : undefined;
    2165         setAttributes({
    2166           bgColorBrightness: brightness
    2167         });
    2168         setAttributes({
    2169           bgColor: value
    2170         });
    2171       }
    2172     }), React.createElement("hr", null)))), React.createElement("div", {
    2173       className: "gecko-grid-layout-editor-styles",
    2174       style: styles
    2175     }), React.createElement("div", {
    2176       className: "wp-block-gecko-grid-layout-editor__wrap".concat(type, " ").concat(attributes.className, " has-").concat(bgColorSlug, "-background-color is-").concat(lightOrDark, "-background")
    2177     }, (type === 'image' || type === 'image-content') && !bgMedia && React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["MediaPlaceholder"], {
    2178       onSelect: function onSelect(value) {
    2179         setAttributes({
    2180           bgMedia: value.id,
    2181           bgMediaUrl: value.url
    2182         });
    2183       },
    2184       allowedTypes: ['image'],
    2185       accept: "image/*"
    2186     }), typeof insertBlocksAfter === 'function' && //This line makes sure styles do not break
    2187     React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"], {
    2188       templateLock: false
    2189     })));
    2190   },
    2191   save: function save() {
    2192     return React.createElement("div", null, React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null)); // Honestly I don't want to do this but conventions are conventions.
    2193   }
    2194 };
    2195 
    2196 /***/ }),
    2197 
    2198 /***/ "./src/grid-layout.js":
    2199 /*!****************************!*\
    2200   !*** ./src/grid-layout.js ***!
    2201   \****************************/
    2202 /*! exports provided: name, settings */
    2203 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    2204 
    2205 "use strict";
    2206 __webpack_require__.r(__webpack_exports__);
    2207 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
    2208 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
    2209 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    2210 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__);
    2211 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
    2212 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__);
    2213 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    2214 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__);
    2215 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
    2216 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_3__);
    2217 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
    2218 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__);
    2219 /* harmony import */ var _template_select__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./template-select */ "./src/template-select.js");
    2220 /**
    2221  * WordPress dependencies
    2222  */
    2223 
    2224 
    2225 
    2226 
    2227 
    2228 
    2229 /**
    2230  * Allowed blocks constant is passed to InnerBlocks precisely as specified here.
    2231  * The contents of the array should never change.
    2232  * The array should contain the name of each block that is allowed.
    2233  * In columns block, the only block we allow is 'dmp/grid-item'.
    2234  *
    2235  * @constant
    2236  * @type {string[]}
    2237 */
    2238 
    2239 var ALLOWED_BLOCKS = ['gecko/grid-layout-item', 'gecko/grid-layout-image', 'gecko/grid-layout-basic'];
    2240 var name = 'gecko/grid-layout';
    2241 var settings = {
    2242   title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('Grid'),
    2243   icon: React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
    2244     viewBox: "0 0 24 24",
    2245     xmlns: "http://www.w3.org/2000/svg"
    2246   }, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], {
    2247     fill: "none",
    2248     d: "M0 0h24v24H0V0z"
    2249   }), React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["G"], null, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Path"], {
    2250     d: "M4,13 L8,13 L8,10 L4,10 L4,13 Z M4,15 L4,18 L8,18 L8,15 L4,15 Z M10,13 L14,13 L14,10 L10,10 L10,13 Z M10,15 L10,18 L14,18 L14,15 L10,15 Z M20,13 L20,10 L16,10 L16,13 L20,13 Z M20,15 L16,15 L16,18 L20,18 L20,15 Z M4,8 L8,8 L8,5 L4,5 L4,8 Z M10,8 L14,8 L14,5 L10,5 L10,8 Z M20,8 L20,5 L16,5 L16,8 L20,8 Z M4,3 L20,3 C21.1045695,3 22,3.95139491 22,5.125 L22,17.875 C22,19.0486051 21.1045695,20 20,20 L4,20 C2.8954305,20 2,19.0486051 2,17.875 L2,5.125 C2,3.95139491 2.8954305,3 4,3 Z"
    2251   }))),
    2252   category: 'layout',
    2253   description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('Use CSS Grid to build layouts and, then add whatever content blocks you’d like.'),
    2254   supports: {
    2255     align: ['wide', 'full'],
    2256     html: false
    2257   },
    2258   deprecated: [{
    2259     migrate: function migrate() {},
    2260     save: function save() {
    2261       return React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_3__["InnerBlocks"].Content, null);
    2262     }
    2263   }],
    2264   styles: [{
    2265     name: 'default',
    2266     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('Default'),
    2267     isDefault: true
    2268   }, {
    2269     name: 'no-gap',
    2270     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('No Gap')
    2271   }],
    2272   edit: function edit(_ref) {
    2273     var attributes = _ref.attributes,
    2274         setAttributes = _ref.setAttributes,
    2275         insertBlocksAfter = _ref.insertBlocksAfter,
    2276         clientId = _ref.clientId;
    2277     var block = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__["select"])('core/editor').getBlocksByClientId(clientId)[0];
    2278     var hasInnerBlocks = block && block.innerBlocks ? block.innerBlocks.length > 0 : false;
    2279     return React.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["Fragment"], null, React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_3__["InspectorControls"], null, React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["PanelBody"], null)), React.createElement("div", {
    2280       className: "wp-block-gecko-grid-layout-editor"
    2281     }, typeof insertBlocksAfter === 'function' ? React.createElement(_template_select__WEBPACK_IMPORTED_MODULE_5__["default"], {
    2282       hasInnnerBlocks: hasInnerBlocks,
    2283       allowedBlocks: ALLOWED_BLOCKS
    2284     }) : React.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('Preview Not Available'))));
    2285   },
    2286   save: function save() {
    2287     return React.createElement("div", null, React.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_3__["InnerBlocks"].Content, null)); // Honestly I don't want to do this but conventions are conventions.
    2288   }
    2289 };
    2290 
    2291 /***/ }),
    2292 
    2293 /***/ "./src/index.js":
    2294 /*!**********************!*\
    2295   !*** ./src/index.js ***!
    2296   \**********************/
    2297 /*! no exports provided */
    2298 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    2299 
    2300 "use strict";
    2301 __webpack_require__.r(__webpack_exports__);
    2302 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    2303 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);
    2304 /* harmony import */ var _grid_layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./grid-layout */ "./src/grid-layout.js");
    2305 /* harmony import */ var _grid_layout_item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./grid-layout-item */ "./src/grid-layout-item.js");
    2306 /* harmony import */ var _grid_layout_image__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./grid-layout-image */ "./src/grid-layout-image.js");
    2307 /* harmony import */ var _grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./grid-layout-basic */ "./src/grid-layout-basic.js");
    2308 /**
    2309  * WordPress dependencies
    2310  */
    2311 
    2312 /**
    2313  * Internal dependencies
    2314  */
    2315 
    2316 
    2317 
    2318 
    2319 
    2320 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout__WEBPACK_IMPORTED_MODULE_1__["name"], _grid_layout__WEBPACK_IMPORTED_MODULE_1__["settings"]);
    2321 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__["name"], _grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__["settings"]);
    2322 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_image__WEBPACK_IMPORTED_MODULE_3__["name"], _grid_layout_image__WEBPACK_IMPORTED_MODULE_3__["settings"]);
    2323 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_item__WEBPACK_IMPORTED_MODULE_2__["name"], _grid_layout_item__WEBPACK_IMPORTED_MODULE_2__["settings"]);
    2324 /**
    2325  * This make sure the grid works in the editor.
    2326  */
    2327 // document.addEventListener("DOMContentLoaded", function () {
    2328 //  function updateContainer() {
    2329 //      const container = document.querySelector('.gecko-grid-slider');
    2330 //      if (container) {
    2331 //          function listenForAppendedNodes() {
    2332 //              // listen for child blocks being added to layout
    2333 //              const layout = document.querySelector('.editor-block-list__layout');
    2334 //              const observerConfig = {
    2335 //                  childList: true,
    2336 //                  subtree: true
    2337 //              };
    2338 //              const observer = new MutationObserver((mutationList) => {
    2339 //                  for (const mutation of mutationList) {
    2340 //                      if (mutation.type === 'childList' && mutation.addedNodes.length) {
    2341 //                          const childBlocks = container.querySelectorAll('[data-type="gecko/grid-slider-grid-slide"]');
    2342 //                          listenForBlockChanges(childBlocks);
    2343 //                      }
    2344 //                  }
    2345 //              });
    2346 //              observer.observe(layout, observerConfig);
    2347 //          }
    2348 //          function listenForBlockChanges(blocks) {
    2349 //              for (const block of blocks) {
    2350 //                  // console.log('block', block)
    2351 //                  const observerConfig = {
    2352 //                      attributes: true,
    2353 //                      attributeFilter: ['style', 'data-bg']
    2354 //                  };
    2355 //                  // Find the slide that has the attributes
    2356 //                  const slide = block.querySelector('.gecko-grid-slider__slide');
    2357 //                  // Initialize block styles
    2358 //                  const styles = slide.getAttribute('style');
    2359 //                  block.style = styles;
    2360 //                  // Listen for slide style changes
    2361 //                  const observer = new MutationObserver((mutationList) => {
    2362 //                      for (const mutation of mutationList) {
    2363 //                          console.log('mutation 2 occured');
    2364 //                          if (mutation.attributeName === 'style') {
    2365 //                              const styles = mutation.target.getAttribute('style');
    2366 //                              block.style = styles;
    2367 //                          }
    2368 //                      }
    2369 //                  });
    2370 //                  observer.observe(slide, observerConfig);
    2371 //              }
    2372 //          }
    2373 //          listenForAppendedNodes();
    2374 //          let childBlocks = container.querySelectorAll('[data-type="gecko/grid-slider-grid-slide"]');
    2375 //          listenForBlockChanges(childBlocks);
    2376 //      }
    2377 //  }
    2378 //  updateContainer();
    2379 //  document.addEventListener("DOMNodeInserted", updateContainer)
    2380 // });
    2381 
    2382 jQuery(function ($) {
    2383   function listenForStyleChangesGridItem() {
    2384     $('.gecko-grid-layout-editor-styles').each(function () {
    2385       var observer = new MutationObserver(function (mutations) {
    2386         mutations.forEach(function (mutation) {
    2387           // On change update the styles
    2388           $('[data-type="gecko/grid-layout-basic"]').each(function () {
    2389             var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style");
    2390             $(this).attr("style", styles);
    2391           });
    2392           $('[data-type="gecko/grid-layout-image"]').each(function () {
    2393             var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style");
    2394             $(this).attr("style", styles);
    2395           });
    2396           $('[data-type="gecko/grid-layout-item"]').each(function () {
    2397             var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style");
    2398             $(this).attr("style", styles);
    2399           });
    2400         });
    2401       });
    2402       observer.disconnect();
    2403       observer.observe(this, {
    2404         attributes: true,
    2405         attributeFilter: ['style']
    2406       });
    2407     });
    2408   }
    2409 
    2410   function listenForStyleChangesGrid() {
    2411     $('.wp-block-gecko-grid-layout-editor').each(function () {
    2412       var observer = new MutationObserver(function (mutations) {
    2413         mutations.forEach(function (mutation) {
    2414           // On change update the styles
    2415           $('.wp-block-gecko-grid-layout-editor').each(function () {
    2416             var styles = $(this).attr("data-passthru");
    2417             var grid = $(this).attr("data-grid");
    2418             $(this).find(".editor-block-list__layout").attr("style", styles);
    2419           });
    2420         });
    2421       });
    2422       observer.disconnect();
    2423       observer.observe(this, {
    2424         attributes: true,
    2425         attributeFilter: ['data-passthru', 'style']
    2426       });
    2427     });
    2428   }
    2429 
    2430   function updateStylesGridItem() {
    2431     $('[data-type="gecko/grid-layout-image"]').each(function () {
    2432       var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style");
    2433       $(this).attr("style", styles);
    2434     });
    2435     $('[data-type="gecko/grid-layout-basic"]').each(function () {
    2436       var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style");
    2437       $(this).attr("style", styles);
    2438     });
    2439     $('[data-type="gecko/grid-layout-item"]').each(function () {
    2440       var styles = $(this).find(".gecko-grid-layout-editor-styles").attr("style");
    2441       $(this).attr("style", styles);
    2442     });
    2443   }
    2444 
    2445   function updateStylesGrid() {
    2446     $('.wp-block-gecko-grid-layout-editor').each(function () {
    2447       var styles = $(this).attr("data-passthru");
    2448       var grid = $(this).attr("data-grid");
    2449       $(this).find(".editor-block-list__layout").attr("style", styles);
    2450     });
    2451   }
    2452 
    2453   $('body').on('DOMNodeInserted', '.wp-block-gecko-grid-layout-editor', function (e) {
    2454     if ($('.wp-block-gecko-grid-layout-editor')) {
    2455       updateStylesGrid();
    2456       updateStylesGridItem();
    2457       listenForStyleChangesGrid();
    2458       listenForStyleChangesGridItem();
    2459     }
    2460   });
    2461   $(window).load(function () {
    2462     updateStylesGrid();
    2463     updateStylesGridItem();
    2464     listenForStyleChangesGrid();
    2465     listenForStyleChangesGridItem();
    2466   });
    2467 });
    2468 
    2469 /***/ }),
    2470 
    2471 /***/ "./src/template-preview.js":
    2472 /*!*********************************!*\
    2473   !*** ./src/template-preview.js ***!
    2474   \*********************************/
    2475 /*! exports provided: default */
    2476 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    2477 
    2478 "use strict";
    2479 __webpack_require__.r(__webpack_exports__);
    2480 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Preview; });
    2481 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
    2482 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
    2483 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");
    2484 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
    2485 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
    2486 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
    2487 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");
    2488 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
    2489 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js");
    2490 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
    2491 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "react");
    2492 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
    2493 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    2494 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__);
    2495 
    2496 
    2497 
    2498 
    2499 
    2500 
    2501  // import { Fragment } from '@wordpress/element';
    2502 
    2503 var Preview =
    2504 /*#__PURE__*/
    2505 function (_React$PureComponent) {
    2506   _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(Preview, _React$PureComponent);
    2507 
    2508   function Preview() {
    2509     _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, Preview);
    2510 
    2511     return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(Preview).apply(this, arguments));
    2512   }
    2513 
    2514   _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(Preview, [{
    2515     key: "render",
    2516     value: function render() {
    2517       var layout = this.props.layout;
    2518       return react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement("div", {
    2519         className: "gecko-grid-layout-template-preview"
    2520       }, layout.map(function (block, key) {
    2521         var styles = {
    2522           gridColumnEnd: 'span ' + block[1].w,
    2523           gridRowEnd: 'span ' + block[1].h
    2524         };
    2525         return react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement("div", {
    2526           key: key,
    2527           className: "gecko-grid-layout-template-preview__item",
    2528           style: styles
    2529         });
    2530       }));
    2531     }
    2532   }]);
    2533 
    2534   return Preview;
    2535 }(react__WEBPACK_IMPORTED_MODULE_5___default.a.PureComponent);
    2536 
    2537 
    2538 
    2539 /***/ }),
    2540 
    2541 /***/ "./src/template-select.js":
    2542 /*!********************************!*\
    2543   !*** ./src/template-select.js ***!
    2544   \********************************/
    2545 /*! exports provided: default */
    2546 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    2547 
    2548 "use strict";
    2549 __webpack_require__.r(__webpack_exports__);
    2550 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TemplateSelect; });
    2551 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
    2552 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
    2553 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");
    2554 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
    2555 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
    2556 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
    2557 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");
    2558 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
    2559 /* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js");
    2560 /* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
    2561 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js");
    2562 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
    2563 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
    2564 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__);
    2565 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "react");
    2566 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__);
    2567 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    2568 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__);
    2569 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
    2570 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_9__);
    2571 /* harmony import */ var _templates__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./templates */ "./src/templates.js");
    2572 /* harmony import */ var _template_preview__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./template-preview */ "./src/template-preview.js");
    2573 
    2574 
    2575 
    2576 
    2577 
    2578 
    2579 
    2580 
    2581 
    2582 
    2583  // Custom Templates to choose from.
    2584 
    2585  // Custom Templates to choose from.
    2586 // import { Fragment } from '@wordpress/element';
    2587 
    2588 var TemplateSelect =
    2589 /*#__PURE__*/
    2590 function (_React$Component) {
    2591   _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(TemplateSelect, _React$Component);
    2592 
    2593   function TemplateSelect(props) {
    2594     var _this;
    2595 
    2596     _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, TemplateSelect);
    2597 
    2598     _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(TemplateSelect).call(this, props));
    2599 
    2600     _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this), "setTemplate", function (template) {
    2601       _this.setState({
    2602         selected: template
    2603       });
    2604     });
    2605 
    2606     _this.state = {
    2607       selected: null
    2608     };
    2609     return _this;
    2610   }
    2611 
    2612   _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(TemplateSelect, [{
    2613     key: "render",
    2614     value: function render() {
    2615       var _this2 = this;
    2616 
    2617       var _this$props = this.props,
    2618           hasInnnerBlocks = _this$props.hasInnnerBlocks,
    2619           allowedBlocks = _this$props.allowedBlocks;
    2620       var selected = this.state.selected;
    2621       var blankTemplate = [['gecko/grid-layout-basic', {
    2622         w: 6
    2623       }]];
    2624 
    2625       if (!hasInnnerBlocks && !selected) {
    2626         return react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", {
    2627           className: "gecko-grid-layout-template-select"
    2628         }, react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("h2", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__["__"])('Choose a Template')), react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__["__"])('This is a starting point. Templates make it easy to choose a layout. Blocks can be changed once they are selected.')), react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", {
    2629           className: "gecko-grid-layout-template-select__templates"
    2630         }, Object(_templates__WEBPACK_IMPORTED_MODULE_10__["default"])().map(function (template, key) {
    2631           return react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", {
    2632             key: key,
    2633             className: "gecko-grid-layout-template-select__template",
    2634             onClick: function onClick() {
    2635               return _this2.setTemplate(template.layout);
    2636             }
    2637           }, react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_template_preview__WEBPACK_IMPORTED_MODULE_11__["default"], {
    2638             layout: template.layout
    2639           }), react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("p", null, template.label));
    2640         }), react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("div", {
    2641           className: "gecko-grid-layout-template-select__template",
    2642           onClick: function onClick() {
    2643             return _this2.setTemplate(blankTemplate);
    2644           }
    2645         }, react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_template_preview__WEBPACK_IMPORTED_MODULE_11__["default"], {
    2646           layout: blankTemplate
    2647         }), react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__["__"])('Create New')))));
    2648       }
    2649 
    2650       return react__WEBPACK_IMPORTED_MODULE_7___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_9__["InnerBlocks"], {
    2651         template: selected,
    2652         templateLock: false,
    2653         allowedBlocks: allowedBlocks
    2654       });
    2655     }
    2656   }]);
    2657 
    2658   return TemplateSelect;
    2659 }(react__WEBPACK_IMPORTED_MODULE_7___default.a.Component);
    2660 
    2661 
    2662 
    2663 /***/ }),
    2664 
    2665 /***/ "./src/templates.js":
    2666 /*!**************************!*\
    2667   !*** ./src/templates.js ***!
    2668   \**************************/
    2669 /*! exports provided: default */
    2670 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    2671 
    2672 "use strict";
    2673 __webpack_require__.r(__webpack_exports__);
    2674 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getTemplates; });
    2675 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    2676 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__);
    2677 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks");
    2678 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__);
    2679 /**
    2680  * WordPress dependencies
    2681  */
    2682 
    2683 
    2684 function getTemplates() {
    2685   var templates = [{
    2686     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('2 Columns'),
    2687     layout: [['gecko/grid-layout-basic', {
    2688       w: 6
    2689     }], ['gecko/grid-layout-basic', {
    2690       w: 6
    2691     }]]
    2692   }, {
    2693     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('3 Columns'),
    2694     layout: [['gecko/grid-layout-basic', {
    2695       w: 4
    2696     }], ['gecko/grid-layout-basic', {
    2697       w: 4
    2698     }], ['gecko/grid-layout-basic', {
    2699       w: 4
    2700     }]]
    2701   }];
    2702   return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__["applyFilters"])('gecko.grid-layout.templates', templates);
    2703 }
    2704 
    2705 /***/ }),
    2706 
    2707 /***/ "@wordpress/blocks":
    2708 /*!***********************************!*\
    2709   !*** external "window.wp.blocks" ***!
    2710   \***********************************/
    2711 /*! no static exports found */
    2712 /***/ (function(module, exports) {
    2713 
    2714 module.exports = window.wp.blocks;
    2715 
    2716 /***/ }),
    2717 
    2718 /***/ "@wordpress/components":
    2719 /*!***************************************!*\
    2720   !*** external "window.wp.components" ***!
    2721   \***************************************/
    2722 /*! no static exports found */
    2723 /***/ (function(module, exports) {
    2724 
    2725 module.exports = window.wp.components;
    2726 
    2727 /***/ }),
    2728 
    2729 /***/ "@wordpress/data":
    2730 /*!*********************************!*\
    2731   !*** external "window.wp.data" ***!
    2732   \*********************************/
    2733 /*! no static exports found */
    2734 /***/ (function(module, exports) {
    2735 
    2736 module.exports = window.wp.data;
    2737 
    2738 /***/ }),
    2739 
    2740 /***/ "@wordpress/editor":
    2741 /*!***********************************!*\
    2742   !*** external "window.wp.editor" ***!
    2743   \***********************************/
    2744 /*! no static exports found */
    2745 /***/ (function(module, exports) {
    2746 
    2747 module.exports = window.wp.editor;
    2748 
    2749 /***/ }),
    2750 
    2751 /***/ "@wordpress/element":
    2752 /*!************************************!*\
    2753   !*** external "window.wp.element" ***!
    2754   \************************************/
    2755 /*! no static exports found */
    2756 /***/ (function(module, exports) {
    2757 
    2758 module.exports = window.wp.element;
    2759 
    2760 /***/ }),
    2761 
    2762 /***/ "@wordpress/hooks":
    2763 /*!**********************************!*\
    2764   !*** external "window.wp.hooks" ***!
    2765   \**********************************/
    2766 /*! no static exports found */
    2767 /***/ (function(module, exports) {
    2768 
    2769 module.exports = window.wp.hooks;
    2770 
    2771 /***/ }),
    2772 
    2773 /***/ "@wordpress/i18n":
    2774 /*!*********************************!*\
    2775   !*** external "window.wp.i18n" ***!
    2776   \*********************************/
    2777 /*! no static exports found */
    2778 /***/ (function(module, exports) {
    2779 
    2780 module.exports = window.wp.i18n;
    2781 
    2782 /***/ }),
    2783 
    2784 /***/ "react":
    2785 /*!************************!*\
    2786   !*** external "React" ***!
    2787   \************************/
    2788 /*! no static exports found */
    2789 /***/ (function(module, exports) {
    2790 
    2791 module.exports = React;
    2792 
    2793 /***/ })
    2794 
    2795 /******/ });
    2796 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90aW55Y29sb3IyL3Rpbnljb2xvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZ3JpZC1sYXlvdXQtYmFzaWMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2dyaWQtbGF5b3V0LWltYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy9ncmlkLWxheW91dC1pdGVtLmpzIiwid2VicGFjazovLy8uL3NyYy9ncmlkLWxheW91dC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlLXByZXZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlLXNlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy53cC5ibG9ja3NcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cud3AuY29tcG9uZW50c1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy53cC5kYXRhXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LndwLmVkaXRvclwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy53cC5lbGVtZW50XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LndwLmhvb2tzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LndwLmkxOG5cIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJSZWFjdFwiIl0sIm5hbWVzIjpbIm5hbWUiLCJzZXR0aW5ncyIsInRpdGxlIiwiX18iLCJwYXJlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJjYXRlZ29yeSIsInN1cHBvcnRzIiwiY2xhc3NOYW1lIiwiaW5zZXJ0ZXIiLCJyZXVzYWJsZSIsImh0bWwiLCJzdHlsZXMiLCJsYWJlbCIsImlzRGVmYXVsdCIsImF0dHJpYnV0ZXMiLCJoIiwidHlwZSIsImRlZmF1bHQiLCJ3IiwidHJhbnNmb3JtcyIsImZyb20iLCJibG9ja3MiLCJ0cmFuc2Zvcm0iLCJpbm5lckJsb2NrcyIsInNlbGVjdGVkIiwic2VsZWN0IiwiZ2V0U2VsZWN0ZWRCbG9jayIsImNyZWF0ZUJsb2NrIiwiZGVwcmVjYXRlZCIsIm1pZ3JhdGUiLCJzYXZlIiwiZWRpdCIsInNldEF0dHJpYnV0ZXMiLCJpbnNlcnRCbG9ja3NBZnRlciIsImdyaWRDb2x1bW5FbmQiLCJncmlkUm93RW5kIiwibmV4dCIsIkFMTE9XRURfQkxPQ0tTIiwibWluSGVpZ2h0IiwiaW1nSWQiLCJpbWdVcmwiLCJiZ01lZGlhIiwiYmdNZWRpYVVybCIsIm1lZGlhSWQiLCJtZWRpYVVybCIsInZhbHVlIiwiaWQiLCJ1cmwiLCJvcGVuIiwidW5kZWZpbmVkIiwib3BhY2l0eSIsImJnQ29sb3IiLCJiZ0NvbG9yU2x1ZyIsImJnQ29sb3JCcmlnaHRuZXNzIiwicGFkZGluZyIsImJhY2tncm91bmRDb2xvciIsImJhY2tncm91bmRJbWFnZSIsImxpZ2h0T3JEYXJrIiwiY3Vyc29yIiwiY29sb3IiLCJnZXRFZGl0b3JTZXR0aW5ncyIsImNvbG9yU2x1ZyIsImdldENvbG9yT2JqZWN0QnlDb2xvclZhbHVlIiwiY29sb3JzIiwic2x1ZyIsImJyaWdodG5lc3MiLCJ0aW55Y29sb3IiLCJnZXRCcmlnaHRuZXNzIiwiYWxpZ24iLCJjbGllbnRJZCIsImJsb2NrIiwiZ2V0QmxvY2tzQnlDbGllbnRJZCIsImhhc0lubmVyQmxvY2tzIiwibGVuZ3RoIiwicmVnaXN0ZXJCbG9ja1R5cGUiLCJncmlkIiwiZ3JpZEl0ZW1CYXNpYyIsImdyaWRJdGVtSW1hZ2UiLCJncmlkSXRlbSIsImpRdWVyeSIsIiQiLCJsaXN0ZW5Gb3JTdHlsZUNoYW5nZXNHcmlkSXRlbSIsImVhY2giLCJvYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJmb3JFYWNoIiwibXV0YXRpb24iLCJmaW5kIiwiYXR0ciIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwiYXR0cmlidXRlRmlsdGVyIiwibGlzdGVuRm9yU3R5bGVDaGFuZ2VzR3JpZCIsInVwZGF0ZVN0eWxlc0dyaWRJdGVtIiwidXBkYXRlU3R5bGVzR3JpZCIsIm9uIiwiZSIsIndpbmRvdyIsImxvYWQiLCJQcmV2aWV3IiwibGF5b3V0IiwicHJvcHMiLCJtYXAiLCJrZXkiLCJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUZW1wbGF0ZVNlbGVjdCIsInRlbXBsYXRlIiwic2V0U3RhdGUiLCJzdGF0ZSIsImhhc0lubm5lckJsb2NrcyIsImFsbG93ZWRCbG9ja3MiLCJibGFua1RlbXBsYXRlIiwidGVtcGxhdGVzIiwic2V0VGVtcGxhdGUiLCJDb21wb25lbnQiLCJnZXRUZW1wbGF0ZXMiLCJhcHBseUZpbHRlcnMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUF5QyxpQ0FBaUM7QUFDMUUsd0hBQWdILG1CQUFtQixFQUFFO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDOzs7Ozs7Ozs7OztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7O0FDTkE7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEI7Ozs7Ozs7Ozs7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7O0FDZkE7QUFDQTtBQUNBO0FB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QSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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RFY7QUFFQ29HLFVBQU0sRUFBRSxDQUNQLENBQUMseUJBQUQsRUFBNEI7QUFDM0JuRixPQUFDLEVBQUU7QUFEd0IsS0FBNUIsQ0FETyxFQUlQLENBQUMseUJBQUQsRUFBNEI7QUFDM0JBLE9BQUMsRUFBRTtBQUR3QixLQUE1QixDQUpPLEVBT1AsQ0FBQyx5QkFBRCxFQUE0QjtBQUMzQkEsT0FBQyxFQUFFO0FBRHdCLEtBQTVCLENBUE87QUFGVCxHQVhpQixDQUFsQjtBQTBCQSxTQUFPb0cscUVBQVksQ0FBQyw2QkFBRCxFQUFnQ0osU0FBaEMsQ0FBbkI7QUFDQSxDOzs7Ozs7Ozs7OztBQ2pDRCxrQzs7Ozs7Ozs7Ozs7QUNBQSxzQzs7Ozs7Ozs7Ozs7QUNBQSxnQzs7Ozs7Ozs7Ozs7QUNBQSxrQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxnQzs7Ozs7Ozs7Ozs7QUNBQSx1QiIsImZpbGUiOiJlZGl0b3IuYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvd3AtY29udGVudC9wbHVnaW5zL2dlY2tvLWdyaWQtbGF5b3V0L2Rpc3QvXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjsiLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCIvLyBUaW55Q29sb3IgdjEuNC4xXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmdyaW5zL1RpbnlDb2xvclxuLy8gQnJpYW4gR3JpbnN0ZWFkLCBNSVQgTGljZW5zZVxuXG4oZnVuY3Rpb24oTWF0aCkge1xuXG52YXIgdHJpbUxlZnQgPSAvXlxccysvLFxuICAgIHRyaW1SaWdodCA9IC9cXHMrJC8sXG4gICAgdGlueUNvdW50ZXIgPSAwLFxuICAgIG1hdGhSb3VuZCA9IE1hdGgucm91bmQsXG4gICAgbWF0aE1pbiA9IE1hdGgubWluLFxuICAgIG1hdGhNYXggPSBNYXRoLm1heCxcbiAgICBtYXRoUmFuZG9tID0gTWF0aC5yYW5kb207XG5cbmZ1bmN0aW9uIHRpbnljb2xvciAoY29sb3IsIG9wdHMpIHtcblxuICAgIGNvbG9yID0gKGNvbG9yKSA/IGNvbG9yIDogJyc7XG4gICAgb3B0cyA9IG9wdHMgfHwgeyB9O1xuXG4gICAgLy8gSWYgaW5wdXQgaXMgYWxyZWFkeSBhIHRpbnljb2xvciwgcmV0dXJuIGl0c2VsZlxuICAgIGlmIChjb2xvciBpbnN0YW5jZW9mIHRpbnljb2xvcikge1xuICAgICAgIHJldHVybiBjb2xvcjtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBjYWxsIHVzaW5nIG5ldyBpbnN0ZWFkXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIHRpbnljb2xvcikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB0aW55Y29sb3IoY29sb3IsIG9wdHMpO1xuICAgIH1cblxuICAgIHZhciByZ2IgPSBpbnB1dFRvUkdCKGNvbG9yKTtcbiAgICB0aGlzLl9vcmlnaW5hbElucHV0ID0gY29sb3IsXG4gICAgdGhpcy5fciA9IHJnYi5yLFxuICAgIHRoaXMuX2cgPSByZ2IuZyxcbiAgICB0aGlzLl9iID0gcmdiLmIsXG4gICAgdGhpcy5fYSA9IHJnYi5hLFxuICAgIHRoaXMuX3JvdW5kQSA9IG1hdGhSb3VuZCgxMDAqdGhpcy5fYSkgLyAxMDAsXG4gICAgdGhpcy5fZm9ybWF0ID0gb3B0cy5mb3JtYXQgfHwgcmdiLmZvcm1hdDtcbiAgICB0aGlzLl9ncmFkaWVudFR5cGUgPSBvcHRzLmdyYWRpZW50VHlwZTtcblxuICAgIC8vIERvbid0IGxldCB0aGUgcmFuZ2Ugb2YgWzAsMjU1XSBjb21lIGJhY2sgaW4gWzAsMV0uXG4gICAgLy8gUG90ZW50aWFsbHkgbG9zZSBhIGxpdHRsZSBiaXQgb2YgcHJlY2lzaW9uIGhlcmUsIGJ1dCB3aWxsIGZpeCBpc3N1ZXMgd2hlcmVcbiAgICAvLyAuNSBnZXRzIGludGVycHJldGVkIGFzIGhhbGYgb2YgdGhlIHRvdGFsLCBpbnN0ZWFkIG9mIGhhbGYgb2YgMVxuICAgIC8vIElmIGl0IHdhcyBzdXBwb3NlZCB0byBiZSAxMjgsIHRoaXMgd2FzIGFscmVhZHkgdGFrZW4gY2FyZSBvZiBieSBgaW5wdXRUb1JnYmBcbiAgICBpZiAodGhpcy5fciA8IDEpIHsgdGhpcy5fciA9IG1hdGhSb3VuZCh0aGlzLl9yKTsgfVxuICAgIGlmICh0aGlzLl9nIDwgMSkgeyB0aGlzLl9nID0gbWF0aFJvdW5kKHRoaXMuX2cpOyB9XG4gICAgaWYgKHRoaXMuX2IgPCAxKSB7IHRoaXMuX2IgPSBtYXRoUm91bmQodGhpcy5fYik7IH1cblxuICAgIHRoaXMuX29rID0gcmdiLm9rO1xuICAgIHRoaXMuX3RjX2lkID0gdGlueUNvdW50ZXIrKztcbn1cblxudGlueWNvbG9yLnByb3RvdHlwZSA9IHtcbiAgICBpc0Rhcms6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCkgPCAxMjg7XG4gICAgfSxcbiAgICBpc0xpZ2h0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzRGFyaygpO1xuICAgIH0sXG4gICAgaXNWYWxpZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vaztcbiAgICB9LFxuICAgIGdldE9yaWdpbmFsSW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXQ7XG4gICAgfSxcbiAgICBnZXRGb3JtYXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0O1xuICAgIH0sXG4gICAgZ2V0QWxwaGE6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYTtcbiAgICB9LFxuICAgIGdldEJyaWdodG5lc3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvL2h0dHA6Ly93d3cudzMub3JnL1RSL0FFUlQjY29sb3ItY29udHJhc3RcbiAgICAgICAgdmFyIHJnYiA9IHRoaXMudG9SZ2IoKTtcbiAgICAgICAgcmV0dXJuIChyZ2IuciAqIDI5OSArIHJnYi5nICogNTg3ICsgcmdiLmIgKiAxMTQpIC8gMTAwMDtcbiAgICB9LFxuICAgIGdldEx1bWluYW5jZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNyZWxhdGl2ZWx1bWluYW5jZWRlZlxuICAgICAgICB2YXIgcmdiID0gdGhpcy50b1JnYigpO1xuICAgICAgICB2YXIgUnNSR0IsIEdzUkdCLCBCc1JHQiwgUiwgRywgQjtcbiAgICAgICAgUnNSR0IgPSByZ2Iuci8yNTU7XG4gICAgICAgIEdzUkdCID0gcmdiLmcvMjU1O1xuICAgICAgICBCc1JHQiA9IHJnYi5iLzI1NTtcblxuICAgICAgICBpZiAoUnNSR0IgPD0gMC4wMzkyOCkge1IgPSBSc1JHQiAvIDEyLjkyO30gZWxzZSB7UiA9IE1hdGgucG93KCgoUnNSR0IgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCk7fVxuICAgICAgICBpZiAoR3NSR0IgPD0gMC4wMzkyOCkge0cgPSBHc1JHQiAvIDEyLjkyO30gZWxzZSB7RyA9IE1hdGgucG93KCgoR3NSR0IgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCk7fVxuICAgICAgICBpZiAoQnNSR0IgPD0gMC4wMzkyOCkge0IgPSBCc1JHQiAvIDEyLjkyO30gZWxzZSB7QiA9IE1hdGgucG93KCgoQnNSR0IgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCk7fVxuICAgICAgICByZXR1cm4gKDAuMjEyNiAqIFIpICsgKDAuNzE1MiAqIEcpICsgKDAuMDcyMiAqIEIpO1xuICAgIH0sXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2EgPSBib3VuZEFscGhhKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fcm91bmRBID0gbWF0aFJvdW5kKDEwMCp0aGlzLl9hKSAvIDEwMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICB0b0hzdjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoc3YgPSByZ2JUb0hzdih0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICAgICAgcmV0dXJuIHsgaDogaHN2LmggKiAzNjAsIHM6IGhzdi5zLCB2OiBoc3YudiwgYTogdGhpcy5fYSB9O1xuICAgIH0sXG4gICAgdG9Ic3ZTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaHN2ID0gcmdiVG9Ic3YodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgICAgIHZhciBoID0gbWF0aFJvdW5kKGhzdi5oICogMzYwKSwgcyA9IG1hdGhSb3VuZChoc3YucyAqIDEwMCksIHYgPSBtYXRoUm91bmQoaHN2LnYgKiAxMDApO1xuICAgICAgICByZXR1cm4gKHRoaXMuX2EgPT0gMSkgP1xuICAgICAgICAgIFwiaHN2KFwiICArIGggKyBcIiwgXCIgKyBzICsgXCIlLCBcIiArIHYgKyBcIiUpXCIgOlxuICAgICAgICAgIFwiaHN2YShcIiArIGggKyBcIiwgXCIgKyBzICsgXCIlLCBcIiArIHYgKyBcIiUsIFwiKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgICB9LFxuICAgIHRvSHNsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhzbCA9IHJnYlRvSHNsKHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IpO1xuICAgICAgICByZXR1cm4geyBoOiBoc2wuaCAqIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sLCBhOiB0aGlzLl9hIH07XG4gICAgfSxcbiAgICB0b0hzbFN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoc2wgPSByZ2JUb0hzbCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICAgICAgdmFyIGggPSBtYXRoUm91bmQoaHNsLmggKiAzNjApLCBzID0gbWF0aFJvdW5kKGhzbC5zICogMTAwKSwgbCA9IG1hdGhSb3VuZChoc2wubCAqIDEwMCk7XG4gICAgICAgIHJldHVybiAodGhpcy5fYSA9PSAxKSA/XG4gICAgICAgICAgXCJoc2woXCIgICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgbCArIFwiJSlcIiA6XG4gICAgICAgICAgXCJoc2xhKFwiICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgbCArIFwiJSwgXCIrIHRoaXMuX3JvdW5kQSArIFwiKVwiO1xuICAgIH0sXG4gICAgdG9IZXg6IGZ1bmN0aW9uKGFsbG93M0NoYXIpIHtcbiAgICAgICAgcmV0dXJuIHJnYlRvSGV4KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IsIGFsbG93M0NoYXIpO1xuICAgIH0sXG4gICAgdG9IZXhTdHJpbmc6IGZ1bmN0aW9uKGFsbG93M0NoYXIpIHtcbiAgICAgICAgcmV0dXJuICcjJyArIHRoaXMudG9IZXgoYWxsb3czQ2hhcik7XG4gICAgfSxcbiAgICB0b0hleDg6IGZ1bmN0aW9uKGFsbG93NENoYXIpIHtcbiAgICAgICAgcmV0dXJuIHJnYmFUb0hleCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iLCB0aGlzLl9hLCBhbGxvdzRDaGFyKTtcbiAgICB9LFxuICAgIHRvSGV4OFN0cmluZzogZnVuY3Rpb24oYWxsb3c0Q2hhcikge1xuICAgICAgICByZXR1cm4gJyMnICsgdGhpcy50b0hleDgoYWxsb3c0Q2hhcik7XG4gICAgfSxcbiAgICB0b1JnYjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGhSb3VuZCh0aGlzLl9yKSwgZzogbWF0aFJvdW5kKHRoaXMuX2cpLCBiOiBtYXRoUm91bmQodGhpcy5fYiksIGE6IHRoaXMuX2EgfTtcbiAgICB9LFxuICAgIHRvUmdiU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9hID09IDEpID9cbiAgICAgICAgICBcInJnYihcIiAgKyBtYXRoUm91bmQodGhpcy5fcikgKyBcIiwgXCIgKyBtYXRoUm91bmQodGhpcy5fZykgKyBcIiwgXCIgKyBtYXRoUm91bmQodGhpcy5fYikgKyBcIilcIiA6XG4gICAgICAgICAgXCJyZ2JhKFwiICsgbWF0aFJvdW5kKHRoaXMuX3IpICsgXCIsIFwiICsgbWF0aFJvdW5kKHRoaXMuX2cpICsgXCIsIFwiICsgbWF0aFJvdW5kKHRoaXMuX2IpICsgXCIsIFwiICsgdGhpcy5fcm91bmRBICsgXCIpXCI7XG4gICAgfSxcbiAgICB0b1BlcmNlbnRhZ2VSZ2I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4geyByOiBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9yLCAyNTUpICogMTAwKSArIFwiJVwiLCBnOiBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9nLCAyNTUpICogMTAwKSArIFwiJVwiLCBiOiBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9iLCAyNTUpICogMTAwKSArIFwiJVwiLCBhOiB0aGlzLl9hIH07XG4gICAgfSxcbiAgICB0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2EgPT0gMSkgP1xuICAgICAgICAgIFwicmdiKFwiICArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX3IsIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2csIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2IsIDI1NSkgKiAxMDApICsgXCIlKVwiIDpcbiAgICAgICAgICBcInJnYmEoXCIgKyBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9yLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9nLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyBtYXRoUm91bmQoYm91bmQwMSh0aGlzLl9iLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgICB9LFxuICAgIHRvTmFtZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9hID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2EgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaGV4TmFtZXNbcmdiVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgdHJ1ZSldIHx8IGZhbHNlO1xuICAgIH0sXG4gICAgdG9GaWx0ZXI6IGZ1bmN0aW9uKHNlY29uZENvbG9yKSB7XG4gICAgICAgIHZhciBoZXg4U3RyaW5nID0gJyMnICsgcmdiYVRvQXJnYkhleCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iLCB0aGlzLl9hKTtcbiAgICAgICAgdmFyIHNlY29uZEhleDhTdHJpbmcgPSBoZXg4U3RyaW5nO1xuICAgICAgICB2YXIgZ3JhZGllbnRUeXBlID0gdGhpcy5fZ3JhZGllbnRUeXBlID8gXCJHcmFkaWVudFR5cGUgPSAxLCBcIiA6IFwiXCI7XG5cbiAgICAgICAgaWYgKHNlY29uZENvbG9yKSB7XG4gICAgICAgICAgICB2YXIgcyA9IHRpbnljb2xvcihzZWNvbmRDb2xvcik7XG4gICAgICAgICAgICBzZWNvbmRIZXg4U3RyaW5nID0gJyMnICsgcmdiYVRvQXJnYkhleChzLl9yLCBzLl9nLCBzLl9iLCBzLl9hKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChcIitncmFkaWVudFR5cGUrXCJzdGFydENvbG9yc3RyPVwiK2hleDhTdHJpbmcrXCIsZW5kQ29sb3JzdHI9XCIrc2Vjb25kSGV4OFN0cmluZytcIilcIjtcbiAgICB9LFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdFNldCA9ICEhZm9ybWF0O1xuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgdGhpcy5fZm9ybWF0O1xuXG4gICAgICAgIHZhciBmb3JtYXR0ZWRTdHJpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGhhc0FscGhhID0gdGhpcy5fYSA8IDEgJiYgdGhpcy5fYSA+PSAwO1xuICAgICAgICB2YXIgbmVlZHNBbHBoYUZvcm1hdCA9ICFmb3JtYXRTZXQgJiYgaGFzQWxwaGEgJiYgKGZvcm1hdCA9PT0gXCJoZXhcIiB8fCBmb3JtYXQgPT09IFwiaGV4NlwiIHx8IGZvcm1hdCA9PT0gXCJoZXgzXCIgfHwgZm9ybWF0ID09PSBcImhleDRcIiB8fCBmb3JtYXQgPT09IFwiaGV4OFwiIHx8IGZvcm1hdCA9PT0gXCJuYW1lXCIpO1xuXG4gICAgICAgIGlmIChuZWVkc0FscGhhRm9ybWF0KSB7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIFwidHJhbnNwYXJlbnRcIiwgYWxsIG90aGVyIG5vbi1hbHBoYSBmb3JtYXRzXG4gICAgICAgICAgICAvLyB3aWxsIHJldHVybiByZ2JhIHdoZW4gdGhlcmUgaXMgdHJhbnNwYXJlbmN5LlxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJuYW1lXCIgJiYgdGhpcy5fYSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvTmFtZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9SZ2JTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInJnYlwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvUmdiU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJwcmdiXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoZXhcIiB8fCBmb3JtYXQgPT09IFwiaGV4NlwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvSGV4U3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoZXgzXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXhTdHJpbmcodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoZXg0XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXg4U3RyaW5nKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiaGV4OFwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvSGV4OFN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwibmFtZVwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvTmFtZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiaHNsXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9Ic2xTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhzdlwiKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmcgPSB0aGlzLnRvSHN2U3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkU3RyaW5nIHx8IHRoaXMudG9IZXhTdHJpbmcoKTtcbiAgICB9LFxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRpbnljb2xvcih0aGlzLnRvU3RyaW5nKCkpO1xuICAgIH0sXG5cbiAgICBfYXBwbHlNb2RpZmljYXRpb246IGZ1bmN0aW9uKGZuLCBhcmdzKSB7XG4gICAgICAgIHZhciBjb2xvciA9IGZuLmFwcGx5KG51bGwsIFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmdzKSkpO1xuICAgICAgICB0aGlzLl9yID0gY29sb3IuX3I7XG4gICAgICAgIHRoaXMuX2cgPSBjb2xvci5fZztcbiAgICAgICAgdGhpcy5fYiA9IGNvbG9yLl9iO1xuICAgICAgICB0aGlzLnNldEFscGhhKGNvbG9yLl9hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBsaWdodGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGxpZ2h0ZW4sIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBicmlnaHRlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihicmlnaHRlbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGRhcmtlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkYXJrZW4sIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBkZXNhdHVyYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGRlc2F0dXJhdGUsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBzYXR1cmF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihzYXR1cmF0ZSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGdyZXlzY2FsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihncmV5c2NhbGUsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBzcGluOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHNwaW4sIGFyZ3VtZW50cyk7XG4gICAgfSxcblxuICAgIF9hcHBseUNvbWJpbmF0aW9uOiBmdW5jdGlvbihmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBhbmFsb2dvdXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihhbmFsb2dvdXMsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBjb21wbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oY29tcGxlbWVudCwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1vbm9jaHJvbWF0aWM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihtb25vY2hyb21hdGljLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgc3BsaXRjb21wbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oc3BsaXRjb21wbGVtZW50LCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgdHJpYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih0cmlhZCwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHRldHJhZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHRldHJhZCwgYXJndW1lbnRzKTtcbiAgICB9XG59O1xuXG4vLyBJZiBpbnB1dCBpcyBhbiBvYmplY3QsIGZvcmNlIDEgaW50byBcIjEuMFwiIHRvIGhhbmRsZSByYXRpb3MgcHJvcGVybHlcbi8vIFN0cmluZyBpbnB1dCByZXF1aXJlcyBcIjEuMFwiIGFzIGlucHV0LCBzbyAxIHdpbGwgYmUgdHJlYXRlZCBhcyAxXG50aW55Y29sb3IuZnJvbVJhdGlvID0gZnVuY3Rpb24oY29sb3IsIG9wdHMpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdmFyIG5ld0NvbG9yID0ge307XG4gICAgICAgIGZvciAodmFyIGkgaW4gY29sb3IpIHtcbiAgICAgICAgICAgIGlmIChjb2xvci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSBcImFcIikge1xuICAgICAgICAgICAgICAgICAgICBuZXdDb2xvcltpXSA9IGNvbG9yW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29sb3JbaV0gPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29sb3IgPSBuZXdDb2xvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGlueWNvbG9yKGNvbG9yLCBvcHRzKTtcbn07XG5cbi8vIEdpdmVuIGEgc3RyaW5nIG9yIG9iamVjdCwgY29udmVydCB0aGF0IGlucHV0IHRvIFJHQlxuLy8gUG9zc2libGUgc3RyaW5nIGlucHV0czpcbi8vXG4vLyAgICAgXCJyZWRcIlxuLy8gICAgIFwiI2YwMFwiIG9yIFwiZjAwXCJcbi8vICAgICBcIiNmZjAwMDBcIiBvciBcImZmMDAwMFwiXG4vLyAgICAgXCIjZmYwMDAwMDBcIiBvciBcImZmMDAwMDAwXCJcbi8vICAgICBcInJnYiAyNTUgMCAwXCIgb3IgXCJyZ2IgKDI1NSwgMCwgMClcIlxuLy8gICAgIFwicmdiIDEuMCAwIDBcIiBvciBcInJnYiAoMSwgMCwgMClcIlxuLy8gICAgIFwicmdiYSAoMjU1LCAwLCAwLCAxKVwiIG9yIFwicmdiYSAyNTUsIDAsIDAsIDFcIlxuLy8gICAgIFwicmdiYSAoMS4wLCAwLCAwLCAxKVwiIG9yIFwicmdiYSAxLjAsIDAsIDAsIDFcIlxuLy8gICAgIFwiaHNsKDAsIDEwMCUsIDUwJSlcIiBvciBcImhzbCAwIDEwMCUgNTAlXCJcbi8vICAgICBcImhzbGEoMCwgMTAwJSwgNTAlLCAxKVwiIG9yIFwiaHNsYSAwIDEwMCUgNTAlLCAxXCJcbi8vICAgICBcImhzdigwLCAxMDAlLCAxMDAlKVwiIG9yIFwiaHN2IDAgMTAwJSAxMDAlXCJcbi8vXG5mdW5jdGlvbiBpbnB1dFRvUkdCKGNvbG9yKSB7XG5cbiAgICB2YXIgcmdiID0geyByOiAwLCBnOiAwLCBiOiAwIH07XG4gICAgdmFyIGEgPSAxO1xuICAgIHZhciBzID0gbnVsbDtcbiAgICB2YXIgdiA9IG51bGw7XG4gICAgdmFyIGwgPSBudWxsO1xuICAgIHZhciBvayA9IGZhbHNlO1xuICAgIHZhciBmb3JtYXQgPSBmYWxzZTtcblxuICAgIGlmICh0eXBlb2YgY29sb3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb2xvciA9IHN0cmluZ0lucHV0VG9PYmplY3QoY29sb3IpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sb3IgPT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IucikgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IuZykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IuYikpIHtcbiAgICAgICAgICAgIHJnYiA9IHJnYlRvUmdiKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuICAgICAgICAgICAgb2sgPSB0cnVlO1xuICAgICAgICAgICAgZm9ybWF0ID0gU3RyaW5nKGNvbG9yLnIpLnN1YnN0cigtMSkgPT09IFwiJVwiID8gXCJwcmdiXCIgOiBcInJnYlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVmFsaWRDU1NVbml0KGNvbG9yLmgpICYmIGlzVmFsaWRDU1NVbml0KGNvbG9yLnMpICYmIGlzVmFsaWRDU1NVbml0KGNvbG9yLnYpKSB7XG4gICAgICAgICAgICBzID0gY29udmVydFRvUGVyY2VudGFnZShjb2xvci5zKTtcbiAgICAgICAgICAgIHYgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLnYpO1xuICAgICAgICAgICAgcmdiID0gaHN2VG9SZ2IoY29sb3IuaCwgcywgdik7XG4gICAgICAgICAgICBvayA9IHRydWU7XG4gICAgICAgICAgICBmb3JtYXQgPSBcImhzdlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVmFsaWRDU1NVbml0KGNvbG9yLmgpICYmIGlzVmFsaWRDU1NVbml0KGNvbG9yLnMpICYmIGlzVmFsaWRDU1NVbml0KGNvbG9yLmwpKSB7XG4gICAgICAgICAgICBzID0gY29udmVydFRvUGVyY2VudGFnZShjb2xvci5zKTtcbiAgICAgICAgICAgIGwgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLmwpO1xuICAgICAgICAgICAgcmdiID0gaHNsVG9SZ2IoY29sb3IuaCwgcywgbCk7XG4gICAgICAgICAgICBvayA9IHRydWU7XG4gICAgICAgICAgICBmb3JtYXQgPSBcImhzbFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbG9yLmhhc093blByb3BlcnR5KFwiYVwiKSkge1xuICAgICAgICAgICAgYSA9IGNvbG9yLmE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhID0gYm91bmRBbHBoYShhKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG9rOiBvayxcbiAgICAgICAgZm9ybWF0OiBjb2xvci5mb3JtYXQgfHwgZm9ybWF0LFxuICAgICAgICByOiBtYXRoTWluKDI1NSwgbWF0aE1heChyZ2IuciwgMCkpLFxuICAgICAgICBnOiBtYXRoTWluKDI1NSwgbWF0aE1heChyZ2IuZywgMCkpLFxuICAgICAgICBiOiBtYXRoTWluKDI1NSwgbWF0aE1heChyZ2IuYiwgMCkpLFxuICAgICAgICBhOiBhXG4gICAgfTtcbn1cblxuXG4vLyBDb252ZXJzaW9uIEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gYHJnYlRvSHNsYCwgYHJnYlRvSHN2YCwgYGhzbFRvUmdiYCwgYGhzdlRvUmdiYCBtb2RpZmllZCBmcm9tOlxuLy8gPGh0dHA6Ly9tamlqYWNrc29uLmNvbS8yMDA4LzAyL3JnYi10by1oc2wtYW5kLXJnYi10by1oc3YtY29sb3ItbW9kZWwtY29udmVyc2lvbi1hbGdvcml0aG1zLWluLWphdmFzY3JpcHQ+XG5cbi8vIGByZ2JUb1JnYmBcbi8vIEhhbmRsZSBib3VuZHMgLyBwZXJjZW50YWdlIGNoZWNraW5nIHRvIGNvbmZvcm0gdG8gQ1NTIGNvbG9yIHNwZWNcbi8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLz5cbi8vICpBc3N1bWVzOiogciwgZywgYiBpbiBbMCwgMjU1XSBvciBbMCwgMV1cbi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gWzAsIDI1NV1cbmZ1bmN0aW9uIHJnYlRvUmdiKHIsIGcsIGIpe1xuICAgIHJldHVybiB7XG4gICAgICAgIHI6IGJvdW5kMDEociwgMjU1KSAqIDI1NSxcbiAgICAgICAgZzogYm91bmQwMShnLCAyNTUpICogMjU1LFxuICAgICAgICBiOiBib3VuZDAxKGIsIDI1NSkgKiAyNTVcbiAgICB9O1xufVxuXG4vLyBgcmdiVG9Ic2xgXG4vLyBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNMLlxuLy8gKkFzc3VtZXM6KiByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIFswLCAyNTVdIG9yIFswLCAxXVxuLy8gKlJldHVybnM6KiB7IGgsIHMsIGwgfSBpbiBbMCwxXVxuZnVuY3Rpb24gcmdiVG9Ic2wociwgZywgYikge1xuXG4gICAgciA9IGJvdW5kMDEociwgMjU1KTtcbiAgICBnID0gYm91bmQwMShnLCAyNTUpO1xuICAgIGIgPSBib3VuZDAxKGIsIDI1NSk7XG5cbiAgICB2YXIgbWF4ID0gbWF0aE1heChyLCBnLCBiKSwgbWluID0gbWF0aE1pbihyLCBnLCBiKTtcbiAgICB2YXIgaCwgcywgbCA9IChtYXggKyBtaW4pIC8gMjtcblxuICAgIGlmKG1heCA9PSBtaW4pIHtcbiAgICAgICAgaCA9IHMgPSAwOyAvLyBhY2hyb21hdGljXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgZCA9IG1heCAtIG1pbjtcbiAgICAgICAgcyA9IGwgPiAwLjUgPyBkIC8gKDIgLSBtYXggLSBtaW4pIDogZCAvIChtYXggKyBtaW4pO1xuICAgICAgICBzd2l0Y2gobWF4KSB7XG4gICAgICAgICAgICBjYXNlIHI6IGggPSAoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKTsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGc6IGggPSAoYiAtIHIpIC8gZCArIDI7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBiOiBoID0gKHIgLSBnKSAvIGQgKyA0OyBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGggLz0gNjtcbiAgICB9XG5cbiAgICByZXR1cm4geyBoOiBoLCBzOiBzLCBsOiBsIH07XG59XG5cbi8vIGBoc2xUb1JnYmBcbi8vIENvbnZlcnRzIGFuIEhTTCBjb2xvciB2YWx1ZSB0byBSR0IuXG4vLyAqQXNzdW1lczoqIGggaXMgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMzYwXSBhbmQgcyBhbmQgbCBhcmUgY29udGFpbmVkIFswLCAxXSBvciBbMCwgMTAwXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiB0aGUgc2V0IFswLCAyNTVdXG5mdW5jdGlvbiBoc2xUb1JnYihoLCBzLCBsKSB7XG4gICAgdmFyIHIsIGcsIGI7XG5cbiAgICBoID0gYm91bmQwMShoLCAzNjApO1xuICAgIHMgPSBib3VuZDAxKHMsIDEwMCk7XG4gICAgbCA9IGJvdW5kMDEobCwgMTAwKTtcblxuICAgIGZ1bmN0aW9uIGh1ZTJyZ2IocCwgcSwgdCkge1xuICAgICAgICBpZih0IDwgMCkgdCArPSAxO1xuICAgICAgICBpZih0ID4gMSkgdCAtPSAxO1xuICAgICAgICBpZih0IDwgMS82KSByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcbiAgICAgICAgaWYodCA8IDEvMikgcmV0dXJuIHE7XG4gICAgICAgIGlmKHQgPCAyLzMpIHJldHVybiBwICsgKHEgLSBwKSAqICgyLzMgLSB0KSAqIDY7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cblxuICAgIGlmKHMgPT09IDApIHtcbiAgICAgICAgciA9IGcgPSBiID0gbDsgLy8gYWNocm9tYXRpY1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuICAgICAgICB2YXIgcCA9IDIgKiBsIC0gcTtcbiAgICAgICAgciA9IGh1ZTJyZ2IocCwgcSwgaCArIDEvMyk7XG4gICAgICAgIGcgPSBodWUycmdiKHAsIHEsIGgpO1xuICAgICAgICBiID0gaHVlMnJnYihwLCBxLCBoIC0gMS8zKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByOiByICogMjU1LCBnOiBnICogMjU1LCBiOiBiICogMjU1IH07XG59XG5cbi8vIGByZ2JUb0hzdmBcbi8vIENvbnZlcnRzIGFuIFJHQiBjb2xvciB2YWx1ZSB0byBIU1Zcbi8vICpBc3N1bWVzOiogciwgZywgYW5kIGIgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAyNTVdIG9yIFswLCAxXVxuLy8gKlJldHVybnM6KiB7IGgsIHMsIHYgfSBpbiBbMCwxXVxuZnVuY3Rpb24gcmdiVG9Ic3YociwgZywgYikge1xuXG4gICAgciA9IGJvdW5kMDEociwgMjU1KTtcbiAgICBnID0gYm91bmQwMShnLCAyNTUpO1xuICAgIGIgPSBib3VuZDAxKGIsIDI1NSk7XG5cbiAgICB2YXIgbWF4ID0gbWF0aE1heChyLCBnLCBiKSwgbWluID0gbWF0aE1pbihyLCBnLCBiKTtcbiAgICB2YXIgaCwgcywgdiA9IG1heDtcblxuICAgIHZhciBkID0gbWF4IC0gbWluO1xuICAgIHMgPSBtYXggPT09IDAgPyAwIDogZCAvIG1heDtcblxuICAgIGlmKG1heCA9PSBtaW4pIHtcbiAgICAgICAgaCA9IDA7IC8vIGFjaHJvbWF0aWNcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN3aXRjaChtYXgpIHtcbiAgICAgICAgICAgIGNhc2UgcjogaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgZzogaCA9IChiIC0gcikgLyBkICsgMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGI6IGggPSAociAtIGcpIC8gZCArIDQ7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGggLz0gNjtcbiAgICB9XG4gICAgcmV0dXJuIHsgaDogaCwgczogcywgdjogdiB9O1xufVxuXG4vLyBgaHN2VG9SZ2JgXG4vLyBDb252ZXJ0cyBhbiBIU1YgY29sb3IgdmFsdWUgdG8gUkdCLlxuLy8gKkFzc3VtZXM6KiBoIGlzIGNvbnRhaW5lZCBpbiBbMCwgMV0gb3IgWzAsIDM2MF0gYW5kIHMgYW5kIHYgYXJlIGNvbnRhaW5lZCBpbiBbMCwgMV0gb3IgWzAsIDEwMF1cbi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gdGhlIHNldCBbMCwgMjU1XVxuIGZ1bmN0aW9uIGhzdlRvUmdiKGgsIHMsIHYpIHtcblxuICAgIGggPSBib3VuZDAxKGgsIDM2MCkgKiA2O1xuICAgIHMgPSBib3VuZDAxKHMsIDEwMCk7XG4gICAgdiA9IGJvdW5kMDEodiwgMTAwKTtcblxuICAgIHZhciBpID0gTWF0aC5mbG9vcihoKSxcbiAgICAgICAgZiA9IGggLSBpLFxuICAgICAgICBwID0gdiAqICgxIC0gcyksXG4gICAgICAgIHEgPSB2ICogKDEgLSBmICogcyksXG4gICAgICAgIHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyksXG4gICAgICAgIG1vZCA9IGkgJSA2LFxuICAgICAgICByID0gW3YsIHEsIHAsIHAsIHQsIHZdW21vZF0sXG4gICAgICAgIGcgPSBbdCwgdiwgdiwgcSwgcCwgcF1bbW9kXSxcbiAgICAgICAgYiA9IFtwLCBwLCB0LCB2LCB2LCBxXVttb2RdO1xuXG4gICAgcmV0dXJuIHsgcjogciAqIDI1NSwgZzogZyAqIDI1NSwgYjogYiAqIDI1NSB9O1xufVxuXG4vLyBgcmdiVG9IZXhgXG4vLyBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdG8gaGV4XG4vLyBBc3N1bWVzIHIsIGcsIGFuZCBiIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMjU1XVxuLy8gUmV0dXJucyBhIDMgb3IgNiBjaGFyYWN0ZXIgaGV4XG5mdW5jdGlvbiByZ2JUb0hleChyLCBnLCBiLCBhbGxvdzNDaGFyKSB7XG5cbiAgICB2YXIgaGV4ID0gW1xuICAgICAgICBwYWQyKG1hdGhSb3VuZChyKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChnKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChiKS50b1N0cmluZygxNikpXG4gICAgXTtcblxuICAgIC8vIFJldHVybiBhIDMgY2hhcmFjdGVyIGhleCBpZiBwb3NzaWJsZVxuICAgIGlmIChhbGxvdzNDaGFyICYmIGhleFswXS5jaGFyQXQoMCkgPT0gaGV4WzBdLmNoYXJBdCgxKSAmJiBoZXhbMV0uY2hhckF0KDApID09IGhleFsxXS5jaGFyQXQoMSkgJiYgaGV4WzJdLmNoYXJBdCgwKSA9PSBoZXhbMl0uY2hhckF0KDEpKSB7XG4gICAgICAgIHJldHVybiBoZXhbMF0uY2hhckF0KDApICsgaGV4WzFdLmNoYXJBdCgwKSArIGhleFsyXS5jaGFyQXQoMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhleC5qb2luKFwiXCIpO1xufVxuXG4vLyBgcmdiYVRvSGV4YFxuLy8gQ29udmVydHMgYW4gUkdCQSBjb2xvciBwbHVzIGFscGhhIHRyYW5zcGFyZW5jeSB0byBoZXhcbi8vIEFzc3VtZXMgciwgZywgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gYW5kXG4vLyBhIGluIFswLCAxXS4gUmV0dXJucyBhIDQgb3IgOCBjaGFyYWN0ZXIgcmdiYSBoZXhcbmZ1bmN0aW9uIHJnYmFUb0hleChyLCBnLCBiLCBhLCBhbGxvdzRDaGFyKSB7XG5cbiAgICB2YXIgaGV4ID0gW1xuICAgICAgICBwYWQyKG1hdGhSb3VuZChyKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChnKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChiKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKGNvbnZlcnREZWNpbWFsVG9IZXgoYSkpXG4gICAgXTtcblxuICAgIC8vIFJldHVybiBhIDQgY2hhcmFjdGVyIGhleCBpZiBwb3NzaWJsZVxuICAgIGlmIChhbGxvdzRDaGFyICYmIGhleFswXS5jaGFyQXQoMCkgPT0gaGV4WzBdLmNoYXJBdCgxKSAmJiBoZXhbMV0uY2hhckF0KDApID09IGhleFsxXS5jaGFyQXQoMSkgJiYgaGV4WzJdLmNoYXJBdCgwKSA9PSBoZXhbMl0uY2hhckF0KDEpICYmIGhleFszXS5jaGFyQXQoMCkgPT0gaGV4WzNdLmNoYXJBdCgxKSkge1xuICAgICAgICByZXR1cm4gaGV4WzBdLmNoYXJBdCgwKSArIGhleFsxXS5jaGFyQXQoMCkgKyBoZXhbMl0uY2hhckF0KDApICsgaGV4WzNdLmNoYXJBdCgwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGV4LmpvaW4oXCJcIik7XG59XG5cbi8vIGByZ2JhVG9BcmdiSGV4YFxuLy8gQ29udmVydHMgYW4gUkdCQSBjb2xvciB0byBhbiBBUkdCIEhleDggc3RyaW5nXG4vLyBSYXJlbHkgdXNlZCwgYnV0IHJlcXVpcmVkIGZvciBcInRvRmlsdGVyKClcIlxuZnVuY3Rpb24gcmdiYVRvQXJnYkhleChyLCBnLCBiLCBhKSB7XG5cbiAgICB2YXIgaGV4ID0gW1xuICAgICAgICBwYWQyKGNvbnZlcnREZWNpbWFsVG9IZXgoYSkpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChyKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChnKS50b1N0cmluZygxNikpLFxuICAgICAgICBwYWQyKG1hdGhSb3VuZChiKS50b1N0cmluZygxNikpXG4gICAgXTtcblxuICAgIHJldHVybiBoZXguam9pbihcIlwiKTtcbn1cblxuLy8gYGVxdWFsc2Bcbi8vIENhbiBiZSBjYWxsZWQgd2l0aCBhbnkgdGlueWNvbG9yIGlucHV0XG50aW55Y29sb3IuZXF1YWxzID0gZnVuY3Rpb24gKGNvbG9yMSwgY29sb3IyKSB7XG4gICAgaWYgKCFjb2xvcjEgfHwgIWNvbG9yMikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICByZXR1cm4gdGlueWNvbG9yKGNvbG9yMSkudG9SZ2JTdHJpbmcoKSA9PSB0aW55Y29sb3IoY29sb3IyKS50b1JnYlN0cmluZygpO1xufTtcblxudGlueWNvbG9yLnJhbmRvbSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aW55Y29sb3IuZnJvbVJhdGlvKHtcbiAgICAgICAgcjogbWF0aFJhbmRvbSgpLFxuICAgICAgICBnOiBtYXRoUmFuZG9tKCksXG4gICAgICAgIGI6IG1hdGhSYW5kb20oKVxuICAgIH0pO1xufTtcblxuXG4vLyBNb2RpZmljYXRpb24gRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaGFua3MgdG8gbGVzcy5qcyBmb3Igc29tZSBvZiB0aGUgYmFzaWNzIGhlcmVcbi8vIDxodHRwczovL2dpdGh1Yi5jb20vY2xvdWRoZWFkL2xlc3MuanMvYmxvYi9tYXN0ZXIvbGliL2xlc3MvZnVuY3Rpb25zLmpzPlxuXG5mdW5jdGlvbiBkZXNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgICBhbW91bnQgPSAoYW1vdW50ID09PSAwKSA/IDAgOiAoYW1vdW50IHx8IDEwKTtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIGhzbC5zIC09IGFtb3VudCAvIDEwMDtcbiAgICBoc2wucyA9IGNsYW1wMDEoaHNsLnMpO1xuICAgIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuZnVuY3Rpb24gc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLnMgKz0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5zID0gY2xhbXAwMShoc2wucyk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG5mdW5jdGlvbiBncmV5c2NhbGUoY29sb3IpIHtcbiAgICByZXR1cm4gdGlueWNvbG9yKGNvbG9yKS5kZXNhdHVyYXRlKDEwMCk7XG59XG5cbmZ1bmN0aW9uIGxpZ2h0ZW4gKGNvbG9yLCBhbW91bnQpIHtcbiAgICBhbW91bnQgPSAoYW1vdW50ID09PSAwKSA/IDAgOiAoYW1vdW50IHx8IDEwKTtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIGhzbC5sICs9IGFtb3VudCAvIDEwMDtcbiAgICBoc2wubCA9IGNsYW1wMDEoaHNsLmwpO1xuICAgIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuZnVuY3Rpb24gYnJpZ2h0ZW4oY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciByZ2IgPSB0aW55Y29sb3IoY29sb3IpLnRvUmdiKCk7XG4gICAgcmdiLnIgPSBtYXRoTWF4KDAsIG1hdGhNaW4oMjU1LCByZ2IuciAtIG1hdGhSb3VuZCgyNTUgKiAtIChhbW91bnQgLyAxMDApKSkpO1xuICAgIHJnYi5nID0gbWF0aE1heCgwLCBtYXRoTWluKDI1NSwgcmdiLmcgLSBtYXRoUm91bmQoMjU1ICogLSAoYW1vdW50IC8gMTAwKSkpKTtcbiAgICByZ2IuYiA9IG1hdGhNYXgoMCwgbWF0aE1pbigyNTUsIHJnYi5iIC0gbWF0aFJvdW5kKDI1NSAqIC0gKGFtb3VudCAvIDEwMCkpKSk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihyZ2IpO1xufVxuXG5mdW5jdGlvbiBkYXJrZW4gKGNvbG9yLCBhbW91bnQpIHtcbiAgICBhbW91bnQgPSAoYW1vdW50ID09PSAwKSA/IDAgOiAoYW1vdW50IHx8IDEwKTtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIGhzbC5sIC09IGFtb3VudCAvIDEwMDtcbiAgICBoc2wubCA9IGNsYW1wMDEoaHNsLmwpO1xuICAgIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuLy8gU3BpbiB0YWtlcyBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGFtb3VudCB3aXRoaW4gWy0zNjAsIDM2MF0gaW5kaWNhdGluZyB0aGUgY2hhbmdlIG9mIGh1ZS5cbi8vIFZhbHVlcyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2Ugd2lsbCBiZSB3cmFwcGVkIGludG8gdGhpcyByYW5nZS5cbmZ1bmN0aW9uIHNwaW4oY29sb3IsIGFtb3VudCkge1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIGh1ZSA9IChoc2wuaCArIGFtb3VudCkgJSAzNjA7XG4gICAgaHNsLmggPSBodWUgPCAwID8gMzYwICsgaHVlIDogaHVlO1xuICAgIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuLy8gQ29tYmluYXRpb24gRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoYW5rcyB0byBqUXVlcnkgeENvbG9yIGZvciBzb21lIG9mIHRoZSBpZGVhcyBiZWhpbmQgdGhlc2Vcbi8vIDxodHRwczovL2dpdGh1Yi5jb20vaW5mdXNpb24valF1ZXJ5LXhjb2xvci9ibG9iL21hc3Rlci9qcXVlcnkueGNvbG9yLmpzPlxuXG5mdW5jdGlvbiBjb21wbGVtZW50KGNvbG9yKSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICBoc2wuaCA9IChoc2wuaCArIDE4MCkgJSAzNjA7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG5mdW5jdGlvbiB0cmlhZChjb2xvcikge1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIGggPSBoc2wuaDtcbiAgICByZXR1cm4gW1xuICAgICAgICB0aW55Y29sb3IoY29sb3IpLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDEyMCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyAyNDApICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmwgfSlcbiAgICBdO1xufVxuXG5mdW5jdGlvbiB0ZXRyYWQoY29sb3IpIHtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIHZhciBoID0gaHNsLmg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdGlueWNvbG9yKGNvbG9yKSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyA5MCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyAxODApICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmwgfSksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgMjcwKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sIH0pXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gc3BsaXRjb21wbGVtZW50KGNvbG9yKSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICB2YXIgaCA9IGhzbC5oO1xuICAgIHJldHVybiBbXG4gICAgICAgIHRpbnljb2xvcihjb2xvciksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgNzIpICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmx9KSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyAyMTYpICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmx9KVxuICAgIF07XG59XG5cbmZ1bmN0aW9uIGFuYWxvZ291cyhjb2xvciwgcmVzdWx0cywgc2xpY2VzKSB7XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgNjtcbiAgICBzbGljZXMgPSBzbGljZXMgfHwgMzA7XG5cbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIHZhciBwYXJ0ID0gMzYwIC8gc2xpY2VzO1xuICAgIHZhciByZXQgPSBbdGlueWNvbG9yKGNvbG9yKV07XG5cbiAgICBmb3IgKGhzbC5oID0gKChoc2wuaCAtIChwYXJ0ICogcmVzdWx0cyA+PiAxKSkgKyA3MjApICUgMzYwOyAtLXJlc3VsdHM7ICkge1xuICAgICAgICBoc2wuaCA9IChoc2wuaCArIHBhcnQpICUgMzYwO1xuICAgICAgICByZXQucHVzaCh0aW55Y29sb3IoaHNsKSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG1vbm9jaHJvbWF0aWMoY29sb3IsIHJlc3VsdHMpIHtcbiAgICByZXN1bHRzID0gcmVzdWx0cyB8fCA2O1xuICAgIHZhciBoc3YgPSB0aW55Y29sb3IoY29sb3IpLnRvSHN2KCk7XG4gICAgdmFyIGggPSBoc3YuaCwgcyA9IGhzdi5zLCB2ID0gaHN2LnY7XG4gICAgdmFyIHJldCA9IFtdO1xuICAgIHZhciBtb2RpZmljYXRpb24gPSAxIC8gcmVzdWx0cztcblxuICAgIHdoaWxlIChyZXN1bHRzLS0pIHtcbiAgICAgICAgcmV0LnB1c2godGlueWNvbG9yKHsgaDogaCwgczogcywgdjogdn0pKTtcbiAgICAgICAgdiA9ICh2ICsgbW9kaWZpY2F0aW9uKSAlIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbn1cblxuLy8gVXRpbGl0eSBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50aW55Y29sb3IubWl4ID0gZnVuY3Rpb24oY29sb3IxLCBjb2xvcjIsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgNTApO1xuXG4gICAgdmFyIHJnYjEgPSB0aW55Y29sb3IoY29sb3IxKS50b1JnYigpO1xuICAgIHZhciByZ2IyID0gdGlueWNvbG9yKGNvbG9yMikudG9SZ2IoKTtcblxuICAgIHZhciBwID0gYW1vdW50IC8gMTAwO1xuXG4gICAgdmFyIHJnYmEgPSB7XG4gICAgICAgIHI6ICgocmdiMi5yIC0gcmdiMS5yKSAqIHApICsgcmdiMS5yLFxuICAgICAgICBnOiAoKHJnYjIuZyAtIHJnYjEuZykgKiBwKSArIHJnYjEuZyxcbiAgICAgICAgYjogKChyZ2IyLmIgLSByZ2IxLmIpICogcCkgKyByZ2IxLmIsXG4gICAgICAgIGE6ICgocmdiMi5hIC0gcmdiMS5hKSAqIHApICsgcmdiMS5hXG4gICAgfTtcblxuICAgIHJldHVybiB0aW55Y29sb3IocmdiYSk7XG59O1xuXG5cbi8vIFJlYWRhYmlsaXR5IEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA8aHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNjb250cmFzdC1yYXRpb2RlZiAoV0NBRyBWZXJzaW9uIDIpXG5cbi8vIGBjb250cmFzdGBcbi8vIEFuYWx5emUgdGhlIDIgY29sb3JzIGFuZCByZXR1cm5zIHRoZSBjb2xvciBjb250cmFzdCBkZWZpbmVkIGJ5IChXQ0FHIFZlcnNpb24gMilcbnRpbnljb2xvci5yZWFkYWJpbGl0eSA9IGZ1bmN0aW9uKGNvbG9yMSwgY29sb3IyKSB7XG4gICAgdmFyIGMxID0gdGlueWNvbG9yKGNvbG9yMSk7XG4gICAgdmFyIGMyID0gdGlueWNvbG9yKGNvbG9yMik7XG4gICAgcmV0dXJuIChNYXRoLm1heChjMS5nZXRMdW1pbmFuY2UoKSxjMi5nZXRMdW1pbmFuY2UoKSkrMC4wNSkgLyAoTWF0aC5taW4oYzEuZ2V0THVtaW5hbmNlKCksYzIuZ2V0THVtaW5hbmNlKCkpKzAuMDUpO1xufTtcblxuLy8gYGlzUmVhZGFibGVgXG4vLyBFbnN1cmUgdGhhdCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9yIGNvbWJpbmF0aW9ucyBtZWV0IFdDQUcyIGd1aWRlbGluZXMuXG4vLyBUaGUgdGhpcmQgYXJndW1lbnQgaXMgYW4gb3B0aW9uYWwgT2JqZWN0LlxuLy8gICAgICB0aGUgJ2xldmVsJyBwcm9wZXJ0eSBzdGF0ZXMgJ0FBJyBvciAnQUFBJyAtIGlmIG1pc3Npbmcgb3IgaW52YWxpZCwgaXQgZGVmYXVsdHMgdG8gJ0FBJztcbi8vICAgICAgdGhlICdzaXplJyBwcm9wZXJ0eSBzdGF0ZXMgJ2xhcmdlJyBvciAnc21hbGwnIC0gaWYgbWlzc2luZyBvciBpbnZhbGlkLCBpdCBkZWZhdWx0cyB0byAnc21hbGwnLlxuLy8gSWYgdGhlIGVudGlyZSBvYmplY3QgaXMgYWJzZW50LCBpc1JlYWRhYmxlIGRlZmF1bHRzIHRvIHtsZXZlbDpcIkFBXCIsc2l6ZTpcInNtYWxsXCJ9LlxuXG4vLyAqRXhhbXBsZSpcbi8vICAgIHRpbnljb2xvci5pc1JlYWRhYmxlKFwiIzAwMFwiLCBcIiMxMTFcIikgPT4gZmFsc2Vcbi8vICAgIHRpbnljb2xvci5pc1JlYWRhYmxlKFwiIzAwMFwiLCBcIiMxMTFcIix7bGV2ZWw6XCJBQVwiLHNpemU6XCJsYXJnZVwifSkgPT4gZmFsc2VcbnRpbnljb2xvci5pc1JlYWRhYmxlID0gZnVuY3Rpb24oY29sb3IxLCBjb2xvcjIsIHdjYWcyKSB7XG4gICAgdmFyIHJlYWRhYmlsaXR5ID0gdGlueWNvbG9yLnJlYWRhYmlsaXR5KGNvbG9yMSwgY29sb3IyKTtcbiAgICB2YXIgd2NhZzJQYXJtcywgb3V0O1xuXG4gICAgb3V0ID0gZmFsc2U7XG5cbiAgICB3Y2FnMlBhcm1zID0gdmFsaWRhdGVXQ0FHMlBhcm1zKHdjYWcyKTtcbiAgICBzd2l0Y2ggKHdjYWcyUGFybXMubGV2ZWwgKyB3Y2FnMlBhcm1zLnNpemUpIHtcbiAgICAgICAgY2FzZSBcIkFBc21hbGxcIjpcbiAgICAgICAgY2FzZSBcIkFBQWxhcmdlXCI6XG4gICAgICAgICAgICBvdXQgPSByZWFkYWJpbGl0eSA+PSA0LjU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFBbGFyZ2VcIjpcbiAgICAgICAgICAgIG91dCA9IHJlYWRhYmlsaXR5ID49IDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFBQXNtYWxsXCI6XG4gICAgICAgICAgICBvdXQgPSByZWFkYWJpbGl0eSA+PSA3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG5cbn07XG5cbi8vIGBtb3N0UmVhZGFibGVgXG4vLyBHaXZlbiBhIGJhc2UgY29sb3IgYW5kIGEgbGlzdCBvZiBwb3NzaWJsZSBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmRcbi8vIGNvbG9ycyBmb3IgdGhhdCBiYXNlLCByZXR1cm5zIHRoZSBtb3N0IHJlYWRhYmxlIGNvbG9yLlxuLy8gT3B0aW9uYWxseSByZXR1cm5zIEJsYWNrIG9yIFdoaXRlIGlmIHRoZSBtb3N0IHJlYWRhYmxlIGNvbG9yIGlzIHVucmVhZGFibGUuXG4vLyAqRXhhbXBsZSpcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUodGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiMxMjNcIiwgW1wiIzEyNFwiLCBcIiMxMjVcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczpmYWxzZX0pLnRvSGV4U3RyaW5nKCk7IC8vIFwiIzExMjI1NVwiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKHRpbnljb2xvci5tb3N0UmVhZGFibGUoXCIjMTIzXCIsIFtcIiMxMjRcIiwgXCIjMTI1XCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZX0pLnRvSGV4U3RyaW5nKCk7ICAvLyBcIiNmZmZmZmZcIlxuLy8gICAgdGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiNhODAxNWFcIiwgW1wiI2ZhZjNmM1wiXSx7aW5jbHVkZUZhbGxiYWNrQ29sb3JzOnRydWUsbGV2ZWw6XCJBQUFcIixzaXplOlwibGFyZ2VcIn0pLnRvSGV4U3RyaW5nKCk7IC8vIFwiI2ZhZjNmM1wiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiI2E4MDE1YVwiLCBbXCIjZmFmM2YzXCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZSxsZXZlbDpcIkFBQVwiLHNpemU6XCJzbWFsbFwifSkudG9IZXhTdHJpbmcoKTsgLy8gXCIjZmZmZmZmXCJcbnRpbnljb2xvci5tb3N0UmVhZGFibGUgPSBmdW5jdGlvbihiYXNlQ29sb3IsIGNvbG9yTGlzdCwgYXJncykge1xuICAgIHZhciBiZXN0Q29sb3IgPSBudWxsO1xuICAgIHZhciBiZXN0U2NvcmUgPSAwO1xuICAgIHZhciByZWFkYWJpbGl0eTtcbiAgICB2YXIgaW5jbHVkZUZhbGxiYWNrQ29sb3JzLCBsZXZlbCwgc2l6ZSA7XG4gICAgYXJncyA9IGFyZ3MgfHwge307XG4gICAgaW5jbHVkZUZhbGxiYWNrQ29sb3JzID0gYXJncy5pbmNsdWRlRmFsbGJhY2tDb2xvcnMgO1xuICAgIGxldmVsID0gYXJncy5sZXZlbDtcbiAgICBzaXplID0gYXJncy5zaXplO1xuXG4gICAgZm9yICh2YXIgaT0gMDsgaSA8IGNvbG9yTGlzdC5sZW5ndGggOyBpKyspIHtcbiAgICAgICAgcmVhZGFiaWxpdHkgPSB0aW55Y29sb3IucmVhZGFiaWxpdHkoYmFzZUNvbG9yLCBjb2xvckxpc3RbaV0pO1xuICAgICAgICBpZiAocmVhZGFiaWxpdHkgPiBiZXN0U2NvcmUpIHtcbiAgICAgICAgICAgIGJlc3RTY29yZSA9IHJlYWRhYmlsaXR5O1xuICAgICAgICAgICAgYmVzdENvbG9yID0gdGlueWNvbG9yKGNvbG9yTGlzdFtpXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGlueWNvbG9yLmlzUmVhZGFibGUoYmFzZUNvbG9yLCBiZXN0Q29sb3IsIHtcImxldmVsXCI6bGV2ZWwsXCJzaXplXCI6c2l6ZX0pIHx8ICFpbmNsdWRlRmFsbGJhY2tDb2xvcnMpIHtcbiAgICAgICAgcmV0dXJuIGJlc3RDb2xvcjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFyZ3MuaW5jbHVkZUZhbGxiYWNrQ29sb3JzPWZhbHNlO1xuICAgICAgICByZXR1cm4gdGlueWNvbG9yLm1vc3RSZWFkYWJsZShiYXNlQ29sb3IsW1wiI2ZmZlwiLCBcIiMwMDBcIl0sYXJncyk7XG4gICAgfVxufTtcblxuXG4vLyBCaWcgTGlzdCBvZiBDb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvcj5cbnZhciBuYW1lcyA9IHRpbnljb2xvci5uYW1lcyA9IHtcbiAgICBhbGljZWJsdWU6IFwiZjBmOGZmXCIsXG4gICAgYW50aXF1ZXdoaXRlOiBcImZhZWJkN1wiLFxuICAgIGFxdWE6IFwiMGZmXCIsXG4gICAgYXF1YW1hcmluZTogXCI3ZmZmZDRcIixcbiAgICBhenVyZTogXCJmMGZmZmZcIixcbiAgICBiZWlnZTogXCJmNWY1ZGNcIixcbiAgICBiaXNxdWU6IFwiZmZlNGM0XCIsXG4gICAgYmxhY2s6IFwiMDAwXCIsXG4gICAgYmxhbmNoZWRhbG1vbmQ6IFwiZmZlYmNkXCIsXG4gICAgYmx1ZTogXCIwMGZcIixcbiAgICBibHVldmlvbGV0OiBcIjhhMmJlMlwiLFxuICAgIGJyb3duOiBcImE1MmEyYVwiLFxuICAgIGJ1cmx5d29vZDogXCJkZWI4ODdcIixcbiAgICBidXJudHNpZW5uYTogXCJlYTdlNWRcIixcbiAgICBjYWRldGJsdWU6IFwiNWY5ZWEwXCIsXG4gICAgY2hhcnRyZXVzZTogXCI3ZmZmMDBcIixcbiAgICBjaG9jb2xhdGU6IFwiZDI2OTFlXCIsXG4gICAgY29yYWw6IFwiZmY3ZjUwXCIsXG4gICAgY29ybmZsb3dlcmJsdWU6IFwiNjQ5NWVkXCIsXG4gICAgY29ybnNpbGs6IFwiZmZmOGRjXCIsXG4gICAgY3JpbXNvbjogXCJkYzE0M2NcIixcbiAgICBjeWFuOiBcIjBmZlwiLFxuICAgIGRhcmtibHVlOiBcIjAwMDA4YlwiLFxuICAgIGRhcmtjeWFuOiBcIjAwOGI4YlwiLFxuICAgIGRhcmtnb2xkZW5yb2Q6IFwiYjg4NjBiXCIsXG4gICAgZGFya2dyYXk6IFwiYTlhOWE5XCIsXG4gICAgZGFya2dyZWVuOiBcIjAwNjQwMFwiLFxuICAgIGRhcmtncmV5OiBcImE5YTlhOVwiLFxuICAgIGRhcmtraGFraTogXCJiZGI3NmJcIixcbiAgICBkYXJrbWFnZW50YTogXCI4YjAwOGJcIixcbiAgICBkYXJrb2xpdmVncmVlbjogXCI1NTZiMmZcIixcbiAgICBkYXJrb3JhbmdlOiBcImZmOGMwMFwiLFxuICAgIGRhcmtvcmNoaWQ6IFwiOTkzMmNjXCIsXG4gICAgZGFya3JlZDogXCI4YjAwMDBcIixcbiAgICBkYXJrc2FsbW9uOiBcImU5OTY3YVwiLFxuICAgIGRhcmtzZWFncmVlbjogXCI4ZmJjOGZcIixcbiAgICBkYXJrc2xhdGVibHVlOiBcIjQ4M2Q4YlwiLFxuICAgIGRhcmtzbGF0ZWdyYXk6IFwiMmY0ZjRmXCIsXG4gICAgZGFya3NsYXRlZ3JleTogXCIyZjRmNGZcIixcbiAgICBkYXJrdHVycXVvaXNlOiBcIjAwY2VkMVwiLFxuICAgIGRhcmt2aW9sZXQ6IFwiOTQwMGQzXCIsXG4gICAgZGVlcHBpbms6IFwiZmYxNDkzXCIsXG4gICAgZGVlcHNreWJsdWU6IFwiMDBiZmZmXCIsXG4gICAgZGltZ3JheTogXCI2OTY5NjlcIixcbiAgICBkaW1ncmV5OiBcIjY5Njk2OVwiLFxuICAgIGRvZGdlcmJsdWU6IFwiMWU5MGZmXCIsXG4gICAgZmlyZWJyaWNrOiBcImIyMjIyMlwiLFxuICAgIGZsb3JhbHdoaXRlOiBcImZmZmFmMFwiLFxuICAgIGZvcmVzdGdyZWVuOiBcIjIyOGIyMlwiLFxuICAgIGZ1Y2hzaWE6IFwiZjBmXCIsXG4gICAgZ2FpbnNib3JvOiBcImRjZGNkY1wiLFxuICAgIGdob3N0d2hpdGU6IFwiZjhmOGZmXCIsXG4gICAgZ29sZDogXCJmZmQ3MDBcIixcbiAgICBnb2xkZW5yb2Q6IFwiZGFhNTIwXCIsXG4gICAgZ3JheTogXCI4MDgwODBcIixcbiAgICBncmVlbjogXCIwMDgwMDBcIixcbiAgICBncmVlbnllbGxvdzogXCJhZGZmMmZcIixcbiAgICBncmV5OiBcIjgwODA4MFwiLFxuICAgIGhvbmV5ZGV3OiBcImYwZmZmMFwiLFxuICAgIGhvdHBpbms6IFwiZmY2OWI0XCIsXG4gICAgaW5kaWFucmVkOiBcImNkNWM1Y1wiLFxuICAgIGluZGlnbzogXCI0YjAwODJcIixcbiAgICBpdm9yeTogXCJmZmZmZjBcIixcbiAgICBraGFraTogXCJmMGU2OGNcIixcbiAgICBsYXZlbmRlcjogXCJlNmU2ZmFcIixcbiAgICBsYXZlbmRlcmJsdXNoOiBcImZmZjBmNVwiLFxuICAgIGxhd25ncmVlbjogXCI3Y2ZjMDBcIixcbiAgICBsZW1vbmNoaWZmb246IFwiZmZmYWNkXCIsXG4gICAgbGlnaHRibHVlOiBcImFkZDhlNlwiLFxuICAgIGxpZ2h0Y29yYWw6IFwiZjA4MDgwXCIsXG4gICAgbGlnaHRjeWFuOiBcImUwZmZmZlwiLFxuICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiBcImZhZmFkMlwiLFxuICAgIGxpZ2h0Z3JheTogXCJkM2QzZDNcIixcbiAgICBsaWdodGdyZWVuOiBcIjkwZWU5MFwiLFxuICAgIGxpZ2h0Z3JleTogXCJkM2QzZDNcIixcbiAgICBsaWdodHBpbms6IFwiZmZiNmMxXCIsXG4gICAgbGlnaHRzYWxtb246IFwiZmZhMDdhXCIsXG4gICAgbGlnaHRzZWFncmVlbjogXCIyMGIyYWFcIixcbiAgICBsaWdodHNreWJsdWU6IFwiODdjZWZhXCIsXG4gICAgbGlnaHRzbGF0ZWdyYXk6IFwiNzg5XCIsXG4gICAgbGlnaHRzbGF0ZWdyZXk6IFwiNzg5XCIsXG4gICAgbGlnaHRzdGVlbGJsdWU6IFwiYjBjNGRlXCIsXG4gICAgbGlnaHR5ZWxsb3c6IFwiZmZmZmUwXCIsXG4gICAgbGltZTogXCIwZjBcIixcbiAgICBsaW1lZ3JlZW46IFwiMzJjZDMyXCIsXG4gICAgbGluZW46IFwiZmFmMGU2XCIsXG4gICAgbWFnZW50YTogXCJmMGZcIixcbiAgICBtYXJvb246IFwiODAwMDAwXCIsXG4gICAgbWVkaXVtYXF1YW1hcmluZTogXCI2NmNkYWFcIixcbiAgICBtZWRpdW1ibHVlOiBcIjAwMDBjZFwiLFxuICAgIG1lZGl1bW9yY2hpZDogXCJiYTU1ZDNcIixcbiAgICBtZWRpdW1wdXJwbGU6IFwiOTM3MGRiXCIsXG4gICAgbWVkaXVtc2VhZ3JlZW46IFwiM2NiMzcxXCIsXG4gICAgbWVkaXVtc2xhdGVibHVlOiBcIjdiNjhlZVwiLFxuICAgIG1lZGl1bXNwcmluZ2dyZWVuOiBcIjAwZmE5YVwiLFxuICAgIG1lZGl1bXR1cnF1b2lzZTogXCI0OGQxY2NcIixcbiAgICBtZWRpdW12aW9sZXRyZWQ6IFwiYzcxNTg1XCIsXG4gICAgbWlkbmlnaHRibHVlOiBcIjE5MTk3MFwiLFxuICAgIG1pbnRjcmVhbTogXCJmNWZmZmFcIixcbiAgICBtaXN0eXJvc2U6IFwiZmZlNGUxXCIsXG4gICAgbW9jY2FzaW46IFwiZmZlNGI1XCIsXG4gICAgbmF2YWpvd2hpdGU6IFwiZmZkZWFkXCIsXG4gICAgbmF2eTogXCIwMDAwODBcIixcbiAgICBvbGRsYWNlOiBcImZkZjVlNlwiLFxuICAgIG9saXZlOiBcIjgwODAwMFwiLFxuICAgIG9saXZlZHJhYjogXCI2YjhlMjNcIixcbiAgICBvcmFuZ2U6IFwiZmZhNTAwXCIsXG4gICAgb3JhbmdlcmVkOiBcImZmNDUwMFwiLFxuICAgIG9yY2hpZDogXCJkYTcwZDZcIixcbiAgICBwYWxlZ29sZGVucm9kOiBcImVlZThhYVwiLFxuICAgIHBhbGVncmVlbjogXCI5OGZiOThcIixcbiAgICBwYWxldHVycXVvaXNlOiBcImFmZWVlZVwiLFxuICAgIHBhbGV2aW9sZXRyZWQ6IFwiZGI3MDkzXCIsXG4gICAgcGFwYXlhd2hpcDogXCJmZmVmZDVcIixcbiAgICBwZWFjaHB1ZmY6IFwiZmZkYWI5XCIsXG4gICAgcGVydTogXCJjZDg1M2ZcIixcbiAgICBwaW5rOiBcImZmYzBjYlwiLFxuICAgIHBsdW06IFwiZGRhMGRkXCIsXG4gICAgcG93ZGVyYmx1ZTogXCJiMGUwZTZcIixcbiAgICBwdXJwbGU6IFwiODAwMDgwXCIsXG4gICAgcmViZWNjYXB1cnBsZTogXCI2NjMzOTlcIixcbiAgICByZWQ6IFwiZjAwXCIsXG4gICAgcm9zeWJyb3duOiBcImJjOGY4ZlwiLFxuICAgIHJveWFsYmx1ZTogXCI0MTY5ZTFcIixcbiAgICBzYWRkbGVicm93bjogXCI4YjQ1MTNcIixcbiAgICBzYWxtb246IFwiZmE4MDcyXCIsXG4gICAgc2FuZHlicm93bjogXCJmNGE0NjBcIixcbiAgICBzZWFncmVlbjogXCIyZThiNTdcIixcbiAgICBzZWFzaGVsbDogXCJmZmY1ZWVcIixcbiAgICBzaWVubmE6IFwiYTA1MjJkXCIsXG4gICAgc2lsdmVyOiBcImMwYzBjMFwiLFxuICAgIHNreWJsdWU6IFwiODdjZWViXCIsXG4gICAgc2xhdGVibHVlOiBcIjZhNWFjZFwiLFxuICAgIHNsYXRlZ3JheTogXCI3MDgwOTBcIixcbiAgICBzbGF0ZWdyZXk6IFwiNzA4MDkwXCIsXG4gICAgc25vdzogXCJmZmZhZmFcIixcbiAgICBzcHJpbmdncmVlbjogXCIwMGZmN2ZcIixcbiAgICBzdGVlbGJsdWU6IFwiNDY4MmI0XCIsXG4gICAgdGFuOiBcImQyYjQ4Y1wiLFxuICAgIHRlYWw6IFwiMDA4MDgwXCIsXG4gICAgdGhpc3RsZTogXCJkOGJmZDhcIixcbiAgICB0b21hdG86IFwiZmY2MzQ3XCIsXG4gICAgdHVycXVvaXNlOiBcIjQwZTBkMFwiLFxuICAgIHZpb2xldDogXCJlZTgyZWVcIixcbiAgICB3aGVhdDogXCJmNWRlYjNcIixcbiAgICB3aGl0ZTogXCJmZmZcIixcbiAgICB3aGl0ZXNtb2tlOiBcImY1ZjVmNVwiLFxuICAgIHllbGxvdzogXCJmZjBcIixcbiAgICB5ZWxsb3dncmVlbjogXCI5YWNkMzJcIlxufTtcblxuLy8gTWFrZSBpdCBlYXN5IHRvIGFjY2VzcyBjb2xvcnMgdmlhIGBoZXhOYW1lc1toZXhdYFxudmFyIGhleE5hbWVzID0gdGlueWNvbG9yLmhleE5hbWVzID0gZmxpcChuYW1lcyk7XG5cblxuLy8gVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS1cblxuLy8gYHsgJ25hbWUxJzogJ3ZhbDEnIH1gIGJlY29tZXMgYHsgJ3ZhbDEnOiAnbmFtZTEnIH1gXG5mdW5jdGlvbiBmbGlwKG8pIHtcbiAgICB2YXIgZmxpcHBlZCA9IHsgfTtcbiAgICBmb3IgKHZhciBpIGluIG8pIHtcbiAgICAgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgIGZsaXBwZWRbb1tpXV0gPSBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmbGlwcGVkO1xufVxuXG4vLyBSZXR1cm4gYSB2YWxpZCBhbHBoYSB2YWx1ZSBbMCwxXSB3aXRoIGFsbCBpbnZhbGlkIHZhbHVlcyBiZWluZyBzZXQgdG8gMVxuZnVuY3Rpb24gYm91bmRBbHBoYShhKSB7XG4gICAgYSA9IHBhcnNlRmxvYXQoYSk7XG5cbiAgICBpZiAoaXNOYU4oYSkgfHwgYSA8IDAgfHwgYSA+IDEpIHtcbiAgICAgICAgYSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG59XG5cbi8vIFRha2UgaW5wdXQgZnJvbSBbMCwgbl0gYW5kIHJldHVybiBpdCBhcyBbMCwgMV1cbmZ1bmN0aW9uIGJvdW5kMDEobiwgbWF4KSB7XG4gICAgaWYgKGlzT25lUG9pbnRaZXJvKG4pKSB7IG4gPSBcIjEwMCVcIjsgfVxuXG4gICAgdmFyIHByb2Nlc3NQZXJjZW50ID0gaXNQZXJjZW50YWdlKG4pO1xuICAgIG4gPSBtYXRoTWluKG1heCwgbWF0aE1heCgwLCBwYXJzZUZsb2F0KG4pKSk7XG5cbiAgICAvLyBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgcGVyY2VudGFnZSBpbnRvIG51bWJlclxuICAgIGlmIChwcm9jZXNzUGVyY2VudCkge1xuICAgICAgICBuID0gcGFyc2VJbnQobiAqIG1heCwgMTApIC8gMTAwO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnNcbiAgICBpZiAoKE1hdGguYWJzKG4gLSBtYXgpIDwgMC4wMDAwMDEpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgaW50byBbMCwgMV0gcmFuZ2UgaWYgaXQgaXNuJ3QgYWxyZWFkeVxuICAgIHJldHVybiAobiAlIG1heCkgLyBwYXJzZUZsb2F0KG1heCk7XG59XG5cbi8vIEZvcmNlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMVxuZnVuY3Rpb24gY2xhbXAwMSh2YWwpIHtcbiAgICByZXR1cm4gbWF0aE1pbigxLCBtYXRoTWF4KDAsIHZhbCkpO1xufVxuXG4vLyBQYXJzZSBhIGJhc2UtMTYgaGV4IHZhbHVlIGludG8gYSBiYXNlLTEwIGludGVnZXJcbmZ1bmN0aW9uIHBhcnNlSW50RnJvbUhleCh2YWwpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsLCAxNik7XG59XG5cbi8vIE5lZWQgdG8gaGFuZGxlIDEuMCBhcyAxMDAlLCBzaW5jZSBvbmNlIGl0IGlzIGEgbnVtYmVyLCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gaXQgYW5kIDFcbi8vIDxodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc0MjIwNzIvamF2YXNjcmlwdC1ob3ctdG8tZGV0ZWN0LW51bWJlci1hcy1hLWRlY2ltYWwtaW5jbHVkaW5nLTEtMD5cbmZ1bmN0aW9uIGlzT25lUG9pbnRaZXJvKG4pIHtcbiAgICByZXR1cm4gdHlwZW9mIG4gPT0gXCJzdHJpbmdcIiAmJiBuLmluZGV4T2YoJy4nKSAhPSAtMSAmJiBwYXJzZUZsb2F0KG4pID09PSAxO1xufVxuXG4vLyBDaGVjayB0byBzZWUgaWYgc3RyaW5nIHBhc3NlZCBpbiBpcyBhIHBlcmNlbnRhZ2VcbmZ1bmN0aW9uIGlzUGVyY2VudGFnZShuKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBuID09PSBcInN0cmluZ1wiICYmIG4uaW5kZXhPZignJScpICE9IC0xO1xufVxuXG4vLyBGb3JjZSBhIGhleCB2YWx1ZSB0byBoYXZlIDIgY2hhcmFjdGVyc1xuZnVuY3Rpb24gcGFkMihjKSB7XG4gICAgcmV0dXJuIGMubGVuZ3RoID09IDEgPyAnMCcgKyBjIDogJycgKyBjO1xufVxuXG4vLyBSZXBsYWNlIGEgZGVjaW1hbCB3aXRoIGl0J3MgcGVyY2VudGFnZSB2YWx1ZVxuZnVuY3Rpb24gY29udmVydFRvUGVyY2VudGFnZShuKSB7XG4gICAgaWYgKG4gPD0gMSkge1xuICAgICAgICBuID0gKG4gKiAxMDApICsgXCIlXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG47XG59XG5cbi8vIENvbnZlcnRzIGEgZGVjaW1hbCB0byBhIGhleCB2YWx1ZVxuZnVuY3Rpb24gY29udmVydERlY2ltYWxUb0hleChkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChkKSAqIDI1NSkudG9TdHJpbmcoMTYpO1xufVxuLy8gQ29udmVydHMgYSBoZXggdmFsdWUgdG8gYSBkZWNpbWFsXG5mdW5jdGlvbiBjb252ZXJ0SGV4VG9EZWNpbWFsKGgpIHtcbiAgICByZXR1cm4gKHBhcnNlSW50RnJvbUhleChoKSAvIDI1NSk7XG59XG5cbnZhciBtYXRjaGVycyA9IChmdW5jdGlvbigpIHtcblxuICAgIC8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jaW50ZWdlcnM+XG4gICAgdmFyIENTU19JTlRFR0VSID0gXCJbLVxcXFwrXT9cXFxcZCslP1wiO1xuXG4gICAgLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNudW1iZXItdmFsdWU+XG4gICAgdmFyIENTU19OVU1CRVIgPSBcIlstXFxcXCtdP1xcXFxkKlxcXFwuXFxcXGQrJT9cIjtcblxuICAgIC8vIEFsbG93IHBvc2l0aXZlL25lZ2F0aXZlIGludGVnZXIvbnVtYmVyLiAgRG9uJ3QgY2FwdHVyZSB0aGUgZWl0aGVyL29yLCBqdXN0IHRoZSBlbnRpcmUgb3V0Y29tZS5cbiAgICB2YXIgQ1NTX1VOSVQgPSBcIig/OlwiICsgQ1NTX05VTUJFUiArIFwiKXwoPzpcIiArIENTU19JTlRFR0VSICsgXCIpXCI7XG5cbiAgICAvLyBBY3R1YWwgbWF0Y2hpbmcuXG4gICAgLy8gUGFyZW50aGVzZXMgYW5kIGNvbW1hcyBhcmUgb3B0aW9uYWwsIGJ1dCBub3QgcmVxdWlyZWQuXG4gICAgLy8gV2hpdGVzcGFjZSBjYW4gdGFrZSB0aGUgcGxhY2Ugb2YgY29tbWFzIG9yIG9wZW5pbmcgcGFyZW5cbiAgICB2YXIgUEVSTUlTU0lWRV9NQVRDSDMgPSBcIltcXFxcc3xcXFxcKF0rKFwiICsgQ1NTX1VOSVQgKyBcIilbLHxcXFxcc10rKFwiICsgQ1NTX1VOSVQgKyBcIilbLHxcXFxcc10rKFwiICsgQ1NTX1VOSVQgKyBcIilcXFxccypcXFxcKT9cIjtcbiAgICB2YXIgUEVSTUlTU0lWRV9NQVRDSDQgPSBcIltcXFxcc3xcXFxcKF0rKFwiICsgQ1NTX1VOSVQgKyBcIilbLHxcXFxcc10rKFwiICsgQ1NTX1VOSVQgKyBcIilbLHxcXFxcc10rKFwiICsgQ1NTX1VOSVQgKyBcIilbLHxcXFxcc10rKFwiICsgQ1NTX1VOSVQgKyBcIilcXFxccypcXFxcKT9cIjtcblxuICAgIHJldHVybiB7XG4gICAgICAgIENTU19VTklUOiBuZXcgUmVnRXhwKENTU19VTklUKSxcbiAgICAgICAgcmdiOiBuZXcgUmVnRXhwKFwicmdiXCIgKyBQRVJNSVNTSVZFX01BVENIMyksXG4gICAgICAgIHJnYmE6IG5ldyBSZWdFeHAoXCJyZ2JhXCIgKyBQRVJNSVNTSVZFX01BVENINCksXG4gICAgICAgIGhzbDogbmV3IFJlZ0V4cChcImhzbFwiICsgUEVSTUlTU0lWRV9NQVRDSDMpLFxuICAgICAgICBoc2xhOiBuZXcgUmVnRXhwKFwiaHNsYVwiICsgUEVSTUlTU0lWRV9NQVRDSDQpLFxuICAgICAgICBoc3Y6IG5ldyBSZWdFeHAoXCJoc3ZcIiArIFBFUk1JU1NJVkVfTUFUQ0gzKSxcbiAgICAgICAgaHN2YTogbmV3IFJlZ0V4cChcImhzdmFcIiArIFBFUk1JU1NJVkVfTUFUQ0g0KSxcbiAgICAgICAgaGV4MzogL14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLFxuICAgICAgICBoZXg2OiAvXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC8sXG4gICAgICAgIGhleDQ6IC9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8sXG4gICAgICAgIGhleDg6IC9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC9cbiAgICB9O1xufSkoKTtcblxuLy8gYGlzVmFsaWRDU1NVbml0YFxuLy8gVGFrZSBpbiBhIHNpbmdsZSBzdHJpbmcgLyBudW1iZXIgYW5kIGNoZWNrIHRvIHNlZSBpZiBpdCBsb29rcyBsaWtlIGEgQ1NTIHVuaXRcbi8vIChzZWUgYG1hdGNoZXJzYCBhYm92ZSBmb3IgZGVmaW5pdGlvbikuXG5mdW5jdGlvbiBpc1ZhbGlkQ1NTVW5pdChjb2xvcikge1xuICAgIHJldHVybiAhIW1hdGNoZXJzLkNTU19VTklULmV4ZWMoY29sb3IpO1xufVxuXG4vLyBgc3RyaW5nSW5wdXRUb09iamVjdGBcbi8vIFBlcm1pc3NpdmUgc3RyaW5nIHBhcnNpbmcuICBUYWtlIGluIGEgbnVtYmVyIG9mIGZvcm1hdHMsIGFuZCBvdXRwdXQgYW4gb2JqZWN0XG4vLyBiYXNlZCBvbiBkZXRlY3RlZCBmb3JtYXQuICBSZXR1cm5zIGB7IHIsIGcsIGIgfWAgb3IgYHsgaCwgcywgbCB9YCBvciBgeyBoLCBzLCB2fWBcbmZ1bmN0aW9uIHN0cmluZ0lucHV0VG9PYmplY3QoY29sb3IpIHtcblxuICAgIGNvbG9yID0gY29sb3IucmVwbGFjZSh0cmltTGVmdCwnJykucmVwbGFjZSh0cmltUmlnaHQsICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBuYW1lZCA9IGZhbHNlO1xuICAgIGlmIChuYW1lc1tjb2xvcl0pIHtcbiAgICAgICAgY29sb3IgPSBuYW1lc1tjb2xvcl07XG4gICAgICAgIG5hbWVkID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29sb3IgPT0gJ3RyYW5zcGFyZW50Jykge1xuICAgICAgICByZXR1cm4geyByOiAwLCBnOiAwLCBiOiAwLCBhOiAwLCBmb3JtYXQ6IFwibmFtZVwiIH07XG4gICAgfVxuXG4gICAgLy8gVHJ5IHRvIG1hdGNoIHN0cmluZyBpbnB1dCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zLlxuICAgIC8vIEtlZXAgbW9zdCBvZiB0aGUgbnVtYmVyIGJvdW5kaW5nIG91dCBvZiB0aGlzIGZ1bmN0aW9uIC0gZG9uJ3Qgd29ycnkgYWJvdXQgWzAsMV0gb3IgWzAsMTAwXSBvciBbMCwzNjBdXG4gICAgLy8gSnVzdCByZXR1cm4gYW4gb2JqZWN0IGFuZCBsZXQgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIGhhbmRsZSB0aGF0LlxuICAgIC8vIFRoaXMgd2F5IHRoZSByZXN1bHQgd2lsbCBiZSB0aGUgc2FtZSB3aGV0aGVyIHRoZSB0aW55Y29sb3IgaXMgaW5pdGlhbGl6ZWQgd2l0aCBzdHJpbmcgb3Igb2JqZWN0LlxuICAgIHZhciBtYXRjaDtcbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMucmdiLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyByOiBtYXRjaFsxXSwgZzogbWF0Y2hbMl0sIGI6IG1hdGNoWzNdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5yZ2JhLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyByOiBtYXRjaFsxXSwgZzogbWF0Y2hbMl0sIGI6IG1hdGNoWzNdLCBhOiBtYXRjaFs0XSB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaHNsLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyBoOiBtYXRjaFsxXSwgczogbWF0Y2hbMl0sIGw6IG1hdGNoWzNdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oc2xhLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyBoOiBtYXRjaFsxXSwgczogbWF0Y2hbMl0sIGw6IG1hdGNoWzNdLCBhOiBtYXRjaFs0XSB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaHN2LmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyBoOiBtYXRjaFsxXSwgczogbWF0Y2hbMl0sIHY6IG1hdGNoWzNdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oc3ZhLmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4geyBoOiBtYXRjaFsxXSwgczogbWF0Y2hbMl0sIHY6IG1hdGNoWzNdLCBhOiBtYXRjaFs0XSB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaGV4OC5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSksXG4gICAgICAgICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0pLFxuICAgICAgICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdKSxcbiAgICAgICAgICAgIGE6IGNvbnZlcnRIZXhUb0RlY2ltYWwobWF0Y2hbNF0pLFxuICAgICAgICAgICAgZm9ybWF0OiBuYW1lZCA/IFwibmFtZVwiIDogXCJoZXg4XCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhleDYuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMV0pLFxuICAgICAgICAgICAgZzogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzJdKSxcbiAgICAgICAgICAgIGI6IHBhcnNlSW50RnJvbUhleChtYXRjaFszXSksXG4gICAgICAgICAgICBmb3JtYXQ6IG5hbWVkID8gXCJuYW1lXCIgOiBcImhleFwiXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oZXg0LmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzFdICsgJycgKyBtYXRjaFsxXSksXG4gICAgICAgICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0gKyAnJyArIG1hdGNoWzJdKSxcbiAgICAgICAgICAgIGI6IHBhcnNlSW50RnJvbUhleChtYXRjaFszXSArICcnICsgbWF0Y2hbM10pLFxuICAgICAgICAgICAgYTogY29udmVydEhleFRvRGVjaW1hbChtYXRjaFs0XSArICcnICsgbWF0Y2hbNF0pLFxuICAgICAgICAgICAgZm9ybWF0OiBuYW1lZCA/IFwibmFtZVwiIDogXCJoZXg4XCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhleDMuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMV0gKyAnJyArIG1hdGNoWzFdKSxcbiAgICAgICAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSArICcnICsgbWF0Y2hbMl0pLFxuICAgICAgICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdICsgJycgKyBtYXRjaFszXSksXG4gICAgICAgICAgICBmb3JtYXQ6IG5hbWVkID8gXCJuYW1lXCIgOiBcImhleFwiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdDQUcyUGFybXMocGFybXMpIHtcbiAgICAvLyByZXR1cm4gdmFsaWQgV0NBRzIgcGFybXMgZm9yIGlzUmVhZGFibGUuXG4gICAgLy8gSWYgaW5wdXQgcGFybXMgYXJlIGludmFsaWQsIHJldHVybiB7XCJsZXZlbFwiOlwiQUFcIiwgXCJzaXplXCI6XCJzbWFsbFwifVxuICAgIHZhciBsZXZlbCwgc2l6ZTtcbiAgICBwYXJtcyA9IHBhcm1zIHx8IHtcImxldmVsXCI6XCJBQVwiLCBcInNpemVcIjpcInNtYWxsXCJ9O1xuICAgIGxldmVsID0gKHBhcm1zLmxldmVsIHx8IFwiQUFcIikudG9VcHBlckNhc2UoKTtcbiAgICBzaXplID0gKHBhcm1zLnNpemUgfHwgXCJzbWFsbFwiKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsZXZlbCAhPT0gXCJBQVwiICYmIGxldmVsICE9PSBcIkFBQVwiKSB7XG4gICAgICAgIGxldmVsID0gXCJBQVwiO1xuICAgIH1cbiAgICBpZiAoc2l6ZSAhPT0gXCJzbWFsbFwiICYmIHNpemUgIT09IFwibGFyZ2VcIikge1xuICAgICAgICBzaXplID0gXCJzbWFsbFwiO1xuICAgIH1cbiAgICByZXR1cm4ge1wibGV2ZWxcIjpsZXZlbCwgXCJzaXplXCI6c2l6ZX07XG59XG5cbi8vIE5vZGU6IEV4cG9ydCBmdW5jdGlvblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHRpbnljb2xvcjtcbn1cbi8vIEFNRC9yZXF1aXJlanM6IERlZmluZSB0aGUgbW9kdWxlXG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge3JldHVybiB0aW55Y29sb3I7fSk7XG59XG4vLyBCcm93c2VyOiBFeHBvc2UgdG8gd2luZG93XG5lbHNlIHtcbiAgICB3aW5kb3cudGlueWNvbG9yID0gdGlueWNvbG9yO1xufVxuXG59KShNYXRoKTtcbiIsIi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQge1xuXHRQYW5lbEJvZHksXG5cdFJhbmdlQ29udHJvbCxcblx0UGF0aCxcblx0U1ZHLFxuXHRSZWN0LFxufSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHtcblx0Y3JlYXRlQmxvY2ssXG59IGZyb20gJ0B3b3JkcHJlc3MvYmxvY2tzJztcbmltcG9ydCB7XG5cdEluc3BlY3RvckNvbnRyb2xzLFxuXHRJbm5lckJsb2Nrcyxcbn0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHtcblx0c2VsZWN0XG59IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJztcblxuZXhwb3J0IGNvbnN0IHNldHRpbmdzID0ge1xuXHR0aXRsZTogX18oICdCYXNpYycgKSxcblxuXHRwYXJlbnQ6IFsnZ2Vja28vZ3JpZC1sYXlvdXQnXSxcblxuXHRpY29uOiA8U1ZHIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PFBhdGggZD1cIk0wLDBoMjR2MjRIMFYweiBNMCwwaDI0djI0SDBWMHpcIiBmaWxsPVwibm9uZVwiIC8+PFBhdGggZD1cIm0yMCA3djEwaC0xNnYtMTBoMTZtMC0yaC0xNmMtMS4xIDAtMS45OSAwLjktMS45OSAybC0wLjAxIDEwYzAgMS4xIDAuOSAyIDIgMmgxNmMxLjEgMCAyLTAuOSAyLTJ2LTEwYzAtMS4xLTAuOS0yLTItMnpcIiAvPjxSZWN0IHg9XCIxMVwiIHk9XCI4XCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjExXCIgeT1cIjExXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjhcIiB5PVwiOFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCI4XCIgeT1cIjExXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjVcIiB5PVwiMTFcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiNVwiIHk9XCI4XCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjhcIiB5PVwiMTRcIiB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiMTRcIiB5PVwiMTFcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiMTRcIiB5PVwiOFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCIxN1wiIHk9XCIxMVwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCIxN1wiIHk9XCI4XCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PC9TVkc+LFxuXG5cdGRlc2NyaXB0aW9uOiBfXyggJ0FuIGltYWdlIEdyaWQgQmxvY2suJyApLFxuXG5cdGNhdGVnb3J5OiAnY29tbW9uJyxcblxuXHRzdXBwb3J0czoge1xuXHRcdGNsYXNzTmFtZTogdHJ1ZSxcblx0XHRpbnNlcnRlcjogdHJ1ZSxcblx0XHRyZXVzYWJsZTogZmFsc2UsXG5cdFx0aHRtbDogZmFsc2UsXG5cdH0sXG5cblx0c3R5bGVzOiBbXG5cdFx0eyBuYW1lOiAnZGVmYXVsdCcsIGxhYmVsOiBfXyggJ0RlZmF1bHQnKSwgaXNEZWZhdWx0OiB0cnVlIH0sXG5cdF0sXG5cblx0YXR0cmlidXRlczoge1xuXHRcdGg6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDF9LFxuXHRcdHc6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDF9LFxuXHR9LFxuXG5cdHRyYW5zZm9ybXM6IHtcblx0XHRmcm9tOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdibG9jaycsXG5cdFx0XHRcdGJsb2NrczogWydnZWNrby9ncmlkLWxheW91dC1pdGVtJywgJ2dlY2tvL2dyaWQtbGF5b3V0LWltYWdlJ10sXG5cdFx0XHRcdHRyYW5zZm9ybTogKGF0dHJpYnV0ZXMsIGlubmVyQmxvY2tzKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3QoJ2NvcmUvZWRpdG9yJykuZ2V0U2VsZWN0ZWRCbG9jaygpOyAvLyBiZWNhdXNlIGlubmVyQmxvY2tzIGRvZXMgbm90IHdvcmsuXG5cdFx0XHRcdFx0Ly8gSXQgYXBwZWFycyB0aGF0IGlubmVyQmxvY2tzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cblx0XHRcdFx0XHRjb25zdCB7aCwgd30gPSBhdHRyaWJ1dGVzO1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVCbG9jaygnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0XHRoOiBoLFxuXHRcdFx0XHRcdFx0dzogdyxcblx0XHRcdFx0XHR9LCBzZWxlY3RlZC5pbm5lckJsb2Nrcyk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFx0XG5cdFx0XSxcblx0fSxcblxuXHRkZXByZWNhdGVkOiBbe1xuXHRcdG1pZ3JhdGUoKSB7fSxcblx0XHRzYXZlKCkge1xuXHRcdFx0cmV0dXJuIDxJbm5lckJsb2Nrcy5Db250ZW50IC8gPiA7XG5cdFx0fSxcblx0fV0sXG5cblx0ZWRpdCh7IGF0dHJpYnV0ZXMsIHNldEF0dHJpYnV0ZXMsIGNsYXNzTmFtZSwgaW5zZXJ0QmxvY2tzQWZ0ZXIgfSkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGgsXG5cdFx0XHR3LFxuXHRcdH0gPSBhdHRyaWJ1dGVzO1xuXHRcdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRcdGdyaWRDb2x1bW5FbmQ6ICdzcGFuICcrIHcsXG5cdFx0XHRncmlkUm93RW5kOiAnc3BhbiAnICsgaCxcblx0XHR9O1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdDxJbnNwZWN0b3JDb250cm9scz5cblx0XHRcdFx0XHQ8UGFuZWxCb2R5IHRpdGxlPVwiR3JpZCBJdGVtXCI+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdXaWR0aCcgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsgdyB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdHc6IG5leHQsXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0bWluPXsgMSB9XG5cdFx0XHRcdFx0XHRcdG1heD17IDEyIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdTcGFuIFJvd3MnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IGggfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRoOiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHQ8L0luc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YGdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNgfSBzdHlsZT17c3R5bGVzfT48L2Rpdj5cblx0XHRcdFx0PGRpdiAgY2xhc3NOYW1lPXtgd3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yX193cmFwIGdlY2tvLWdyaWQtbGF5b3V0LWJhc2ljICR7YXR0cmlidXRlcy5jbGFzc05hbWV9YH0+XG5cdFx0XHRcdFx0eyB0eXBlb2YgaW5zZXJ0QmxvY2tzQWZ0ZXIgPT09ICdmdW5jdGlvbicgLy9UaGlzIGxpbmUgbWFrZXMgc3VyZSBzdHlsZXMgZG8gbm90IGJyZWFrXG5cdFx0XHRcdFx0XHQ/IDxJbm5lckJsb2NrcyB0ZW1wbGF0ZUxvY2s9eyBmYWxzZSB9Lz5cblx0XHRcdFx0XHRcdDogPHA+TG9yZW0gSXBzdW08L3A+IC8vIFRoaXMgaXMgd2hhdCBzaG93cyBhcyB0aGUgcHJldmlldyBjb250ZW50LlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdCk7XG5cdH0sXG5cblx0c2F2ZSgpIHtcblx0XHRyZXR1cm4oPGRpdj48SW5uZXJCbG9ja3MuQ29udGVudCAvPjwvZGl2Pik7IC8vIEhvbmVzdGx5IEkgZG9uJ3Qgd2FudCB0byBkbyB0aGlzIGJ1dCBjb252ZW50aW9ucyBhcmUgY29udmVudGlvbnMuXG5cdH0sXG59O1xuIiwiLyoqXG4gKiBXb3JkUHJlc3MgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdFBhbmVsQm9keSxcblx0UmFuZ2VDb250cm9sLFxuXHRQYXRoLFxuXHRTVkcsXG5cdEljb25CdXR0b24sXG5cdFRvb2xiYXIsXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQge1xuXHRjcmVhdGVCbG9jayxcbn0gZnJvbSAnQHdvcmRwcmVzcy9ibG9ja3MnO1xuaW1wb3J0IHtcblx0SW5zcGVjdG9yQ29udHJvbHMsXG5cdElubmVyQmxvY2tzLFxuXHRNZWRpYVVwbG9hZCxcblx0TWVkaWFQbGFjZWhvbGRlcixcblx0QmxvY2tDb250cm9scyxcbn0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHtcblx0c2VsZWN0XG59IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbmNvbnN0IEFMTE9XRURfQkxPQ0tTID0gWydjb3JlL3BhcmFncmFwaCcsICdjb3JlL2hlYWRpbmcnLCAnY29yZS9idXR0b24nLCAnY29yZS9saXN0JywgJ2NvcmUvcXVvdGUnXTtcblxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnZ2Vja28vZ3JpZC1sYXlvdXQtaW1hZ2UnO1xuXG5leHBvcnQgY29uc3Qgc2V0dGluZ3MgPSB7XG5cdHRpdGxlOiBfXyggJ0ltYWdlJyApLFxuXG5cdHBhcmVudDogWydnZWNrby9ncmlkLWxheW91dCddLFxuXG5cdGljb246IDxTVkcgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48UGF0aCBkPVwiTTAsMGgyNHYyNEgwVjB6XCIgZmlsbD1cIm5vbmVcIiAvPjxQYXRoIGQ9XCJtMTkgNXYxNGgtMTR2LTE0aDE0bTAtMmgtMTRjLTEuMSAwLTIgMC45LTIgMnYxNGMwIDEuMSAwLjkgMiAyIDJoMTRjMS4xIDAgMi0wLjkgMi0ydi0xNGMwLTEuMS0wLjktMi0yLTJ6XCIgLz48UGF0aCBkPVwibTE0LjE0IDExLjg2bC0zIDMuODctMi4xNC0yLjU5LTMgMy44NmgxMmwtMy44Ni01LjE0elwiIC8+PC9TVkc+LFxuXG5cdGRlc2NyaXB0aW9uOiBfXyggJ0FuIGltYWdlIEdyaWQgQmxvY2suJyApLFxuXG5cdGNhdGVnb3J5OiAnY29tbW9uJyxcblxuXHRzdXBwb3J0czoge1xuXHRcdGNsYXNzTmFtZTogdHJ1ZSxcblx0XHRpbnNlcnRlcjogdHJ1ZSxcblx0XHRyZXVzYWJsZTogZmFsc2UsXG5cdFx0aHRtbDogZmFsc2UsXG5cdH0sXG5cblx0c3R5bGVzOiBbXG5cdFx0eyBuYW1lOiAnZGVmYXVsdCcsIGxhYmVsOiBfXyggJ0RlZmF1bHQnKSwgaXNEZWZhdWx0OiB0cnVlIH0sXG5cdFx0eyBuYW1lOiAnaG92ZXInLCBsYWJlbDogX18oICdIb3ZlcicpIH0sXG5cdFx0eyBuYW1lOiAnbm8tY2FwdGlvbicsIGxhYmVsOiBfXyggJ05vIENhcHRpb24nKSB9LFxuXHRdLFxuXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHRoOiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0XHR3OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0XHRtaW5IZWlnaHQ6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDIwMCx9LFxuXHRcdGltZ0lkOiB7IHR5cGU6ICdudW1iZXInfSxcblx0XHRpbWdVcmw6IHsgdHlwZTogJ3N0cmluZyd9LFxuXHR9LFxuXG5cdHRyYW5zZm9ybXM6IHtcblx0XHRmcm9tOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6ICdibG9jaycsXG5cdFx0XHRcdGJsb2NrczogWydnZWNrby9ncmlkLWxheW91dC1pdGVtJywgJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJ10sXG5cdFx0XHRcdHRyYW5zZm9ybTogKGF0dHJpYnV0ZXMsIGlubmVyQmxvY2tzKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3QoJ2NvcmUvZWRpdG9yJykuZ2V0U2VsZWN0ZWRCbG9jaygpOyAvLyBiZWNhdXNlIGlubmVyQmxvY2tzIGRvZXMgbm90IHdvcmsuXG5cdFx0XHRcdFx0Ly8gSXQgYXBwZWFycyB0aGF0IGlubmVyQmxvY2tzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cblx0XHRcdFx0XHRjb25zdCB7aCwgdywgYmdNZWRpYSwgYmdNZWRpYVVybCwgbWVkaWFJZCwgbWVkaWFVcmwsIG1pbkhlaWdodH0gPSBhdHRyaWJ1dGVzO1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVCbG9jaygnZ2Vja28vZ3JpZC1sYXlvdXQtaW1hZ2UnLCB7XG5cdFx0XHRcdFx0XHRoOiBoLFxuXHRcdFx0XHRcdFx0dzogdyxcblx0XHRcdFx0XHRcdGltZ0lkOiBiZ01lZGlhIHx8IG1lZGlhSWQsXG5cdFx0XHRcdFx0XHRpbWdVcmw6IGJnTWVkaWFVcmwgfHwgbWVkaWFVcmwsXG5cdFx0XHRcdFx0XHRtaW5IZWlnaHQ6IG1pbkhlaWdodCxcblx0XHRcdFx0XHR9LCBzZWxlY3RlZC5pbm5lckJsb2Nrcyk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFx0XG5cdFx0XVxuXHR9LFxuXG5cdGRlcHJlY2F0ZWQ6IFt7XG5cdFx0bWlncmF0ZSgpIHt9LFxuXHRcdHNhdmUoKSB7XG5cdFx0XHRyZXR1cm4gPElubmVyQmxvY2tzLkNvbnRlbnQgLyA+IDtcblx0XHR9LFxuXHR9XSxcblxuXHRlZGl0KHsgYXR0cmlidXRlcywgc2V0QXR0cmlidXRlcywgY2xhc3NOYW1lLCBpbnNlcnRCbG9ja3NBZnRlciB9KSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0aCxcblx0XHRcdHcsXG5cdFx0XHRpbWdJZCxcblx0XHRcdGltZ1VybCxcblx0XHRcdG1pbkhlaWdodCxcblx0XHR9ID0gYXR0cmlidXRlcztcblx0XHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0XHRncmlkQ29sdW1uRW5kOiAnc3BhbiAnKyB3LFxuXHRcdFx0Z3JpZFJvd0VuZDogJ3NwYW4gJyArIGgsXG5cdFx0XHRtaW5IZWlnaHQ6IG1pbkhlaWdodCArICdweCcsXG5cdFx0fTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdFx0PFBhbmVsQm9keSB0aXRsZT1cIkdyaWQgSXRlbVwiPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnTWluaW11bSBIZWlnaHQnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IG1pbkhlaWdodCB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1pbkhlaWdodDogbmV4dCxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRtaW4gPSBcIjUwXCJcblx0XHRcdFx0XHRcdFx0bWF4ID0gXCI2MDBcIlxuXHRcdFx0XHRcdFx0XHRzdGVwID0gXCIxXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdXaWR0aCcgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsgdyB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdHc6IG5leHQsXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0bWluPXsgMSB9XG5cdFx0XHRcdFx0XHRcdG1heD17IDEyIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdTcGFuIFJvd3MnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IGggfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRoOiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHQ8L0luc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0XHQ8QmxvY2tDb250cm9scz5cblx0XHRcdFx0XHQ8VG9vbGJhcj5cblx0XHRcdFx0XHRcdDxNZWRpYVVwbG9hZFxuXHRcdFx0XHRcdFx0XHRvblNlbGVjdD17KHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW1nSWQ6IHZhbHVlLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1nVXJsOiB2YWx1ZS51cmwsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHR5cGU9e1snaW1hZ2UnXX1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyhpbWdJZCk/IGltZ0lkOiBudWxsIH1cblx0XHRcdFx0XHRcdFx0cmVuZGVyPXsoe29wZW59KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEljb25CdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiY29tcG9uZW50cy1pY29uLWJ1dHRvbiBjb21wb25lbnRzLXRvb2xiYXJfX2NvbnRyb2xcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnRWRpdCBpbWFnZScgKSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e29wZW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGljb249XCJlZGl0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9Ub29sYmFyPlxuXHRcdFx0XHQ8LyBCbG9ja0NvbnRyb2xzPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YGdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNgfSBzdHlsZT17c3R5bGVzfT48L2Rpdj5cblx0XHRcdFx0PGZpZ3VyZSBjbGFzc05hbWU9e2B3cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3JfX3dyYXAgZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UgJHthdHRyaWJ1dGVzLmNsYXNzTmFtZX1gfT5cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQhaW1nSWQgJiZcblx0XHRcdFx0XHRcdDxNZWRpYVBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdG9uU2VsZWN0PXsodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbWdJZDogdmFsdWUuaWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGltZ1VybDogdmFsdWUudXJsLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0YWxsb3dlZFR5cGVzPXtbJ2ltYWdlJ119XG5cdFx0XHRcdFx0XHRcdGFjY2VwdD1cImltYWdlLypcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aW1nVXJsICYmXG5cdFx0XHRcdFx0XHQ8aW1nIGNsYXNzTmFtZT1cImdlY2tvLWdyaWQtbGF5b3V0LWltYWdlX19pbWFnZVwiIHNyYz17aW1nVXJsfSAvPlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQ8ZmlnY2FwdGlvbiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvblwiPlxuXHRcdFx0XHRcdFx0eyB0eXBlb2YgaW5zZXJ0QmxvY2tzQWZ0ZXIgPT09ICdmdW5jdGlvbicgLy9UaGlzIGxpbmUgbWFrZXMgc3VyZSBzdHlsZXMgZG8gbm90IGJyZWFrXG5cdFx0XHRcdFx0XHRcdD8gPElubmVyQmxvY2tzIHRlbXBsYXRlTG9jaz17IGZhbHNlIH0gYWxsb3dlZEJsb2Nrcz17QUxMT1dFRF9CTE9DS1N9Lz5cblx0XHRcdFx0XHRcdFx0OiA8cD5Mb3JlbSBJcHN1bTwvcD4gLy8gVGhpcyBpcyB3aGF0IHNob3dzIGFzIHRoZSBwcmV2aWV3IGNvbnRlbnQuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0PC9maWdjYXB0aW9uPlxuXHRcdFx0XHQ8L2ZpZ3VyZT5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fSxcblxuXHRzYXZlKCkge1xuXHRcdHJldHVybig8ZGl2PjxJbm5lckJsb2Nrcy5Db250ZW50IC8+PC9kaXY+KTsgLy8gSG9uZXN0bHkgSSBkb24ndCB3YW50IHRvIGRvIHRoaXMgYnV0IGNvbnZlbnRpb25zIGFyZSBjb252ZW50aW9ucy5cblx0fSxcbn07XG4iLCJpbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInO1xuXG4vKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtcblx0UGFuZWxCb2R5LFxuXHRSYW5nZUNvbnRyb2wsXG5cdFBhdGgsXG5cdFNWRyxcblx0UmVzaXphYmxlQm94XG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQge1xuXHRjcmVhdGVCbG9jayxcbn0gZnJvbSAnQHdvcmRwcmVzcy9ibG9ja3MnO1xuaW1wb3J0IHtcblx0SW5zcGVjdG9yQ29udHJvbHMsXG5cdElubmVyQmxvY2tzLFxuXHRNZWRpYVVwbG9hZCxcblx0TWVkaWFQbGFjZWhvbGRlcixcblx0Q29sb3JQYWxldHRlLFxuXHRnZXRDb2xvck9iamVjdEJ5Q29sb3JWYWx1ZSxcbn0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHtcblx0c2VsZWN0XG59IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2dlY2tvL2dyaWQtbGF5b3V0LWl0ZW0nO1xuXG5leHBvcnQgY29uc3Qgc2V0dGluZ3MgPSB7XG5cdHRpdGxlOiBfXyggJ0V4cGVyaW1lbnRhbCAoRG8gTm90IFVzZSknICksXG5cblx0cGFyZW50OiBbJ2dlY2tvL2dyaWQtbGF5b3V0J10sXG5cblx0aWNvbjogPFNWRyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxQYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiIC8+PFBhdGggZD1cIk0xMS45OSAxOC41NGwtNy4zNy01LjczTDMgMTQuMDdsOSA3IDktNy0xLjYzLTEuMjd6TTEyIDE2bDcuMzYtNS43M0wyMSA5bC05LTctOSA3IDEuNjMgMS4yN0wxMiAxNnptMC0xMS40N0wxNy43NCA5IDEyIDEzLjQ3IDYuMjYgOSAxMiA0LjUzelwiIC8+PC9TVkc+LFxuXG5cdGRlc2NyaXB0aW9uOiBfXyggJ0Egc2luZ2xlIGdyaWQgaXRlbSB3aXRoaW4gYSBncmlkIGJsb2NrLicgKSxcblxuXHRjYXRlZ29yeTogJ2NvbW1vbicsXG5cblx0c3VwcG9ydHM6IHtcblx0XHRjbGFzc05hbWU6IHRydWUsXG5cdFx0aW5zZXJ0ZXI6IHRydWUsXG5cdFx0cmV1c2FibGU6IGZhbHNlLFxuXHRcdGh0bWw6IGZhbHNlLFxuXHR9LFxuXG5cdHN0eWxlczogW1xuXHRcdHsgbmFtZTogJ2RlZmF1bHQnLCBsYWJlbDogX18oICdEZWZhdWx0JyksIGlzRGVmYXVsdDogdHJ1ZSB9LFxuXHRcdHsgbmFtZTogJ2hvdmVyJywgbGFiZWw6IF9fKCAnSG92ZXInKSB9LFxuXHRdLFxuXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHR0eXBlOnsgdHlwZTogJ3N0cmluZycsZGVmYXVsdDogdW5kZWZpbmVkLCB9LCAvL3NvbGlkLCBpbWFnZSwgaW1hZ2UtY29udGVudFxuXHRcdC8vIHRoZW1lOnsgdHlwZTogJ3N0cmluZycsZGVmYXVsdDogdW5kZWZpbmVkLCB9LCAvL2xpZ2h0LCBkYXJrXG5cdFx0Ly8gYm9yZGVyUmFkaXVzOiB7IHR5cGU6ICdudW1iZXInfSxcblx0XHQvLyBib3JkZXI6IHsgdHlwZTogJ29iamVjdCd9LFxuXHRcdC8vIGJveFNoYWRvdzogeyB0eXBlOiAnb2JqZWN0J30sXG5cdFx0Ly8gcGFkZGluZzogeyB0eXBlOiAnc3RyaW5nJ30sIC8vIHQgYiBsIHIgdWkgJzVweCAxMHB4JyAnNXB4IDEwcHggNXB4J1xuXHRcdC8vIG1hcmdpbjogeyB0eXBlOiAnb2JqZWN0J30sIC8vIHQgYiBsIHIgdWlcblx0XHQvLyBhbGlnbkNvbnRlbnQ6IHsgdHlwZTogJ3N0cmluZyd9LCAvLyBub3JtYWwsIHN0YXJ0LCBlbmQsIGNlbnRlclxuXHRcdC8vIGp1c3RpZnlDb250ZW50OiB7IHR5cGU6ICdzdHJpbmcnfSwgLy8gbm9ybWFsLCBzdGFydCwgZW5kLCBjZW50ZXJcblx0XHQvLyBiYWNrZ3JvdW5kSW1hZ2U6IHsgdHlwZTogJ3N0cmluZyd9LCAvLyBwcm9jZXNzIGZvciBjcmVhdGluZyBiZyBpbWFnZXNcblx0XHQvLyBiYWNrZ3JvdW5kUmVwZWF0OiB7IHR5cGU6ICdzdHJpbmcnfSwgLy8gbm8tcmVwZWF0LCByZXBlYXQsIHJlcGVhdC14LCByZXBlYXQteVxuXHRcdC8vIGJhY2tncm91bmRTaXplOiB7IHR5cGU6ICdzdHJpbmcnfSwgLy8gY292ZXIsY29udGFpbixhdXRvXG5cdFx0Ly8gYmFja2dyb3VuZENvbG9yOiB7IHR5cGU6ICdzdHJpbmcnfSxcblx0XHRoOiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxLH0sXG5cdFx0dzogeyB0eXBlOiAnbnVtYmVyJ30sXG5cdFx0bWluSGVpZ2h0OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAyMDAsfSxcblx0XHRvcGFjaXR5OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0XHRiZ01lZGlhOiB7IHR5cGU6ICdudW1iZXInfSxcblx0XHRiZ01lZGlhVXJsOiB7IHR5cGU6ICdzdHJpbmcnfSxcblx0XHRiZ0NvbG9yOiB7IHR5cGU6ICdzdHJpbmcnfSxcblx0XHRiZ0NvbG9yU2x1ZzogeyB0eXBlOiAnc3RyaW5nJ30sXG5cdFx0YmdDb2xvckJyaWdodG5lc3M6IHt0eXBlOiAnbnVtYmVyJ30sLy9saWdodCBvciBkYXJrXG5cdH0sXG5cblx0dHJhbnNmb3Jtczoge1xuXHRcdGZyb206IFtcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogJ2Jsb2NrJyxcblx0XHRcdFx0YmxvY2tzOiBbJ2dlY2tvL2dyaWQtbGF5b3V0LWltYWdlJywgJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJ10sXG5cdFx0XHRcdHRyYW5zZm9ybTogKGF0dHJpYnV0ZXMsIGlubmVyQmxvY2tzKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3QoJ2NvcmUvZWRpdG9yJykuZ2V0U2VsZWN0ZWRCbG9jaygpOyAvLyBiZWNhdXNlIGlubmVyQmxvY2tzIGRvZXMgbm90IHdvcmsuXG5cdFx0XHRcdFx0Ly8gSXQgYXBwZWFycyB0aGF0IGlubmVyQmxvY2tzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cblx0XHRcdFx0XHRjb25zdCB7aCwgdywgaW1nSWQsIGltZ1VybCwgbWVkaWFJZCwgbWVkaWFVcmwsIG1pbkhlaWdodH0gPSBhdHRyaWJ1dGVzO1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVCbG9jaygnZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbScsIHtcblx0XHRcdFx0XHRcdGg6IGgsXG5cdFx0XHRcdFx0XHR3OiB3LFxuXHRcdFx0XHRcdFx0YmdNZWRpYTogaW1nSWQgfHwgbWVkaWFJZCxcblx0XHRcdFx0XHRcdGJnTWVkaWFVcmw6IGltZ1VybCB8fCBtZWRpYVVybCxcblx0XHRcdFx0XHRcdG1pbkhlaWdodDogbWluSGVpZ2h0LFxuXHRcdFx0XHRcdH0sIHNlbGVjdGVkLmlubmVyQmxvY2tzKTtcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cblx0ZGVwcmVjYXRlZDogW1xuXHRcdHtcblx0XHRcdG1pZ3JhdGUoKSB7fSxcblx0XHRcdHNhdmUoKSB7XG5cdFx0XHRcdHJldHVybiA8SW5uZXJCbG9ja3MuQ29udGVudCAvPjtcblx0XHRcdH0sXG5cdFx0fVxuXHRdLFxuXG5cdGVkaXQoeyBhdHRyaWJ1dGVzLCBzZXRBdHRyaWJ1dGVzLCBjbGFzc05hbWUsIGluc2VydEJsb2Nrc0FmdGVyIH0pIHtcblx0XHRjb25zdCB7XG5cdFx0XHRvcGFjaXR5LFxuXHRcdFx0aCxcblx0XHRcdHcsXG5cdFx0XHR0eXBlLFxuXHRcdFx0cGFkZGluZyxcblx0XHRcdGJnTWVkaWEsXG5cdFx0XHRiZ01lZGlhVXJsLFxuXHRcdFx0YmdDb2xvcixcblx0XHRcdGJnQ29sb3JCcmlnaHRuZXNzLFxuXHRcdFx0YmdDb2xvclNsdWcsXG5cdFx0XHRtaW5IZWlnaHQsXG5cdFx0fSA9IGF0dHJpYnV0ZXM7XG5cdFx0Y29uc3Qgc3R5bGVzID0ge1xuXHRcdFx0Jy0tYmFja2dyb3VuZCc6IGJnQ29sb3IsXG5cdFx0XHQnLS1vcGFjaXR5Jzogb3BhY2l0eSxcblx0XHRcdGdyaWRDb2x1bW5FbmQ6ICdzcGFuICcrIHcsXG5cdFx0XHRncmlkUm93RW5kOiAnc3BhbiAnICsgaCxcblx0XHRcdGJhY2tncm91bmRDb2xvcjogYmdDb2xvcixcblx0XHRcdGJhY2tncm91bmRJbWFnZTogJ3VybCgnICsgYmdNZWRpYVVybCArICcpJyxcblx0XHRcdG1pbkhlaWdodDogbWluSGVpZ2h0ICsgJ3B4Jyxcblx0XHR9O1xuXHRcdGxldCBsaWdodE9yRGFyayA9ICdsaWdodCc7XG5cdFx0aWYgKGJnQ29sb3JCcmlnaHRuZXNzIDwgMTMwKSBsaWdodE9yRGFyayA9ICdkYXJrJztcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdFx0PFBhbmVsQm9keSAgdGl0bGU9XCJTZXR0aW5nc1wiPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnV2lkdGgnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IHcgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHR3OiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnU3BhbiBSb3dzJyApIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyBoIH1cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIG5leHQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHRcdFx0XHRcdFx0aDogbmV4dCxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRtaW49eyAxIH1cblx0XHRcdFx0XHRcdFx0bWF4PXsgMTIgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1BhbmVsQm9keT5cblx0XHRcdFx0XHQ8UGFuZWxCb2R5IHRpdGxlPVwiU3R5bGVcIj5cblx0XHRcdFx0XHRcdDxSYW5nZUNvbnRyb2xcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ01pbmltdW0gSGVpZ2h0JyApIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyBtaW5IZWlnaHQgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtaW5IZWlnaHQ6IG5leHQsXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0bWluID0gXCI1MFwiXG5cdFx0XHRcdFx0XHRcdG1heCA9IFwiNjAwXCJcblx0XHRcdFx0XHRcdFx0c3RlcCA9IFwiMVwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0eyB0eXBlICE9PSBcInNvbGlkXCIgJiZcblx0XHRcdFx0XHRcdFx0PE1lZGlhVXBsb2FkXG5cdFx0XHRcdFx0XHRcdFx0b25TZWxlY3Q9eyh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJnTWVkaWE6IHZhbHVlLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRiZ01lZGlhVXJsOiB2YWx1ZS51cmwsXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9e1snaW1hZ2UnLCAndmlkZW8nXX1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17KGJnTWVkaWEpPyBiZ01lZGlhOiBudWxsIH1cblx0XHRcdFx0XHRcdFx0XHRyZW5kZXI9eyh7b3Blbn0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybihcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7YmdNZWRpYVVybCAmJiA8aW1nIHNyYz17YmdNZWRpYVVybH0gb25DbGljaz17b3Blbn0gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiYXV0b1wiIHN0eWxlPXt7Y3Vyc29yOiBcInBvaW50ZXJcIn19Lz59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyFiZ01lZGlhVXJsICYmIDxkaXYgY2xhc3NOYW1lPXsnYnV0dG9uIGJ1dHRvbi1sYXJnZSd9IG9uQ2xpY2s9e29wZW59PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Q2hvb3NlIEJhY2tncm91bmRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0PGhyIC8+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PENvbG9yUGFsZXR0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw9J0JhY2tncm91bmQgQ29sb3InXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17KGJnQ29sb3IpID8gYmdDb2xvci5jb2xvciA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBzZXR0aW5ncyA9IHNlbGVjdCgnY29yZS9lZGl0b3InKS5nZXRFZGl0b3JTZXR0aW5ncygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGNvbG9yU2x1ZyA9ICh2YWx1ZSkgPyBnZXRDb2xvck9iamVjdEJ5Q29sb3JWYWx1ZShzZXR0aW5ncy5jb2xvcnMsIHZhbHVlKS5zbHVnIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe2JnQ29sb3JTbHVnOiBjb2xvclNsdWd9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBicmlnaHRuZXNzID0gKHZhbHVlKSA/IHRpbnljb2xvcih2YWx1ZSkuZ2V0QnJpZ2h0bmVzcygpOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7YmdDb2xvckJyaWdodG5lc3M6IGJyaWdodG5lc3N9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHtiZ0NvbG9yOiB2YWx1ZX0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8aHIgLz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9QYW5lbEJvZHk+XG5cdFx0XHRcdDwvSW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXtgZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yLXN0eWxlc2B9IHN0eWxlPXtzdHlsZXN9PjwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YHdwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvcl9fd3JhcCR7dHlwZX0gJHthdHRyaWJ1dGVzLmNsYXNzTmFtZX0gaGFzLSR7YmdDb2xvclNsdWd9LWJhY2tncm91bmQtY29sb3IgaXMtJHtsaWdodE9yRGFya30tYmFja2dyb3VuZGB9PlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCh0eXBlID09PSAnaW1hZ2UnIHx8IHR5cGUgPT09ICdpbWFnZS1jb250ZW50JykgJiZcblx0XHRcdFx0XHRcdCFiZ01lZGlhICYmXG5cdFx0XHRcdFx0XHQ8TWVkaWFQbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRvblNlbGVjdD17KHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YmdNZWRpYTogdmFsdWUuaWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJnTWVkaWFVcmw6IHZhbHVlLnVybCxcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdGFsbG93ZWRUeXBlcz17WydpbWFnZSddfVxuXHRcdFx0XHRcdFx0XHRhY2NlcHQ9XCJpbWFnZS8qXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHsgXG5cdFx0XHRcdFx0XHQodHlwZW9mIGluc2VydEJsb2Nrc0FmdGVyID09PSAnZnVuY3Rpb24nKSAmJiAvL1RoaXMgbGluZSBtYWtlcyBzdXJlIHN0eWxlcyBkbyBub3QgYnJlYWtcblx0XHRcdFx0XHRcdDxJbm5lckJsb2NrcyB0ZW1wbGF0ZUxvY2s9eyBmYWxzZSB9IC8+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9LFxuXG5cdHNhdmUoKSB7XG5cdFx0cmV0dXJuKDxkaXY+PElubmVyQmxvY2tzLkNvbnRlbnQgLz48L2Rpdj4pOyAvLyBIb25lc3RseSBJIGRvbid0IHdhbnQgdG8gZG8gdGhpcyBidXQgY29udmVudGlvbnMgYXJlIGNvbnZlbnRpb25zLlxuXHR9LFxufTtcbiIsIi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBQYW5lbEJvZHksIFJhbmdlQ29udHJvbCwgRywgU1ZHLCBQYXRoIH0gZnJvbSAnQHdvcmRwcmVzcy9jb21wb25lbnRzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcbmltcG9ydCB7XG5cdEluc3BlY3RvckNvbnRyb2xzLFxuXHRJbm5lckJsb2Nrcyxcbn0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnQHdvcmRwcmVzcy9kYXRhJztcbmltcG9ydCBUZW1wbGF0ZVBpY2tlciBmcm9tICcuL3RlbXBsYXRlLXNlbGVjdCc7XG5cbi8qKlxuICogQWxsb3dlZCBibG9ja3MgY29uc3RhbnQgaXMgcGFzc2VkIHRvIElubmVyQmxvY2tzIHByZWNpc2VseSBhcyBzcGVjaWZpZWQgaGVyZS5cbiAqIFRoZSBjb250ZW50cyBvZiB0aGUgYXJyYXkgc2hvdWxkIG5ldmVyIGNoYW5nZS5cbiAqIFRoZSBhcnJheSBzaG91bGQgY29udGFpbiB0aGUgbmFtZSBvZiBlYWNoIGJsb2NrIHRoYXQgaXMgYWxsb3dlZC5cbiAqIEluIGNvbHVtbnMgYmxvY2ssIHRoZSBvbmx5IGJsb2NrIHdlIGFsbG93IGlzICdkbXAvZ3JpZC1pdGVtJy5cbiAqXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmdbXX1cbiovXG5jb25zdCBBTExPV0VEX0JMT0NLUyA9IFsnZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbScsICdnZWNrby9ncmlkLWxheW91dC1pbWFnZScsICdnZWNrby9ncmlkLWxheW91dC1iYXNpYyddO1xuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdnZWNrby9ncmlkLWxheW91dCc7XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcblx0dGl0bGU6IF9fKCAnR3JpZCcgKSxcblxuXHRpY29uOiA8U1ZHIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PFBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIgLz48Rz48UGF0aCBkPVwiTTQsMTMgTDgsMTMgTDgsMTAgTDQsMTAgTDQsMTMgWiBNNCwxNSBMNCwxOCBMOCwxOCBMOCwxNSBMNCwxNSBaIE0xMCwxMyBMMTQsMTMgTDE0LDEwIEwxMCwxMCBMMTAsMTMgWiBNMTAsMTUgTDEwLDE4IEwxNCwxOCBMMTQsMTUgTDEwLDE1IFogTTIwLDEzIEwyMCwxMCBMMTYsMTAgTDE2LDEzIEwyMCwxMyBaIE0yMCwxNSBMMTYsMTUgTDE2LDE4IEwyMCwxOCBMMjAsMTUgWiBNNCw4IEw4LDggTDgsNSBMNCw1IEw0LDggWiBNMTAsOCBMMTQsOCBMMTQsNSBMMTAsNSBMMTAsOCBaIE0yMCw4IEwyMCw1IEwxNiw1IEwxNiw4IEwyMCw4IFogTTQsMyBMMjAsMyBDMjEuMTA0NTY5NSwzIDIyLDMuOTUxMzk0OTEgMjIsNS4xMjUgTDIyLDE3Ljg3NSBDMjIsMTkuMDQ4NjA1MSAyMS4xMDQ1Njk1LDIwIDIwLDIwIEw0LDIwIEMyLjg5NTQzMDUsMjAgMiwxOS4wNDg2MDUxIDIsMTcuODc1IEwyLDUuMTI1IEMyLDMuOTUxMzk0OTEgMi44OTU0MzA1LDMgNCwzIFpcIiAvPjwvRz48L1NWRz4sXG5cblx0Y2F0ZWdvcnk6ICdsYXlvdXQnLFxuXG5cdGRlc2NyaXB0aW9uOiBfXyggJ1VzZSBDU1MgR3JpZCB0byBidWlsZCBsYXlvdXRzIGFuZCwgdGhlbiBhZGQgd2hhdGV2ZXIgY29udGVudCBibG9ja3MgeW914oCZZCBsaWtlLicgKSxcblxuXHRzdXBwb3J0czoge1xuXHRcdGFsaWduOiBbICd3aWRlJywgJ2Z1bGwnIF0sXG5cdFx0aHRtbDogZmFsc2UsXG5cdH0sXG5cblx0ZGVwcmVjYXRlZDogW1xuXHRcdHtcblx0XHRcdG1pZ3JhdGUoKSB7fSxcblx0XHRcdHNhdmUoKSB7XG5cdFx0XHRcdHJldHVybiA8SW5uZXJCbG9ja3MuQ29udGVudCAvPjtcblx0XHRcdH0sXG5cdFx0fVxuXHRdLFxuXG5cdHN0eWxlczogW1xuXHRcdHsgbmFtZTogJ2RlZmF1bHQnLCBsYWJlbDogX18oICdEZWZhdWx0JyksIGlzRGVmYXVsdDogdHJ1ZSB9LFxuXHRcdHsgbmFtZTogJ25vLWdhcCcsIGxhYmVsOiBfXyggJ05vIEdhcCcpIH0sXG5cdF0sXG5cblx0ZWRpdCggeyBhdHRyaWJ1dGVzLCBzZXRBdHRyaWJ1dGVzLCBpbnNlcnRCbG9ja3NBZnRlciwgY2xpZW50SWQgfSApIHtcblx0XHRjb25zdCBibG9jayA9IHNlbGVjdCgnY29yZS9lZGl0b3InKS5nZXRCbG9ja3NCeUNsaWVudElkKGNsaWVudElkKVswXTtcblx0XHRjb25zdCBoYXNJbm5lckJsb2NrcyA9IChibG9jayAmJiBibG9jay5pbm5lckJsb2NrcykgPyBibG9jay5pbm5lckJsb2Nrcy5sZW5ndGggPiAwIDogZmFsc2U7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdFx0PFBhbmVsQm9keT5cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHQ8L0luc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvclwiPlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHR5cGVvZiBpbnNlcnRCbG9ja3NBZnRlciA9PT0gJ2Z1bmN0aW9uJyA/XG5cdFx0XHRcdFx0XHQ8VGVtcGxhdGVQaWNrZXIgaGFzSW5ubmVyQmxvY2tzPXtoYXNJbm5lckJsb2Nrc30gYWxsb3dlZEJsb2Nrcz17IEFMTE9XRURfQkxPQ0tTIH0+PC9UZW1wbGF0ZVBpY2tlcj4gOlxuXHRcdFx0XHRcdFx0PHA+e19fKCdQcmV2aWV3IE5vdCBBdmFpbGFibGUnKX08L3A+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fSxcblxuXHRzYXZlKCkge1xuXHRcdHJldHVybig8ZGl2PjxJbm5lckJsb2Nrcy5Db250ZW50IC8+PC9kaXY+KTsgLy8gSG9uZXN0bHkgSSBkb24ndCB3YW50IHRvIGRvIHRoaXMgYnV0IGNvbnZlbnRpb25zIGFyZSBjb252ZW50aW9ucy5cblx0fSxcbn07XG4iLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHtyZWdpc3RlckJsb2NrVHlwZX0gZnJvbSAnQHdvcmRwcmVzcy9ibG9ja3MnO1xuXG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgKiBhcyBncmlkIGZyb20gJy4vZ3JpZC1sYXlvdXQnO1xuaW1wb3J0ICogYXMgZ3JpZEl0ZW0gZnJvbSAnLi9ncmlkLWxheW91dC1pdGVtJztcbmltcG9ydCAqIGFzIGdyaWRJdGVtSW1hZ2UgZnJvbSAnLi9ncmlkLWxheW91dC1pbWFnZSc7XG5pbXBvcnQgKiBhcyBncmlkSXRlbUJhc2ljIGZyb20gJy4vZ3JpZC1sYXlvdXQtYmFzaWMnO1xuXG5yZWdpc3RlckJsb2NrVHlwZShncmlkLm5hbWUsIGdyaWQuc2V0dGluZ3MpO1xucmVnaXN0ZXJCbG9ja1R5cGUoZ3JpZEl0ZW1CYXNpYy5uYW1lLCBncmlkSXRlbUJhc2ljLnNldHRpbmdzKTtcbnJlZ2lzdGVyQmxvY2tUeXBlKGdyaWRJdGVtSW1hZ2UubmFtZSwgZ3JpZEl0ZW1JbWFnZS5zZXR0aW5ncyk7XG5yZWdpc3RlckJsb2NrVHlwZShncmlkSXRlbS5uYW1lLCBncmlkSXRlbS5zZXR0aW5ncyk7XG5cbi8qKlxuICogVGhpcyBtYWtlIHN1cmUgdGhlIGdyaWQgd29ya3MgaW4gdGhlIGVkaXRvci5cbiAqL1xuLy8gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuLy8gXHRmdW5jdGlvbiB1cGRhdGVDb250YWluZXIoKSB7XG4vLyBcdFx0Y29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmdlY2tvLWdyaWQtc2xpZGVyJyk7XG4vLyBcdFx0aWYgKGNvbnRhaW5lcikge1xuLy8gXHRcdFx0ZnVuY3Rpb24gbGlzdGVuRm9yQXBwZW5kZWROb2RlcygpIHtcbi8vIFx0XHRcdFx0Ly8gbGlzdGVuIGZvciBjaGlsZCBibG9ja3MgYmVpbmcgYWRkZWQgdG8gbGF5b3V0XG4vLyBcdFx0XHRcdGNvbnN0IGxheW91dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0Jyk7XG4vLyBcdFx0XHRcdGNvbnN0IG9ic2VydmVyQ29uZmlnID0ge1xuLy8gXHRcdFx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcbi8vIFx0XHRcdFx0XHRzdWJ0cmVlOiB0cnVlXG4vLyBcdFx0XHRcdH07XG4vLyBcdFx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uTGlzdCkgPT4ge1xuLy8gXHRcdFx0XHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG4vLyBcdFx0XHRcdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gJ2NoaWxkTGlzdCcgJiYgbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGgpIHtcbi8vIFx0XHRcdFx0XHRcdFx0Y29uc3QgY2hpbGRCbG9ja3MgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtc2xpZGVyLWdyaWQtc2xpZGVcIl0nKTtcbi8vIFx0XHRcdFx0XHRcdFx0bGlzdGVuRm9yQmxvY2tDaGFuZ2VzKGNoaWxkQmxvY2tzKTtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRvYnNlcnZlci5vYnNlcnZlKGxheW91dCwgb2JzZXJ2ZXJDb25maWcpO1xuLy8gXHRcdFx0fVxuXG4vLyBcdFx0XHRmdW5jdGlvbiBsaXN0ZW5Gb3JCbG9ja0NoYW5nZXMoYmxvY2tzKSB7XG4vLyBcdFx0XHRcdGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzKSB7XG4vLyBcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2Jsb2NrJywgYmxvY2spXG4vLyBcdFx0XHRcdFx0Y29uc3Qgb2JzZXJ2ZXJDb25maWcgPSB7XG4vLyBcdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuLy8gXHRcdFx0XHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbJ3N0eWxlJywgJ2RhdGEtYmcnXVxuLy8gXHRcdFx0XHRcdH07XG4vLyBcdFx0XHRcdFx0Ly8gRmluZCB0aGUgc2xpZGUgdGhhdCBoYXMgdGhlIGF0dHJpYnV0ZXNcbi8vIFx0XHRcdFx0XHRjb25zdCBzbGlkZSA9IGJsb2NrLnF1ZXJ5U2VsZWN0b3IoJy5nZWNrby1ncmlkLXNsaWRlcl9fc2xpZGUnKTtcblxuLy8gXHRcdFx0XHRcdC8vIEluaXRpYWxpemUgYmxvY2sgc3R5bGVzXG4vLyBcdFx0XHRcdFx0Y29uc3Qgc3R5bGVzID0gc2xpZGUuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuLy8gXHRcdFx0XHRcdGJsb2NrLnN0eWxlID0gc3R5bGVzO1xuXG4vLyBcdFx0XHRcdFx0Ly8gTGlzdGVuIGZvciBzbGlkZSBzdHlsZSBjaGFuZ2VzXG4vLyBcdFx0XHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25MaXN0KSA9PiB7XG4vLyBcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uTGlzdCkge1xuLy8gXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnbXV0YXRpb24gMiBvY2N1cmVkJyk7XG4vLyBcdFx0XHRcdFx0XHRcdGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnc3R5bGUnKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3R5bGVzID0gbXV0YXRpb24udGFyZ2V0LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRibG9jay5zdHlsZSA9IHN0eWxlcztcbi8vIFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRcdG9ic2VydmVyLm9ic2VydmUoc2xpZGUsIG9ic2VydmVyQ29uZmlnKTtcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fVxuLy8gXHRcdFx0bGlzdGVuRm9yQXBwZW5kZWROb2RlcygpO1xuLy8gXHRcdFx0bGV0IGNoaWxkQmxvY2tzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXR5cGU9XCJnZWNrby9ncmlkLXNsaWRlci1ncmlkLXNsaWRlXCJdJyk7XG4vLyBcdFx0XHRsaXN0ZW5Gb3JCbG9ja0NoYW5nZXMoY2hpbGRCbG9ja3MpO1xuLy8gXHRcdH1cbi8vIFx0fVxuXG4vLyBcdHVwZGF0ZUNvbnRhaW5lcigpO1xuXG4vLyBcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Ob2RlSW5zZXJ0ZWRcIiwgdXBkYXRlQ29udGFpbmVyKVxuLy8gfSk7XG5cbmpRdWVyeShmdW5jdGlvbiAoJCkge1xuXG5cdGZ1bmN0aW9uIGxpc3RlbkZvclN0eWxlQ2hhbmdlc0dyaWRJdGVtKCkge1xuXHRcdCQoJy5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblx0XHRcdFx0bXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG5cdFx0XHRcdFx0Ly8gT24gY2hhbmdlIHVwZGF0ZSB0aGUgc3R5bGVzXG5cdFx0XHRcdFx0JCgnW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWJhc2ljXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzdHlsZXMgPSAkKHRoaXMpLmZpbmQoXCIuZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yLXN0eWxlc1wiKS5hdHRyKFwic3R5bGVcIik7XG5cdFx0XHRcdFx0XHQkKHRoaXMpLmF0dHIoXCJzdHlsZVwiLCBzdHlsZXMpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdCQoJ1tkYXRhLXR5cGU9XCJnZWNrby9ncmlkLWxheW91dC1pbWFnZVwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3R5bGVzID0gJCh0aGlzKS5maW5kKFwiLmdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNcIikuYXR0cihcInN0eWxlXCIpO1xuXHRcdFx0XHRcdFx0JCh0aGlzKS5hdHRyKFwic3R5bGVcIiwgc3R5bGVzKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQkKCdbZGF0YS10eXBlPVwiZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbVwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3R5bGVzID0gJCh0aGlzKS5maW5kKFwiLmdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNcIikuYXR0cihcInN0eWxlXCIpO1xuXHRcdFx0XHRcdFx0JCh0aGlzKS5hdHRyKFwic3R5bGVcIiwgc3R5bGVzKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdG9ic2VydmVyLm9ic2VydmUodGhpcywge1xuXHRcdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFsnc3R5bGUnXVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiBsaXN0ZW5Gb3JTdHlsZUNoYW5nZXNHcmlkKCkge1xuXHRcdCQoJy53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3InKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdFx0XHRtdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcblx0XHRcdFx0XHQvLyBPbiBjaGFuZ2UgdXBkYXRlIHRoZSBzdHlsZXNcblx0XHRcdFx0XHQkKCcud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzdHlsZXMgPSAkKHRoaXMpLmF0dHIoXCJkYXRhLXBhc3N0aHJ1XCIpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZ3JpZCA9ICQodGhpcykuYXR0cihcImRhdGEtZ3JpZFwiKTtcblx0XHRcdFx0XHRcdCQodGhpcykuZmluZChcIi5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0XCIpLmF0dHIoXCJzdHlsZVwiLCBzdHlsZXMpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7XG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogWydkYXRhLXBhc3N0aHJ1JywgJ3N0eWxlJ10sXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHVwZGF0ZVN0eWxlc0dyaWRJdGVtKCkge1xuXHRcdCQoJ1tkYXRhLXR5cGU9XCJnZWNrby9ncmlkLWxheW91dC1pbWFnZVwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc3Qgc3R5bGVzID0gJCh0aGlzKS5maW5kKFwiLmdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNcIikuYXR0cihcInN0eWxlXCIpO1xuXHRcdFx0JCh0aGlzKS5hdHRyKFwic3R5bGVcIiwgc3R5bGVzKTtcblx0XHR9KTtcblx0XHQkKCdbZGF0YS10eXBlPVwiZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWNcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHN0eWxlcyA9ICQodGhpcykuZmluZChcIi5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzXCIpLmF0dHIoXCJzdHlsZVwiKTtcblx0XHRcdCQodGhpcykuYXR0cihcInN0eWxlXCIsIHN0eWxlcyk7XG5cdFx0fSk7XG5cdFx0JCgnW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWl0ZW1cIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHN0eWxlcyA9ICQodGhpcykuZmluZChcIi5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzXCIpLmF0dHIoXCJzdHlsZVwiKTtcblx0XHRcdCQodGhpcykuYXR0cihcInN0eWxlXCIsIHN0eWxlcyk7XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVTdHlsZXNHcmlkKCkge1xuXHRcdCQoJy53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3InKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHN0eWxlcyA9ICQodGhpcykuYXR0cihcImRhdGEtcGFzc3RocnVcIik7XG5cdFx0XHRjb25zdCBncmlkID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1ncmlkXCIpO1xuXHRcdFx0JCh0aGlzKS5maW5kKFwiLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXRcIikuYXR0cihcInN0eWxlXCIsIHN0eWxlcyk7XG5cdFx0fSk7XG5cdH1cblxuXHQkKCdib2R5Jykub24oJ0RPTU5vZGVJbnNlcnRlZCcsICcud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yJywgZnVuY3Rpb24gKGUpIHtcblx0XHRpZiAoJCgnLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvcicpKXtcblx0XHRcdHVwZGF0ZVN0eWxlc0dyaWQoKTtcblx0XHRcdHVwZGF0ZVN0eWxlc0dyaWRJdGVtKCk7XG5cdFx0XHRsaXN0ZW5Gb3JTdHlsZUNoYW5nZXNHcmlkKClcblx0XHRcdGxpc3RlbkZvclN0eWxlQ2hhbmdlc0dyaWRJdGVtKCk7XG5cdFx0fVxuXHR9KTtcblxuXHQkKHdpbmRvdykubG9hZChmdW5jdGlvbiAoKSB7XG5cdFx0dXBkYXRlU3R5bGVzR3JpZCgpO1xuXHRcdHVwZGF0ZVN0eWxlc0dyaWRJdGVtKCk7XG5cdFx0bGlzdGVuRm9yU3R5bGVDaGFuZ2VzR3JpZCgpXG5cdFx0bGlzdGVuRm9yU3R5bGVDaGFuZ2VzR3JpZEl0ZW0oKTtcblx0fSk7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuXG4vLyBpbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZXZpZXcgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2xheW91dH0gPSB0aGlzLnByb3BzO1xuXHRcdHJldHVybihcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtcHJldmlld1wiPlxuXHRcdFx0XHR7bGF5b3V0Lm1hcCgoYmxvY2ssa2V5KT0+e1xuXHRcdFx0XHRcdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRcdFx0XHRcdGdyaWRDb2x1bW5FbmQ6ICdzcGFuICcgKyBibG9ja1sxXS53LFxuXHRcdFx0XHRcdFx0Z3JpZFJvd0VuZDogJ3NwYW4gJyArIGJsb2NrWzFdLmgsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRyZXR1cm4oPGRpdiBrZXk9e2tleX0gY2xhc3NOYW1lPVwiZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtcHJldmlld19faXRlbVwiIHN0eWxlPXtzdHlsZXN9PjwvZGl2Pik7XG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IF9fIH0gZnJvbSAnQHdvcmRwcmVzcy9pMThuJztcbmltcG9ydCB7IElubmVyQmxvY2tzIH0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHRlbXBsYXRlcyBmcm9tICcuL3RlbXBsYXRlcyc7IC8vIEN1c3RvbSBUZW1wbGF0ZXMgdG8gY2hvb3NlIGZyb20uXG5pbXBvcnQgUHJldmlldyBmcm9tICcuL3RlbXBsYXRlLXByZXZpZXcnOyAvLyBDdXN0b20gVGVtcGxhdGVzIHRvIGNob29zZSBmcm9tLlxuXG4vLyBpbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblx0Y29uc3RydWN0b3IocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdHNlbGVjdGVkOiBudWxsLFxuXHRcdH1cblx0fVxuXHRzZXRUZW1wbGF0ZSA9ICh0ZW1wbGF0ZSkgPT4ge1xuXHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0c2VsZWN0ZWQ6IHRlbXBsYXRlLFxuXHRcdH0pXG5cdH1cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2hhc0lubm5lckJsb2NrcywgYWxsb3dlZEJsb2Nrc30gPSB0aGlzLnByb3BzO1xuXHRcdGNvbnN0IHtzZWxlY3RlZH0gPSB0aGlzLnN0YXRlO1xuXHRcdGNvbnN0IGJsYW5rVGVtcGxhdGUgPSBbWydnZWNrby9ncmlkLWxheW91dC1iYXNpYycsIHtcblx0XHRcdFx0XHR3OiA2XG5cdFx0XHRcdH1dXTtcblx0XHRpZiAoIWhhc0lubm5lckJsb2NrcyAmJiAhc2VsZWN0ZWQpIHtcblx0XHRcdHJldHVybihcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RcIj5cblx0XHRcdFx0XHQ8aDI+e19fKCdDaG9vc2UgYSBUZW1wbGF0ZScpfTwvaDI+XG5cdFx0XHRcdFx0PHA+e19fKCdUaGlzIGlzIGEgc3RhcnRpbmcgcG9pbnQuIFRlbXBsYXRlcyBtYWtlIGl0IGVhc3kgdG8gY2hvb3NlIGEgbGF5b3V0LiBCbG9ja3MgY2FuIGJlIGNoYW5nZWQgb25jZSB0aGV5IGFyZSBzZWxlY3RlZC4nKX08L3A+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RfX3RlbXBsYXRlc1wiPlxuXHRcdFx0XHRcdFx0e3RlbXBsYXRlcygpLm1hcCgodGVtcGxhdGUsIGtleSk9Pntcblx0XHRcdFx0XHRcdFx0cmV0dXJuKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXYga2V5PXtrZXl9IGNsYXNzTmFtZT1cImdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGVcIiBvbkNsaWNrPXsoKT0+dGhpcy5zZXRUZW1wbGF0ZSh0ZW1wbGF0ZS5sYXlvdXQpfT5cblx0XHRcdFx0XHRcdFx0XHRcdDxQcmV2aWV3IGxheW91dD17dGVtcGxhdGUubGF5b3V0fSAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHA+e3RlbXBsYXRlLmxhYmVsfTwvcD5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1zZWxlY3RfX3RlbXBsYXRlXCIgb25DbGljaz17KCk9PnRoaXMuc2V0VGVtcGxhdGUoYmxhbmtUZW1wbGF0ZSl9PjxQcmV2aWV3IGxheW91dD17YmxhbmtUZW1wbGF0ZX0gLz48cD57X18oJ0NyZWF0ZSBOZXcnKX08L3A+PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH1cblx0XHRyZXR1cm4oXG5cdFx0XHQ8SW5uZXJCbG9ja3Ncblx0XHRcdFx0dGVtcGxhdGU9e3NlbGVjdGVkfVxuXHRcdFx0XHR0ZW1wbGF0ZUxvY2s9e2ZhbHNlfVxuXHRcdFx0XHRhbGxvd2VkQmxvY2tzPXthbGxvd2VkQmxvY2tzfVxuXHRcdFx0Lz5cblx0XHQpXG5cdH1cbn0iLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuaW1wb3J0IHthcHBseUZpbHRlcnN9IGZyb20gJ0B3b3JkcHJlc3MvaG9va3MnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGVtcGxhdGVzKCkge1xuXHRjb25zdCB0ZW1wbGF0ZXMgPSBbe1xuXHRcdFx0bGFiZWw6IF9fKCcyIENvbHVtbnMnKSxcblx0XHRcdGxheW91dDogW1xuXHRcdFx0XHRbJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdHc6IDZcblx0XHRcdFx0fV0sXG5cdFx0XHRcdFsnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0dzogNlxuXHRcdFx0XHR9XSxcblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdGxhYmVsOiBfXygnMyBDb2x1bW5zJyksXG5cdFx0XHRsYXlvdXQ6IFtcblx0XHRcdFx0WydnZWNrby9ncmlkLWxheW91dC1iYXNpYycsIHtcblx0XHRcdFx0XHR3OiA0XG5cdFx0XHRcdH1dLFxuXHRcdFx0XHRbJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdHc6IDRcblx0XHRcdFx0fV0sXG5cdFx0XHRcdFsnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0dzogNFxuXHRcdFx0XHR9XSxcblx0XHRcdF1cblx0XHR9LFxuXHRdO1xuXHRyZXR1cm4gYXBwbHlGaWx0ZXJzKCdnZWNrby5ncmlkLWxheW91dC50ZW1wbGF0ZXMnLCB0ZW1wbGF0ZXMpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuYmxvY2tzOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LndwLmNvbXBvbmVudHM7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuZGF0YTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy53cC5lZGl0b3I7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuZWxlbWVudDsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy53cC5ob29rczsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy53cC5pMThuOyIsIm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7Il0sInNvdXJjZVJvb3QiOiIifQ==
     1!function(n){var r={};function a(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.m=n,a.c=r,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)a.d(n,r,function(e){return t[e]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="/wp-content/plugins/gecko-grid-layout/dist/",a(a.s=21)}([function(e,t){e.exports=React},function(e,t){e.exports=window.wp.components},function(e,t){e.exports=window.wp.i18n},function(e,t){e.exports=window.wp.editor},function(e,t){e.exports=window.wp.element},function(e,t){e.exports=window.wp.blocks},function(e,t){e.exports=window.wp.data},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function r(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)}}e.exports=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}},function(e,t,n){var r=n(16),a=n(12);e.exports=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?a(e):t}},function(t,e){function n(e){return t.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(e)}t.exports=n},function(e,t,n){var r=n(17);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t){e.exports=window.wp.hooks},function(z,D,G){var q;!function(f){var g=/^\s+/,d=/\s+$/,r=0,i=f.round,h=f.min,m=f.max,e=f.random;function u(e,t){if(t=t||{},(e=e||"")instanceof u)return e;if(!(this instanceof u))return new u(e,t);var n=function(e){var t={r:0,g:0,b:0},n=1,r=null,a=null,o=null,i=!1,l=!1;"string"==typeof e&&(e=function(e){e=e.replace(g,"").replace(d,"").toLowerCase();var t,n=!1;if(A[e])e=A[e],n=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};if(t=T.rgb.exec(e))return{r:t[1],g:t[2],b:t[3]};if(t=T.rgba.exec(e))return{r:t[1],g:t[2],b:t[3],a:t[4]};if(t=T.hsl.exec(e))return{h:t[1],s:t[2],l:t[3]};if(t=T.hsla.exec(e))return{h:t[1],s:t[2],l:t[3],a:t[4]};if(t=T.hsv.exec(e))return{h:t[1],s:t[2],v:t[3]};if(t=T.hsva.exec(e))return{h:t[1],s:t[2],v:t[3],a:t[4]};if(t=T.hex8.exec(e))return{r:L(t[1]),g:L(t[2]),b:L(t[3]),a:I(t[4]),format:n?"name":"hex8"};if(t=T.hex6.exec(e))return{r:L(t[1]),g:L(t[2]),b:L(t[3]),format:n?"name":"hex"};if(t=T.hex4.exec(e))return{r:L(t[1]+""+t[1]),g:L(t[2]+""+t[2]),b:L(t[3]+""+t[3]),a:I(t[4]+""+t[4]),format:n?"name":"hex8"};if(t=T.hex3.exec(e))return{r:L(t[1]+""+t[1]),g:L(t[2]+""+t[2]),b:L(t[3]+""+t[3]),format:n?"name":"hex"};return!1}(e));"object"==typeof e&&(U(e.r)&&U(e.g)&&U(e.b)?(c=e.r,s=e.g,u=e.b,t={r:255*j(c,255),g:255*j(s,255),b:255*j(u,255)},i=!0,l="%"===String(e.r).substr(-1)?"prgb":"rgb"):U(e.h)&&U(e.s)&&U(e.v)?(r=M(e.s),a=M(e.v),t=function(e,t,n){e=6*j(e,360),t=j(t,100),n=j(n,100);var r=f.floor(e),a=e-r,o=n*(1-t),i=n*(1-a*t),l=n*(1-(1-a)*t),c=r%6;return{r:255*[n,i,o,o,l,n][c],g:255*[l,n,n,i,o,o][c],b:255*[o,o,l,n,n,i][c]}}(e.h,r,a),i=!0,l="hsv"):U(e.h)&&U(e.s)&&U(e.l)&&(r=M(e.s),o=M(e.l),t=function(e,t,n){var r,a,o;function i(e,t,n){return n<0&&(n+=1),1<n&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}if(e=j(e,360),t=j(t,100),n=j(n,100),0===t)r=a=o=n;else{var l=n<.5?n*(1+t):n+t-n*t,c=2*n-l;r=i(c,l,e+1/3),a=i(c,l,e),o=i(c,l,e-1/3)}return{r:255*r,g:255*a,b:255*o}}(e.h,r,o),i=!0,l="hsl"),e.hasOwnProperty("a")&&(n=e.a));var c,s,u;return n=S(n),{ok:i,format:e.format||l,r:h(255,m(t.r,0)),g:h(255,m(t.g,0)),b:h(255,m(t.b,0)),a:n}}(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=i(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=i(this._r)),this._g<1&&(this._g=i(this._g)),this._b<1&&(this._b=i(this._b)),this._ok=n.ok,this._tc_id=r++}function a(e,t,n){e=j(e,255),t=j(t,255),n=j(n,255);var r,a,o=m(e,t,n),i=h(e,t,n),l=(o+i)/2;if(o==i)r=a=0;else{var c=o-i;switch(a=.5<l?c/(2-o-i):c/(o+i),o){case e:r=(t-n)/c+(t<n?6:0);break;case t:r=(n-e)/c+2;break;case n:r=(e-t)/c+4}r/=6}return{h:r,s:a,l:l}}function o(e,t,n){e=j(e,255),t=j(t,255),n=j(n,255);var r,a,o=m(e,t,n),i=h(e,t,n),l=o,c=o-i;if(a=0===o?0:c/o,o==i)r=0;else{switch(o){case e:r=(t-n)/c+(t<n?6:0);break;case t:r=(n-e)/c+2;break;case n:r=(e-t)/c+4}r/=6}return{h:r,s:a,v:l}}function t(e,t,n,r){var a=[R(i(e).toString(16)),R(i(t).toString(16)),R(i(n).toString(16))];return r&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0):a.join("")}function l(e,t,n,r){return[R(H(r)),R(i(e).toString(16)),R(i(t).toString(16)),R(i(n).toString(16))].join("")}function n(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.s-=t/100,n.s=B(n.s),u(n)}function c(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.s+=t/100,n.s=B(n.s),u(n)}function s(e){return u(e).desaturate(100)}function b(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.l+=t/100,n.l=B(n.l),u(n)}function p(e,t){t=0===t?0:t||10;var n=u(e).toRgb();return n.r=m(0,h(255,n.r-i(-t/100*255))),n.g=m(0,h(255,n.g-i(-t/100*255))),n.b=m(0,h(255,n.b-i(-t/100*255))),u(n)}function y(e,t){t=0===t?0:t||10;var n=u(e).toHsl();return n.l-=t/100,n.l=B(n.l),u(n)}function v(e,t){var n=u(e).toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,u(n)}function _(e){var t=u(e).toHsl();return t.h=(t.h+180)%360,u(t)}function k(e){var t=u(e).toHsl(),n=t.h;return[u(e),u({h:(n+120)%360,s:t.s,l:t.l}),u({h:(n+240)%360,s:t.s,l:t.l})]}function w(e){var t=u(e).toHsl(),n=t.h;return[u(e),u({h:(n+90)%360,s:t.s,l:t.l}),u({h:(n+180)%360,s:t.s,l:t.l}),u({h:(n+270)%360,s:t.s,l:t.l})]}function E(e){var t=u(e).toHsl(),n=t.h;return[u(e),u({h:(n+72)%360,s:t.s,l:t.l}),u({h:(n+216)%360,s:t.s,l:t.l})]}function x(e,t,n){t=t||6,n=n||30;var r=u(e).toHsl(),a=360/n,o=[u(e)];for(r.h=(r.h-(a*t>>1)+720)%360;--t;)r.h=(r.h+a)%360,o.push(u(r));return o}function C(e,t){t=t||6;for(var n=u(e).toHsv(),r=n.h,a=n.s,o=n.v,i=[],l=1/t;t--;)i.push(u({h:r,s:a,v:o})),o=(o+l)%1;return i}u.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,n,r=this.toRgb();return e=r.r/255,t=r.g/255,n=r.b/255,.2126*(e<=.03928?e/12.92:f.pow((e+.055)/1.055,2.4))+.7152*(t<=.03928?t/12.92:f.pow((t+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:f.pow((n+.055)/1.055,2.4))},setAlpha:function(e){return this._a=S(e),this._roundA=i(100*this._a)/100,this},toHsv:function(){var e=o(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=o(this._r,this._g,this._b),t=i(360*e.h),n=i(100*e.s),r=i(100*e.v);return 1==this._a?"hsv("+t+", "+n+"%, "+r+"%)":"hsva("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHsl:function(){var e=a(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=a(this._r,this._g,this._b),t=i(360*e.h),n=i(100*e.s),r=i(100*e.l);return 1==this._a?"hsl("+t+", "+n+"%, "+r+"%)":"hsla("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHex:function(e){return t(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return function(e,t,n,r,a){var o=[R(i(e).toString(16)),R(i(t).toString(16)),R(i(n).toString(16)),R(H(r))];if(a&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join("")}(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:i(this._r),g:i(this._g),b:i(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+i(this._r)+", "+i(this._g)+", "+i(this._b)+")":"rgba("+i(this._r)+", "+i(this._g)+", "+i(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:i(100*j(this._r,255))+"%",g:i(100*j(this._g,255))+"%",b:i(100*j(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+i(100*j(this._r,255))+"%, "+i(100*j(this._g,255))+"%, "+i(100*j(this._b,255))+"%)":"rgba("+i(100*j(this._r,255))+"%, "+i(100*j(this._g,255))+"%, "+i(100*j(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(O[t(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+l(this._r,this._g,this._b,this._a),n=t,r=this._gradientType?"GradientType = 1, ":"";if(e){var a=u(e);n="#"+l(a._r,a._g,a._b,a._a)}return"progid:DXImageTransform.Microsoft.gradient("+r+"startColorstr="+t+",endColorstr="+n+")"},toString:function(e){var t=!!e;e=e||this._format;var n=!1,r=this._a<1&&0<=this._a;return t||!r||"hex"!==e&&"hex6"!==e&&"hex3"!==e&&"hex4"!==e&&"hex8"!==e&&"name"!==e?("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString()):"name"===e&&0===this._a?this.toName():this.toRgbString()},clone:function(){return u(this.toString())},_applyModification:function(e,t){var n=e.apply(null,[this].concat([].slice.call(t)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(b,arguments)},brighten:function(){return this._applyModification(p,arguments)},darken:function(){return this._applyModification(y,arguments)},desaturate:function(){return this._applyModification(n,arguments)},saturate:function(){return this._applyModification(c,arguments)},greyscale:function(){return this._applyModification(s,arguments)},spin:function(){return this._applyModification(v,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(x,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(C,arguments)},splitcomplement:function(){return this._applyCombination(E,arguments)},triad:function(){return this._applyCombination(k,arguments)},tetrad:function(){return this._applyCombination(w,arguments)}},u.fromRatio=function(e,t){if("object"==typeof e){var n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]="a"===r?e[r]:M(e[r]));e=n}return u(e,t)},u.equals=function(e,t){return!(!e||!t)&&u(e).toRgbString()==u(t).toRgbString()},u.random=function(){return u.fromRatio({r:e(),g:e(),b:e()})},u.mix=function(e,t,n){n=0===n?0:n||50;var r=u(e).toRgb(),a=u(t).toRgb(),o=n/100;return u({r:(a.r-r.r)*o+r.r,g:(a.g-r.g)*o+r.g,b:(a.b-r.b)*o+r.b,a:(a.a-r.a)*o+r.a})},u.readability=function(e,t){var n=u(e),r=u(t);return(f.max(n.getLuminance(),r.getLuminance())+.05)/(f.min(n.getLuminance(),r.getLuminance())+.05)},u.isReadable=function(e,t,n){var r,a,o=u.readability(e,t);switch(a=!1,(r=function(e){var t,n;t=((e=e||{level:"AA",size:"small"}).level||"AA").toUpperCase(),n=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA");"small"!==n&&"large"!==n&&(n="small");return{level:t,size:n}}(n)).level+r.size){case"AAsmall":case"AAAlarge":a=4.5<=o;break;case"AAlarge":a=3<=o;break;case"AAAsmall":a=7<=o}return a},u.mostReadable=function(e,t,n){var r,a,o,i,l=null,c=0;a=(n=n||{}).includeFallbackColors,o=n.level,i=n.size;for(var s=0;s<t.length;s++)c<(r=u.readability(e,t[s]))&&(c=r,l=u(t[s]));return u.isReadable(e,l,{level:o,size:i})||!a?l:(n.includeFallbackColors=!1,u.mostReadable(e,["#fff","#000"],n))};var A=u.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},O=u.hexNames=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}(A);function S(e){return e=parseFloat(e),(isNaN(e)||e<0||1<e)&&(e=1),e}function j(e,t){var n;"string"==typeof(n=e)&&-1!=n.indexOf(".")&&1===parseFloat(n)&&(e="100%");var r,a="string"==typeof(r=e)&&-1!=r.indexOf("%");return e=h(t,m(0,parseFloat(e))),a&&(e=parseInt(e*t,10)/100),f.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function B(e){return h(1,m(0,e))}function L(e){return parseInt(e,16)}function R(e){return 1==e.length?"0"+e:""+e}function M(e){return e<=1&&(e=100*e+"%"),e}function H(e){return f.round(255*parseFloat(e)).toString(16)}function I(e){return L(e)/255}var N,P,F,T=(P="[\\s|\\(]+("+(N="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+N+")[,|\\s]+("+N+")\\s*\\)?",F="[\\s|\\(]+("+N+")[,|\\s]+("+N+")[,|\\s]+("+N+")[,|\\s]+("+N+")\\s*\\)?",{CSS_UNIT:new RegExp(N),rgb:new RegExp("rgb"+P),rgba:new RegExp("rgba"+F),hsl:new RegExp("hsl"+P),hsla:new RegExp("hsla"+F),hsv:new RegExp("hsv"+P),hsva:new RegExp("hsva"+F),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function U(e){return!!T.CSS_UNIT.exec(e)}z.exports?z.exports=u:void 0===(q=function(){return u}.call(D,G,D,z))||(z.exports=q)}(Math)},function(t,e){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e){return"function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?t.exports=r=function(e){return n(e)}:t.exports=r=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":n(e)},r(e)}t.exports=r},function(n,e){function r(e,t){return n.exports=r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(e,t)}n.exports=r},,,,function(e,t,n){"use strict";n.r(t);var u=n(5),b=n(4),r=n(0),p=n.n(r),y=n(2),v=n(1),_=n(3),k=n(6),a=n(7),o=n.n(a),i=n(8),l=n.n(i),c=n(9),s=n.n(c),f=n(10),g=n.n(f),d=n(12),h=n.n(d),m=n(11),w=n.n(m),E=n(13),x=n.n(E),C=n(14);var A=function(e){function t(){return o()(this,t),s()(this,g()(t).apply(this,arguments))}return w()(t,e),l()(t,[{key:"render",value:function(){var e=this.props.layout;return p.a.createElement("div",{className:"gecko-grid-layout-template-preview"},e.map(function(e,t){var n={gridColumnEnd:"span "+e[1].w,gridRowEnd:"span "+e[1].h};return p.a.createElement("div",{key:t,className:"gecko-grid-layout-template-preview__item",style:n})}))}}]),t}(p.a.PureComponent),O=function(e){function n(e){var t;return o()(this,n),t=s()(this,g()(n).call(this,e)),x()(h()(t),"setTemplate",function(e){t.setState({selected:e})}),t.state={selected:null},t}return w()(n,e),l()(n,[{key:"render",value:function(){var e,n=this,t=this.props,r=t.hasInnnerBlocks,a=t.allowedBlocks,o=this.state.selected,i=[["gecko/grid-layout-basic",{w:6}]];return r||o?p.a.createElement(_.InnerBlocks,{template:o,templateLock:!1,allowedBlocks:a}):p.a.createElement("div",{className:"gecko-grid-layout-template-select"},p.a.createElement("h2",null,Object(y.__)("Choose a Template")),p.a.createElement("p",null,Object(y.__)("This is a starting point. Templates make it easy to choose a layout. Blocks can be changed once they are selected.")),p.a.createElement("div",{className:"gecko-grid-layout-template-select__templates"},(e=[{label:Object(y.__)("2 Columns"),layout:[["gecko/grid-layout-basic",{w:6}],["gecko/grid-layout-basic",{w:6}]]},{label:Object(y.__)("3 Columns"),layout:[["gecko/grid-layout-basic",{w:4}],["gecko/grid-layout-basic",{w:4}],["gecko/grid-layout-basic",{w:4}]]}],Object(C.applyFilters)("gecko.grid-layout.templates",e)).map(function(e,t){return p.a.createElement("div",{key:t,className:"gecko-grid-layout-template-select__template",onClick:function(){return n.setTemplate(e.layout)}},p.a.createElement(A,{layout:e.layout}),p.a.createElement("p",null,e.label))}),p.a.createElement("div",{className:"gecko-grid-layout-template-select__template",onClick:function(){return n.setTemplate(i)}},p.a.createElement(A,{layout:i}),p.a.createElement("p",null,Object(y.__)("Create New")))))}}]),n}(p.a.Component),S=["gecko/grid-layout-item","gecko/grid-layout-image","gecko/grid-layout-basic"],j={title:Object(y.__)("Grid"),icon:p.a.createElement(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},p.a.createElement(v.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),p.a.createElement(v.G,null,p.a.createElement(v.Path,{d:"M4,13 L8,13 L8,10 L4,10 L4,13 Z M4,15 L4,18 L8,18 L8,15 L4,15 Z M10,13 L14,13 L14,10 L10,10 L10,13 Z M10,15 L10,18 L14,18 L14,15 L10,15 Z M20,13 L20,10 L16,10 L16,13 L20,13 Z M20,15 L16,15 L16,18 L20,18 L20,15 Z M4,8 L8,8 L8,5 L4,5 L4,8 Z M10,8 L14,8 L14,5 L10,5 L10,8 Z M20,8 L20,5 L16,5 L16,8 L20,8 Z M4,3 L20,3 C21.1045695,3 22,3.95139491 22,5.125 L22,17.875 C22,19.0486051 21.1045695,20 20,20 L4,20 C2.8954305,20 2,19.0486051 2,17.875 L2,5.125 C2,3.95139491 2.8954305,3 4,3 Z"}))),category:"layout",description:Object(y.__)("Use CSS Grid to build layouts and, then add whatever content blocks you’d like."),supports:{align:["wide","full"],html:!1},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],transforms:{from:[{type:"block",blocks:["core/columns"],transform:function(e){var t=Object(k.select)("core/editor").getSelectedBlock().innerBlocks,n=t.length,r=Math.floor(12/n),a=[];return t.map(function(e){var t=Object(u.createBlock)("gecko/grid-layout-basic",{w:r},e.innerBlocks);a.push(t)}),Object(u.createBlock)("gecko/grid-layout",{},a)}}]},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0},{name:"no-gap",label:Object(y.__)("No Gap")}],edit:function(e){var t=e.insertBlocksAfter,n=e.clientId,r=Object(k.select)("core/editor").getBlocksByClientId(n)[0],a=!(!r||!r.innerBlocks)&&0<r.innerBlocks.length;return p.a.createElement(b.Fragment,null,p.a.createElement("div",{className:"wp-block-gecko-grid-layout-editor"},"function"==typeof t?p.a.createElement(O,{hasInnnerBlocks:a,allowedBlocks:S}):p.a.createElement("p",null,Object(y.__)("Preview Not Available"))))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}},B=n(15),L=n.n(B),R={title:Object(y.__)("Experimental (Do Not Use)"),parent:["gecko/grid-layout"],icon:p.a.createElement(v.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},p.a.createElement(v.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),p.a.createElement(v.Path,{d:"M11.99 18.54l-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16zm0-11.47L17.74 9 12 13.47 6.26 9 12 4.53z"})),description:Object(y.__)("A single grid item within a grid block."),category:"common",supports:{className:!0,inserter:!0,reusable:!1,html:!1},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0},{name:"hover",label:Object(y.__)("Hover")}],attributes:{type:{type:"string",default:void 0},h:{type:"number",default:1},w:{type:"number"},minHeight:{type:"number",default:200},opacity:{type:"number",default:1},bgMedia:{type:"number"},bgMediaUrl:{type:"string"},bgColor:{type:"string"},bgColorSlug:{type:"string"},bgColorBrightness:{type:"number"}},transforms:{from:[{type:"block",blocks:["gecko/grid-layout-image","gecko/grid-layout-basic"],transform:function(e,t){var n=Object(k.select)("core/editor").getSelectedBlock(),r=e.h,a=e.w,o=e.imgId,i=e.imgUrl,l=e.mediaId,c=e.mediaUrl,s=e.minHeight;return Object(u.createBlock)("gecko/grid-layout-item",{h:r,w:a,bgMedia:o||l,bgMediaUrl:i||c,minHeight:s},n.innerBlocks)}}]},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],edit:function(e){var t=e.attributes,a=e.setAttributes,n=(e.className,e.insertBlocksAfter),r=t.opacity,o=t.h,i=t.w,l=t.type,c=(t.padding,t.bgMedia),s=t.bgMediaUrl,u=t.bgColor,f=t.bgColorBrightness,g=t.bgColorSlug,d=t.minHeight,h={"--background":u,"--opacity":r,gridColumnEnd:"span "+i,gridRowEnd:"span "+o,backgroundColor:u,backgroundImage:"url("+s+")",minHeight:d+"px"},m="light";return f<130&&(m="dark"),p.a.createElement(b.Fragment,null,p.a.createElement(_.InspectorControls,null,p.a.createElement(v.PanelBody,{title:"Settings"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Width"),value:i,onChange:function(e){a({w:e})},min:1,max:12}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Span Rows"),value:o,onChange:function(e){a({h:e})},min:1,max:12})),p.a.createElement(v.PanelBody,{title:"Style"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Minimum Height"),value:d,onChange:function(e){a({minHeight:e})},min:"50",max:"600",step:"1"}),"solid"!==l&&p.a.createElement(_.MediaUpload,{onSelect:function(e){a({bgMedia:e.id,bgMediaUrl:e.url})},type:["image","video"],value:c||null,render:function(e){var t=e.open;return p.a.createElement("div",null,s&&p.a.createElement("img",{src:s,onClick:t,width:"100%",height:"auto",style:{cursor:"pointer"}}),!s&&p.a.createElement("div",{className:"button button-large",onClick:t},"Choose Background"))}}),p.a.createElement("hr",null),p.a.createElement("div",null,p.a.createElement(_.ColorPalette,{label:"Background Color",value:u?u.color:void 0,onChange:function(e){var t=Object(k.select)("core/editor").getEditorSettings(),n=e?Object(_.getColorObjectByColorValue)(t.colors,e).slug:void 0;a({bgColorSlug:n});var r=e?L()(e).getBrightness():void 0;a({bgColorBrightness:r}),a({bgColor:e})}}),p.a.createElement("hr",null)))),p.a.createElement("div",{className:"gecko-grid-layout-editor-styles",style:h}),p.a.createElement("div",{className:"wp-block-gecko-grid-layout-editor__wrap".concat(l," ").concat(t.className," has-").concat(g,"-background-color is-").concat(m,"-background")},("image"===l||"image-content"===l)&&!c&&p.a.createElement(_.MediaPlaceholder,{onSelect:function(e){a({bgMedia:e.id,bgMediaUrl:e.url})},allowedTypes:["image"],accept:"image/*"}),"function"==typeof n&&p.a.createElement(_.InnerBlocks,{templateLock:!1})))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}},M=["core/paragraph","core/heading","core/button","core/list","core/quote"],H={title:Object(y.__)("Image"),parent:["gecko/grid-layout"],icon:p.a.createElement(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},p.a.createElement(v.Path,{d:"M0,0h24v24H0V0z",fill:"none"}),p.a.createElement(v.Path,{d:"m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z"}),p.a.createElement(v.Path,{d:"m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z"})),description:Object(y.__)("An image Grid Block."),category:"common",supports:{className:!0,inserter:!0,reusable:!1,html:!1},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0},{name:"hover",label:Object(y.__)("Hover")},{name:"no-caption",label:Object(y.__)("No Caption")}],attributes:{h:{type:"number",default:1},w:{type:"number",default:1},minHeight:{type:"number",default:200},imgId:{type:"number"},imgUrl:{type:"string"}},transforms:{from:[{type:"block",blocks:["gecko/grid-layout-basic","gecko/grid-layout-item"],transform:function(e,t){var n=Object(k.select)("core/editor").getSelectedBlock(),r=e.h,a=e.w,o=e.bgMedia,i=e.bgMediaUrl,l=e.mediaId,c=e.mediaUrl,s=e.minHeight;return Object(u.createBlock)("gecko/grid-layout-image",{h:r,w:a,imgId:o||l,imgUrl:i||c,minHeight:s},n.innerBlocks)}}]},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],edit:function(e){var t=e.attributes,n=e.setAttributes,r=(e.className,e.insertBlocksAfter),a=t.h,o=t.w,i=t.imgId,l=t.imgUrl,c=t.minHeight,s={gridColumnEnd:"span "+o,gridRowEnd:"span "+a,minHeight:c+"px"};return p.a.createElement(b.Fragment,null,p.a.createElement(_.InspectorControls,null,p.a.createElement(v.PanelBody,{title:"Grid Item"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Minimum Height"),value:c,onChange:function(e){n({minHeight:e})},min:"50",max:"600",step:"1"}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Width"),value:o,onChange:function(e){n({w:e})},min:1,max:12}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Span Rows"),value:a,onChange:function(e){n({h:e})},min:1,max:12}))),p.a.createElement(_.BlockControls,null,p.a.createElement(v.Toolbar,null,p.a.createElement(_.MediaUpload,{onSelect:function(e){n({imgId:e.id,imgUrl:e.url})},type:["image"],value:i||null,render:function(e){var t=e.open;return p.a.createElement(v.IconButton,{className:"components-icon-button components-toolbar__control",label:Object(y.__)("Edit image"),onClick:t,icon:"edit"})}}))),p.a.createElement("div",{className:"gecko-grid-layout-editor-styles",style:s}),p.a.createElement("figure",{className:"wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-image ".concat(t.className)},!i&&p.a.createElement(_.MediaPlaceholder,{onSelect:function(e){n({imgId:e.id,imgUrl:e.url})},allowedTypes:["image"],accept:"image/*"}),l&&p.a.createElement("img",{className:"gecko-grid-layout-image__image",src:l}),i&&p.a.createElement("figcaption",{className:"gecko-grid-layout-image__caption"},"function"==typeof r?p.a.createElement(_.InnerBlocks,{templateLock:!1,allowedBlocks:M}):p.a.createElement("p",null,"Lorem Ipsum"))))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}},I={title:Object(y.__)("Basic"),parent:["gecko/grid-layout"],icon:p.a.createElement(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},p.a.createElement(v.Path,{d:"M0,0h24v24H0V0z M0,0h24v24H0V0z",fill:"none"}),p.a.createElement(v.Path,{d:"m20 7v10h-16v-10h16m0-2h-16c-1.1 0-1.99 0.9-1.99 2l-0.01 10c0 1.1 0.9 2 2 2h16c1.1 0 2-0.9 2-2v-10c0-1.1-0.9-2-2-2z"}),p.a.createElement(v.Rect,{x:"11",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"11",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"8",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"8",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"5",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"5",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"8",y:"14",width:"8",height:"2"}),p.a.createElement(v.Rect,{x:"14",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"14",y:"8",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"17",y:"11",width:"2",height:"2"}),p.a.createElement(v.Rect,{x:"17",y:"8",width:"2",height:"2"})),description:Object(y.__)("An image grid block."),category:"common",supports:{className:!0,inserter:!0,reusable:!1,html:!1},styles:[{name:"default",label:Object(y.__)("Default"),isDefault:!0}],attributes:{h:{type:"number",default:1},w:{type:"number",default:1}},transforms:{from:[{type:"block",blocks:["gecko/grid-layout-image","gecko/grid-layout-item"],transform:function(e,t){var n=Object(k.select)("core/editor").getSelectedBlock(),r=e.h,a=e.w;return Object(u.createBlock)("gecko/grid-layout-basic",{h:r,w:a},n.innerBlocks)}}]},deprecated:[{migrate:function(){},save:function(){return p.a.createElement(_.InnerBlocks.Content,null)}}],edit:function(e){var t=e.attributes,n=e.setAttributes,r=(e.className,e.insertBlocksAfter),a=t.h,o=t.w,i={gridColumnEnd:"span "+o,gridRowEnd:"span "+a};return p.a.createElement(b.Fragment,null,p.a.createElement(_.InspectorControls,null,p.a.createElement(v.PanelBody,{title:"Grid Item"},p.a.createElement(v.RangeControl,{label:Object(y.__)("Width"),value:o,onChange:function(e){n({w:e})},min:1,max:12}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Span Rows"),value:a,onChange:function(e){n({h:e})},min:1,max:12}))),p.a.createElement("div",{className:"gecko-grid-layout-editor-styles",style:i}),p.a.createElement("div",{className:"wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-basic ".concat(t.className)},"function"==typeof r?p.a.createElement(_.InnerBlocks,{templateLock:!1}):p.a.createElement("p",null,"Lorem Ipsum")))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}};Object(u.registerBlockType)("gecko/grid-layout",j),Object(u.registerBlockType)("gecko/grid-layout-basic",I),Object(u.registerBlockType)("gecko/grid-layout-image",H),Object(u.registerBlockType)("gecko/grid-layout-item",R),jQuery(function(t){function n(){t(".gecko-grid-layout-editor-styles").each(function(){var e=new MutationObserver(function(e){e.forEach(function(e){t('[data-type="gecko/grid-layout-basic"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)}),t('[data-type="gecko/grid-layout-image"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)}),t('[data-type="gecko/grid-layout-item"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)})})});e.disconnect(),e.observe(this,{attributes:!0,attributeFilter:["style"]})})}function r(){t(".wp-block-gecko-grid-layout-editor").each(function(){var e=new MutationObserver(function(e){e.forEach(function(e){t(".wp-block-gecko-grid-layout-editor").each(function(){var e=t(this).attr("data-passthru");t(this).attr("data-grid");t(this).find(".editor-block-list__layout").attr("style",e)})})});e.disconnect(),e.observe(this,{attributes:!0,attributeFilter:["data-passthru","style"]})})}function a(){t('[data-type="gecko/grid-layout-image"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)}),t('[data-type="gecko/grid-layout-basic"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)}),t('[data-type="gecko/grid-layout-item"]').each(function(){var e=t(this).find(".gecko-grid-layout-editor-styles").attr("style");t(this).attr("style",e)})}function o(){t(".wp-block-gecko-grid-layout-editor").each(function(){var e=t(this).attr("data-passthru");t(this).attr("data-grid");t(this).find(".editor-block-list__layout").attr("style",e)})}t("body").on("DOMNodeInserted",".wp-block-gecko-grid-layout-editor",function(e){t(".wp-block-gecko-grid-layout-editor")&&(o(),a(),r(),n())}),t(window).load(function(){o(),a(),r(),n()})})}]);
  • gecko-grid-layout/trunk/dist/public.bundle.js

    r2044925 r2046151  
    1 /******/ (function(modules) { // webpackBootstrap
    2 /******/    // The module cache
    3 /******/    var installedModules = {};
    4 /******/
    5 /******/    // The require function
    6 /******/    function __webpack_require__(moduleId) {
    7 /******/
    8 /******/        // Check if module is in cache
    9 /******/        if(installedModules[moduleId]) {
    10 /******/            return installedModules[moduleId].exports;
    11 /******/        }
    12 /******/        // Create a new module (and put it into the cache)
    13 /******/        var module = installedModules[moduleId] = {
    14 /******/            i: moduleId,
    15 /******/            l: false,
    16 /******/            exports: {}
    17 /******/        };
    18 /******/
    19 /******/        // Execute the module function
    20 /******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
    21 /******/
    22 /******/        // Flag the module as loaded
    23 /******/        module.l = true;
    24 /******/
    25 /******/        // Return the exports of the module
    26 /******/        return module.exports;
    27 /******/    }
    28 /******/
    29 /******/
    30 /******/    // expose the modules object (__webpack_modules__)
    31 /******/    __webpack_require__.m = modules;
    32 /******/
    33 /******/    // expose the module cache
    34 /******/    __webpack_require__.c = installedModules;
    35 /******/
    36 /******/    // define getter function for harmony exports
    37 /******/    __webpack_require__.d = function(exports, name, getter) {
    38 /******/        if(!__webpack_require__.o(exports, name)) {
    39 /******/            Object.defineProperty(exports, name, { enumerable: true, get: getter });
    40 /******/        }
    41 /******/    };
    42 /******/
    43 /******/    // define __esModule on exports
    44 /******/    __webpack_require__.r = function(exports) {
    45 /******/        if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
    46 /******/            Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
    47 /******/        }
    48 /******/        Object.defineProperty(exports, '__esModule', { value: true });
    49 /******/    };
    50 /******/
    51 /******/    // create a fake namespace object
    52 /******/    // mode & 1: value is a module id, require it
    53 /******/    // mode & 2: merge all properties of value into the ns
    54 /******/    // mode & 4: return value when already ns object
    55 /******/    // mode & 8|1: behave like require
    56 /******/    __webpack_require__.t = function(value, mode) {
    57 /******/        if(mode & 1) value = __webpack_require__(value);
    58 /******/        if(mode & 8) return value;
    59 /******/        if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
    60 /******/        var ns = Object.create(null);
    61 /******/        __webpack_require__.r(ns);
    62 /******/        Object.defineProperty(ns, 'default', { enumerable: true, value: value });
    63 /******/        if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
    64 /******/        return ns;
    65 /******/    };
    66 /******/
    67 /******/    // getDefaultExport function for compatibility with non-harmony modules
    68 /******/    __webpack_require__.n = function(module) {
    69 /******/        var getter = module && module.__esModule ?
    70 /******/            function getDefault() { return module['default']; } :
    71 /******/            function getModuleExports() { return module; };
    72 /******/        __webpack_require__.d(getter, 'a', getter);
    73 /******/        return getter;
    74 /******/    };
    75 /******/
    76 /******/    // Object.prototype.hasOwnProperty.call
    77 /******/    __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
    78 /******/
    79 /******/    // __webpack_public_path__
    80 /******/    __webpack_require__.p = "/wp-content/plugins/gecko-grid-layout/dist/";
    81 /******/
    82 /******/
    83 /******/    // Load entry module and return exports
    84 /******/    return __webpack_require__(__webpack_require__.s = "./src/public.js");
    85 /******/ })
    86 /************************************************************************/
    87 /******/ ({
    88 
    89 /***/ "./src/public.js":
    90 /*!***********************!*\
    91   !*** ./src/public.js ***!
    92   \***********************/
    93 /*! no static exports found */
    94 /***/ (function(module, exports) {
    95 
    96 // https://developers.google.com/web/fundamentals/performance/lazy-loading-guidance/images-and-video/
    97 // IntersectionObserver if supported
    98 // document.addEventListener("DOMContentLoaded", function () {
    99 //  var lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));
    100 //  if ("IntersectionObserver" in window) {
    101 //      let lazyImageObserver = new IntersectionObserver(function (entries, observer) {
    102 //          entries.forEach(function (entry) {
    103 //              if (entry.isIntersecting) {
    104 //                  let lazyImage = entry.target;
    105 //                  lazyImage.src = lazyImage.dataset.src;
    106 //                  lazyImage.srcset = lazyImage.dataset.srcset;
    107 //                  lazyImage.classList.remove("lazy");
    108 //                  lazyImageObserver.unobserve(lazyImage);
    109 //              }
    110 //          });
    111 //      });
    112 //      lazyImages.forEach(function (lazyImage) {
    113 //          lazyImageObserver.observe(lazyImage);
    114 //      });
    115 //  } else {
    116 //      // Possibly fall back to a more compatible method here
    117 //  }
    118 // });
    119 document.addEventListener("DOMContentLoaded", function () {
    120   var lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));
    121   var active = false;
    122 
    123   var lazyLoad = function lazyLoad() {
    124     if (active === false) {
    125       active = true;
    126       setTimeout(function () {
    127         lazyImages.forEach(function (lazyImage) {
    128           if (lazyImage.getBoundingClientRect().top <= window.innerHeight && lazyImage.getBoundingClientRect().bottom >= 0 && getComputedStyle(lazyImage).display !== "none") {
    129             lazyImage.src = lazyImage.dataset.src;
    130             lazyImage.srcset = lazyImage.dataset.srcset;
    131             lazyImage.classList.remove("lazy");
    132             lazyImages = lazyImages.filter(function (image) {
    133               return image !== lazyImage;
    134             });
    135 
    136             if (lazyImages.length === 0) {
    137               document.removeEventListener("scroll", lazyLoad);
    138               window.removeEventListener("resize", lazyLoad);
    139               window.removeEventListener("orientationchange", lazyLoad);
    140             }
    141           }
    142         });
    143         active = false;
    144       }, 200);
    145     }
    146   };
    147 
    148   document.addEventListener("scroll", lazyLoad);
    149   window.addEventListener("DOMContentLoaded", lazyLoad);
    150   window.addEventListener("resize", lazyLoad);
    151   window.addEventListener("orientationchange", lazyLoad);
    152 });
    153 
    154 /***/ })
    155 
    156 /******/ });
    157 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3B1YmxpYy5qcyJdLCJuYW1lcyI6WyJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJsYXp5SW1hZ2VzIiwic2xpY2UiLCJjYWxsIiwicXVlcnlTZWxlY3RvckFsbCIsImFjdGl2ZSIsImxhenlMb2FkIiwic2V0VGltZW91dCIsImZvckVhY2giLCJsYXp5SW1hZ2UiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsImJvdHRvbSIsImdldENvbXB1dGVkU3R5bGUiLCJkaXNwbGF5Iiwic3JjIiwiZGF0YXNldCIsInNyY3NldCIsImNsYXNzTGlzdCIsInJlbW92ZSIsImZpbHRlciIsImltYWdlIiwibGVuZ3RoIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixrQkFBMUIsRUFBOEMsWUFBWTtBQUN6RCxNQUFJQyxVQUFVLEdBQUcsR0FBR0MsS0FBSCxDQUFTQyxJQUFULENBQWNKLFFBQVEsQ0FBQ0ssZ0JBQVQsQ0FBMEIsVUFBMUIsQ0FBZCxDQUFqQjtBQUNBLE1BQUlDLE1BQU0sR0FBRyxLQUFiOztBQUVBLE1BQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFXLEdBQVk7QUFDNUIsUUFBSUQsTUFBTSxLQUFLLEtBQWYsRUFBc0I7QUFDckJBLFlBQU0sR0FBRyxJQUFUO0FBRUFFLGdCQUFVLENBQUMsWUFBWTtBQUN0Qk4sa0JBQVUsQ0FBQ08sT0FBWCxDQUFtQixVQUFVQyxTQUFWLEVBQXFCO0FBQ3ZDLGNBQUtBLFNBQVMsQ0FBQ0MscUJBQVYsR0FBa0NDLEdBQWxDLElBQXlDQyxNQUFNLENBQUNDLFdBQWhELElBQStESixTQUFTLENBQUNDLHFCQUFWLEdBQWtDSSxNQUFsQyxJQUE0QyxDQUE1RyxJQUFrSEMsZ0JBQWdCLENBQUNOLFNBQUQsQ0FBaEIsQ0FBNEJPLE9BQTVCLEtBQXdDLE1BQTlKLEVBQXNLO0FBQ3JLUCxxQkFBUyxDQUFDUSxHQUFWLEdBQWdCUixTQUFTLENBQUNTLE9BQVYsQ0FBa0JELEdBQWxDO0FBQ0FSLHFCQUFTLENBQUNVLE1BQVYsR0FBbUJWLFNBQVMsQ0FBQ1MsT0FBVixDQUFrQkMsTUFBckM7QUFDQVYscUJBQVMsQ0FBQ1csU0FBVixDQUFvQkMsTUFBcEIsQ0FBMkIsTUFBM0I7QUFFQXBCLHNCQUFVLEdBQUdBLFVBQVUsQ0FBQ3FCLE1BQVgsQ0FBa0IsVUFBVUMsS0FBVixFQUFpQjtBQUMvQyxxQkFBT0EsS0FBSyxLQUFLZCxTQUFqQjtBQUNBLGFBRlksQ0FBYjs7QUFJQSxnQkFBSVIsVUFBVSxDQUFDdUIsTUFBWCxLQUFzQixDQUExQixFQUE2QjtBQUM1QnpCLHNCQUFRLENBQUMwQixtQkFBVCxDQUE2QixRQUE3QixFQUF1Q25CLFFBQXZDO0FBQ0FNLG9CQUFNLENBQUNhLG1CQUFQLENBQTJCLFFBQTNCLEVBQXFDbkIsUUFBckM7QUFDQU0sb0JBQU0sQ0FBQ2EsbUJBQVAsQ0FBMkIsbUJBQTNCLEVBQWdEbkIsUUFBaEQ7QUFDQTtBQUNEO0FBQ0QsU0FoQkQ7QUFrQkFELGNBQU0sR0FBRyxLQUFUO0FBQ0EsT0FwQlMsRUFvQlAsR0FwQk8sQ0FBVjtBQXFCQTtBQUNELEdBMUJEOztBQTRCQU4sVUFBUSxDQUFDQyxnQkFBVCxDQUEwQixRQUExQixFQUFvQ00sUUFBcEM7QUFDQU0sUUFBTSxDQUFDWixnQkFBUCxDQUF3QixrQkFBeEIsRUFBNENNLFFBQTVDO0FBQ0FNLFFBQU0sQ0FBQ1osZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0NNLFFBQWxDO0FBQ0FNLFFBQU0sQ0FBQ1osZ0JBQVAsQ0FBd0IsbUJBQXhCLEVBQTZDTSxRQUE3QztBQUNBLENBcENELEUiLCJmaWxlIjoicHVibGljLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL3dwLWNvbnRlbnQvcGx1Z2lucy9nZWNrby1ncmlkLWxheW91dC9kaXN0L1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9wdWJsaWMuanNcIik7XG4iLCIvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWIvZnVuZGFtZW50YWxzL3BlcmZvcm1hbmNlL2xhenktbG9hZGluZy1ndWlkYW5jZS9pbWFnZXMtYW5kLXZpZGVvL1xuLy8gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgaWYgc3VwcG9ydGVkXG4vLyBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4vLyBcdHZhciBsYXp5SW1hZ2VzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nLmxhenlcIikpO1xuXG4vLyBcdGlmIChcIkludGVyc2VjdGlvbk9ic2VydmVyXCIgaW4gd2luZG93KSB7XG4vLyBcdFx0bGV0IGxhenlJbWFnZU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzLCBvYnNlcnZlcikge1xuLy8gXHRcdFx0ZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuLy8gXHRcdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbi8vIFx0XHRcdFx0XHRsZXQgbGF6eUltYWdlID0gZW50cnkudGFyZ2V0O1xuLy8gXHRcdFx0XHRcdGxhenlJbWFnZS5zcmMgPSBsYXp5SW1hZ2UuZGF0YXNldC5zcmM7XG4vLyBcdFx0XHRcdFx0bGF6eUltYWdlLnNyY3NldCA9IGxhenlJbWFnZS5kYXRhc2V0LnNyY3NldDtcbi8vIFx0XHRcdFx0XHRsYXp5SW1hZ2UuY2xhc3NMaXN0LnJlbW92ZShcImxhenlcIik7XG4vLyBcdFx0XHRcdFx0bGF6eUltYWdlT2JzZXJ2ZXIudW5vYnNlcnZlKGxhenlJbWFnZSk7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pO1xuLy8gXHRcdH0pO1xuXG4vLyBcdFx0bGF6eUltYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChsYXp5SW1hZ2UpIHtcbi8vIFx0XHRcdGxhenlJbWFnZU9ic2VydmVyLm9ic2VydmUobGF6eUltYWdlKTtcbi8vIFx0XHR9KTtcbi8vIFx0fSBlbHNlIHtcbi8vIFx0XHQvLyBQb3NzaWJseSBmYWxsIGJhY2sgdG8gYSBtb3JlIGNvbXBhdGlibGUgbWV0aG9kIGhlcmVcbi8vIFx0fVxuLy8gfSk7XG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdGxldCBsYXp5SW1hZ2VzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nLmxhenlcIikpO1xuXHRsZXQgYWN0aXZlID0gZmFsc2U7XG5cblx0Y29uc3QgbGF6eUxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKGFjdGl2ZSA9PT0gZmFsc2UpIHtcblx0XHRcdGFjdGl2ZSA9IHRydWU7XG5cblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRsYXp5SW1hZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxhenlJbWFnZSkge1xuXHRcdFx0XHRcdGlmICgobGF6eUltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQgJiYgbGF6eUltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSA+PSAwKSAmJiBnZXRDb21wdXRlZFN0eWxlKGxhenlJbWFnZSkuZGlzcGxheSAhPT0gXCJub25lXCIpIHtcblx0XHRcdFx0XHRcdGxhenlJbWFnZS5zcmMgPSBsYXp5SW1hZ2UuZGF0YXNldC5zcmM7XG5cdFx0XHRcdFx0XHRsYXp5SW1hZ2Uuc3Jjc2V0ID0gbGF6eUltYWdlLmRhdGFzZXQuc3Jjc2V0O1xuXHRcdFx0XHRcdFx0bGF6eUltYWdlLmNsYXNzTGlzdC5yZW1vdmUoXCJsYXp5XCIpO1xuXG5cdFx0XHRcdFx0XHRsYXp5SW1hZ2VzID0gbGF6eUltYWdlcy5maWx0ZXIoZnVuY3Rpb24gKGltYWdlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbWFnZSAhPT0gbGF6eUltYWdlO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChsYXp5SW1hZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGxhenlMb2FkKTtcblx0XHRcdFx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgbGF6eUxvYWQpO1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGxhenlMb2FkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9XG5cdH07XG5cblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBsYXp5TG9hZCk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBsYXp5TG9hZCk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGxhenlMb2FkKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBsYXp5TG9hZCk7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
     1!function(n){var o={};function r(e){if(o[e])return o[e].exports;var t=o[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,r),t.l=!0,t.exports}r.m=n,r.c=o,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/wp-content/plugins/gecko-grid-layout/dist/",r(r.s=18)}({18:function(e,t){document.addEventListener("DOMContentLoaded",function(){var n=[].slice.call(document.querySelectorAll("img.lazy")),t=!1,e=function e(){!1===t&&(t=!0,setTimeout(function(){n.forEach(function(t){t.getBoundingClientRect().top<=window.innerHeight&&0<=t.getBoundingClientRect().bottom&&"none"!==getComputedStyle(t).display&&(t.src=t.dataset.src,t.srcset=t.dataset.srcset,t.classList.remove("lazy"),0===(n=n.filter(function(e){return e!==t})).length&&(document.removeEventListener("scroll",e),window.removeEventListener("resize",e),window.removeEventListener("orientationchange",e)))}),t=!1},200))};document.addEventListener("scroll",e),window.addEventListener("DOMContentLoaded",e),window.addEventListener("resize",e),window.addEventListener("orientationchange",e)})}});
  • gecko-grid-layout/trunk/dist/style.css

    r2046091 r2046151  
    8585  opacity: 1;
    8686}
    87 
    88 /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3R5bGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGFBQWE7RUFDYixvREFBb0Q7RUFDcEQsY0FBYztFQUNkLDRDQUE0QztFQUM1QyxxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLFdBQVc7QUFDYjtBQUNBO0VBQ0U7SUFDRSxrREFBa0Q7SUFDbEQsNENBQTRDO0VBQzlDO0FBQ0Y7QUFDQTtFQUNFO0lBQ0Usa0RBQWtEO0lBQ2xELDRDQUE0QztFQUM5QztBQUNGO0FBQ0E7RUFDRSx1QkFBdUI7RUFDdkIsb0JBQW9CO0FBQ3RCO0FBQ0E7RUFDRTtJQUNFLDRCQUE0QjtFQUM5QjtBQUNGOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLFVBQVU7QUFDWjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsVUFBVTtFQUNWLGlCQUFpQjtBQUNuQjtBQUNBO0VBQ0Usa0JBQWtCO0VBQ2xCLHVCQUF1QjtFQUN2QixzQkFBc0I7RUFDdEIsb0JBQWlCO0tBQWpCLGlCQUFpQjtFQUNqQiwwQkFBdUI7S0FBdkIsdUJBQXVCO0VBQ3ZCLFdBQVc7QUFDYjtBQUNBO0VBQ0UsYUFBYTtFQUNiLGtCQUFrQjtFQUNsQixvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLDRCQUFzQjtFQUF0Qiw2QkFBc0I7TUFBdEIsMEJBQXNCO1VBQXRCLHNCQUFzQjtFQUN0Qix3QkFBdUI7TUFBdkIscUJBQXVCO1VBQXZCLHVCQUF1QjtFQUN2QixtQkFBbUI7RUFDbkIsWUFBWTtFQUNaLFdBQVc7RUFDWCwyQ0FBMkM7QUFDN0M7QUFDQTtFQUNFLFVBQVU7QUFDWjtBQUNBO0VBQ0UsVUFBVTtFQUNWLHlDQUFpQztFQUFqQyxpQ0FBaUM7QUFDbkM7QUFDQTtFQUNFLFVBQVU7QUFDWixDIiwiZmlsZSI6InN0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDEyLCBtaW5tYXgoMXJlbSwgMWZyKSk7XG4gIGdyaWQtZ2FwOiAxcmVtO1xuICBncmlkLWF1dG8tcm93czogbWlubWF4KGNhbGMoMTAwdncvMTIpLCBhdXRvKTtcbiAgZ3JpZC1hdXRvLWZsb3c6IGRlbnNlO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LmlzLXN0eWxlLW5vLWdhcCB7XG4gIGdyaWQtZ2FwOiAwO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDk2MHB4KSB7XG4gIC53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMHB4LCAxZnIpICFpbXBvcnRhbnQ7XG4gICAgZ3JpZC1hdXRvLXJvd3M6IG1pbm1heCgxcHgsIGF1dG8pICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDBweCwgMWZyKSAhaW1wb3J0YW50O1xuICAgIGdyaWQtYXV0by1yb3dzOiBtaW5tYXgoMXB4LCBhdXRvKSAhaW1wb3J0YW50O1xuICB9XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXRfX2l0ZW0ge1xuICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gNDtcbiAgZ3JpZC1yb3ctZW5kOiBzcGFuIDE7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0X19pdGVtIHtcbiAgICBncmlkLWNvbHVtbjogMS8tMSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xufVxuXG4uZ2Vja28tZ3JpZC1sYXlvdXQtYmFzaWMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWluLWhlaWdodDogMjAwcHg7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2ltYWdlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIG9iamVjdC1wb3NpdGlvbjogY2VudGVyO1xuICB6LWluZGV4OiAtMTtcbn1cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvbiB7XG4gIHBhZGRpbmc6IDFyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UuaXMtc3R5bGUtbm8tY2FwdGlvbiAuZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb24ge1xuICBvcGFjaXR5OiAwO1xufVxuLmdlY2tvLWdyaWQtbGF5b3V0LWltYWdlLmlzLXN0eWxlLWhvdmVyIC5nZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvbiB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IGFsbCAyNTBtcyBlYXNlLWluLW91dDtcbn1cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZS5pcy1zdHlsZS1ob3Zlcjpob3ZlciAuZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb24ge1xuICBvcGFjaXR5OiAxO1xufSJdLCJzb3VyY2VSb290IjoiIn0=*/
  • gecko-grid-layout/trunk/gecko-grid-layout.php

    r2046091 r2046151  
    44 * Plugin URI:  https://github.com/gecko-designs/gecko-grid-layout
    55 * Description: Grid Layout block uses CSS grid to create grid layouts in gutenberg.
    6  * Version: 1.0.9
     6 * Version: 1.1.0
    77 * Author: Gecko Designs
    88 * Author URI: https://geckodesigns.com
  • gecko-grid-layout/trunk/readme.txt

    r2046091 r2046151  
    55Requires at least: 5.0
    66Tested up to: 5.1
    7 Stable tag: 1.0.8
     7Stable tag: 1.1.0
    88Requires PHP: 5.6
    99License: GPLv2 or later
     
    3636
    3737== Changelog ==
     38= 1.1.0 =
     39* Allow Transform core/columns to grid
     40* Code clean up
    3841= 1.0.9 =
    3942* Transforms now move innerblocks
     
    6770
    6871== Upgrade Notice ==
     72= 1.1.0 =
     73* Allow Transform core/columns to grid
     74= 1.0.9 =
     75* Transforms now move innerblocks
    6976= 1.0.8 =
    7077* Grid Layout Templates
Note: See TracChangeset for help on using the changeset viewer.