Plugin Directory

Changeset 2085543


Ignore:
Timestamp:
05/10/2019 06:12:39 PM (7 years ago)
Author:
dwayneparton
Message:

Better IE Support

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

Legend:

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

    r2085474 r2085543  
    270270  background-color: #f0f0f0;
    271271}
    272 
    273 /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZWRpdG9yLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLG1CQUFlO01BQWYsZUFBZTtBQUNqQjtBQUNBO0VBQ0Usa0JBQWtCO0VBQ2xCLGtCQUFrQjtFQUNsQixvQkFBYTtFQUFiLG9CQUFhO0VBQWIsYUFBYTtFQUNiLDRCQUFzQjtFQUF0Qiw2QkFBc0I7TUFBdEIsMEJBQXNCO1VBQXRCLHNCQUFzQjtFQUN0QixrQkFBa0I7RUFDbEIsd0JBQXVCO01BQXZCLHFCQUF1QjtVQUF2Qix1QkFBdUI7RUFDdkIseUJBQW1CO01BQW5CLHNCQUFtQjtVQUFuQixtQkFBbUI7RUFDbkIsZUFBZTtFQUNmLDZCQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsbUJBQVk7TUFBWixvQkFBWTtVQUFaLFlBQVk7RUFDWix5QkFBeUI7RUFDekIsZUFBZTtBQUNqQjtBQUNBO0VBQ0UseUJBQXlCO0FBQzNCO0FBQ0E7RUFDRSx5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsK0NBQStDO0VBQy9DLGtEQUFrRDtFQUNsRCw2RUFBNkU7QUFDL0U7QUFDQTtFQUNFLG9CQUFhO0VBQWIsb0JBQWE7RUFBYixhQUFhO0FBQ2Y7QUFDQTtFQUNFLFdBQVc7QUFDYjtBQUNBO0VBQ0UsWUFBWTtBQUNkO0FBQ0E7RUFDRSxZQUFZO0FBQ2Q7QUFDQTtFQUNFLFlBQVk7QUFDZDtBQUNBO0VBQ0UsWUFBWTtBQUNkO0FBQ0E7RUFDRSxZQUFZO0VBQ1oseUJBQXlCO0VBQ3pCLGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0UsY0FBYztFQUNkLFdBQVc7RUFDWCxXQUFXO0VBQ1gsdUJBQXVCO0VBQ3ZCLGtCQUFrQjtFQUNsQixvQkFBb0I7QUFDdEI7QUFDQTtFQUNFLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLFVBQVU7RUFDVixZQUFZO0VBQ1osdUJBQXVCO0VBQ3ZCLGtCQUFrQjtFQUNsQixxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLFdBQVc7RUFDWCxZQUFZO0VBQ1osc0JBQXNCO0VBQ3RCLGtCQUFrQjtFQUNsQixvQkFBb0I7RUFDcEIscUJBQXFCO0FBQ3ZCO0FBQ0E7RUFDRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsYUFBYTtFQUNiLG1EQUFtRDtFQUNuRCxjQUFjO0VBQ2Qsa0NBQWtDO0VBQ2xDLHFCQUFxQjtFQUNyQiw0QkFBNEI7RUFDNUIsU0FBUztBQUNYO0FBQ0E7RUFDRTtJQUNFLGtEQUFrRDtJQUNsRCw0Q0FBNEM7RUFDOUM7QUFDRjtBQUNBO0VBQ0U7SUFDRSxrREFBa0Q7SUFDbEQsNENBQTRDO0VBQzlDO0FBQ0Y7QUFDQTs7O0VBR0UseUJBQXlCO0VBQ3pCLDBCQUEwQjtFQUMxQix1QkFBdUI7RUFDdkIsb0JBQW9CO0VBQ3BCLFlBQVk7RUFDWixzQkFBc0I7RUFDdEIseUJBQXlCO0VBQ3pCLG9CQUFhO0VBQWIsb0JBQWE7RUFBYixhQUFhO0VBQ2IsNEJBQXNCO0VBQXRCLDZCQUFzQjtNQUF0QiwwQkFBc0I7VUFBdEIsc0JBQXNCO0VBQ3RCLG1CQUFPO01BQVAsV0FBTztVQUFQLE9BQU87RUFDUCw2QkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIsWUFBWTtFQUNaLHNCQUFzQjtFQUN0QiwyQkFBMkI7RUFDM0IsaUNBQWlDO0VBQ2pDLHdDQUF3QztFQUN4Qyw0QkFBNEI7QUFDOUI7QUFDQTtFQUNFOzs7SUFHRSw0QkFBNEI7RUFDOUI7QUFDRjtBQUNBOzs7RUFHRSxnQkFBZ0I7QUFDbEI7QUFDQTtFQUNFLDZCQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsb0JBQWE7RUFBYixvQkFBYTtFQUFiLGFBQWE7RUFDYiw0QkFBc0I7RUFBdEIsNkJBQXNCO01BQXRCLDBCQUFzQjtVQUF0QixzQkFBc0I7RUFDdEIsbUJBQU87TUFBUCxXQUFPO1VBQVAsT0FBTztBQUNUO0FBQ0E7RUFDRSw2QkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLFlBQVk7QUFDZDtBQUNBO0VBQ0UsZ0JBQWdCO0VBQ2hCLG1CQUFtQjtBQUNyQjtBQUNBO0VBQ0UsY0FBYztFQUNkLGtCQUFrQjtFQUNsQixpQkFBaUI7RUFDakIsb0JBQW9CO0VBQ3BCLGVBQWU7RUFDZix5QkFBeUI7QUFDM0I7QUFDQTtFQUNFLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLHdCQUF3QjtBQUMxQjs7QUFFQTs7O0VBR0Usb0JBQWE7RUFBYixvQkFBYTtFQUFiLGFBQWE7RUFDYiw0QkFBc0I7RUFBdEIsNkJBQXNCO01BQXRCLDBCQUFzQjtVQUF0QixzQkFBc0I7RUFDdEIsWUFBWTtFQUNaLFdBQVc7RUFDWCxTQUFTO0FBQ1g7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UscUJBQXFCO0FBQ3ZCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHFEQUFxRDtFQUNyRCxjQUFjO0VBQ2Qsb0JBQW9CO0VBQ3BCLHFCQUFxQjtBQUN2QjtBQUNBO0VBQ0UsY0FBYztFQUNkLHVCQUF1QjtFQUN2QixvQkFBb0I7RUFDcEIsYUFBYTtFQUNiLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIseUJBQXlCO0VBQ3pCLGVBQWU7RUFDZixrQkFBa0I7QUFDcEI7QUFDQTtFQUNFLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQix5QkFBeUI7RUFDekIsWUFBWTtFQUNaLGFBQWE7RUFDYixxREFBcUQ7RUFDckQsYUFBYTtFQUNiLGtDQUFrQztFQUNsQyxxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLGNBQWM7RUFDZCx1QkFBdUI7RUFDdkIsb0JBQW9CO0VBQ3BCLHlCQUF5QjtBQUMzQixDIiwiZmlsZSI6ImVkaXRvci1zdHlsZXMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0X19pdGVtIHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgZmxleC1iYXNpczogOTBweDtcbiAgZmxleC1ncm93OiAwO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtdHlwZS1zZWxlY3RfX2l0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkFGQUZBO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LXR5cGUtc2VsZWN0X19pdGVtLS1zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7XG59XG5cbi5nZWNrby10cmJsIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiByZXBlYXQoMywgbWlubWF4KDFweCwgMWZyKSk7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIG1pbm1heCgxcHgsIDFmcikpO1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcInRsIHRsIHQgdCB0IHRyIHRyXCIgXCJsIGwgbCBjIHIgciByIFwiIFwiYmwgYmwgYiBiIGIgYnIgYnJcIjtcbn1cbi5nZWNrby10cmJsX19pbnB1dCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uZ2Vja28tdHJibF9faW5wdXQgaW5wdXQge1xuICB3aWR0aDogMTAwJTtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tdCB7XG4gIGdyaWQtYXJlYTogdDtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tciB7XG4gIGdyaWQtYXJlYTogcjtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tYiB7XG4gIGdyaWQtYXJlYTogYjtcbn1cbi5nZWNrby10cmJsX19pbnB1dC0tbCB7XG4gIGdyaWQtYXJlYTogbDtcbn1cbi5nZWNrby10cmJsX19sb2NrIHtcbiAgZ3JpZC1hcmVhOiBjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBkaW1ncmF5O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uZ2Vja28tdHJibF9fbG9ja19feCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYyg1MCUgLSAxcHgpO1xufVxuLmdlY2tvLXRyYmxfX2xvY2tfX3gudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbi5nZWNrby10cmJsX19sb2NrX195IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAycHg7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogY2FsYyg1MCUgLSAxcHgpO1xufVxuLmdlY2tvLXRyYmxfX2xvY2tfX3kudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbi5nZWNrby10cmJsX19sb2NrX194eSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYyg1MCUgLSA1cHgpO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDVweCk7XG59XG4uZ2Vja28tdHJibF9fbG9ja19feHkudHJ1ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cblxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciA+IC5lZGl0b3ItaW5uZXItYmxvY2tzID4gLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXQge1xuICBwYWRkaW5nOiAxcmVtO1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxMiwgbWlubWF4KDFweCwgMWZyKSk7XG4gIGdyaWQtZ2FwOiAxcmVtO1xuICBncmlkLWF1dG8tcm93czogbWlubWF4KDUwcHgsIGF1dG8pO1xuICBncmlkLWF1dG8tZmxvdzogZGVuc2U7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7XG4gIG1hcmdpbjogMDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3MjBweCkge1xuICAud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMHB4LCAxZnIpICFpbXBvcnRhbnQ7XG4gICAgZ3JpZC1hdXRvLXJvd3M6IG1pbm1heCgxcHgsIGF1dG8pICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMHB4LCAxZnIpICFpbXBvcnRhbnQ7XG4gICAgZ3JpZC1hdXRvLXJvd3M6IG1pbm1heCgxcHgsIGF1dG8pICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWl0ZW1cIl0sXG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCA+IFtkYXRhLXR5cGU9XCJnZWNrby9ncmlkLWxheW91dC1iYXNpY1wiXSxcbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWltYWdlXCJdIHtcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiAxO1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgbWluLXdpZHRoOiAwO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAxO1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICBwYWRkaW5nLXRvcDogMDtcbiAgcGFkZGluZy1ib3R0b206IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciA+IC5lZGl0b3ItaW5uZXItYmxvY2tzID4gLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXQgPiBbZGF0YS10eXBlPVwiZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbVwiXSxcbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWJhc2ljXCJdLFxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciA+IC5lZGl0b3ItaW5uZXItYmxvY2tzID4gLmVkaXRvci1ibG9jay1saXN0X19sYXlvdXQgPiBbZGF0YS10eXBlPVwiZ2Vja28vZ3JpZC1sYXlvdXQtaW1hZ2VcIl0ge1xuICAgIGdyaWQtY29sdW1uOiAxLy0xICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWl0ZW1cIl0gLmVkaXRvci1tZWRpYS1wbGFjZWhvbGRlcixcbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0ID4gW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWJhc2ljXCJdIC5lZGl0b3ItbWVkaWEtcGxhY2Vob2xkZXIsXG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCA+IFtkYXRhLXR5cGU9XCJnZWNrby9ncmlkLWxheW91dC1pbWFnZVwiXSAuZWRpdG9yLW1lZGlhLXBsYWNlaG9sZGVyIHtcbiAgbWluLWhlaWdodDogMTAwJTtcbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3IgPiAuZWRpdG9yLWlubmVyLWJsb2NrcyA+IC5lZGl0b3ItYmxvY2stbGlzdF9fbGF5b3V0IC5lZGl0b3ItYmxvY2stbGlzdF9fYmxvY2stZWRpdCB7XG4gIGZsZXgtYmFzaXM6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXg6IDE7XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCAuZWRpdG9yLWJsb2NrLWxpc3RfX2Jsb2NrLWVkaXQgPiBbZGF0YS1ibG9ja10ge1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yID4gLmVkaXRvci1pbm5lci1ibG9ja3MgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCA+IC5lZGl0b3ItYmxvY2stbGlzdF9fYmxvY2sgPiAuZWRpdG9yLWJsb2NrLWxpc3RfX2Jsb2NrLWVkaXQge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciAuYmxvY2stbGlzdC1hcHBlbmRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGdyaWQtY29sdW1uOiAxLy0xO1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvciAuYmxvY2stbGlzdC1hcHBlbmRlcjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2YzZjM7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uZ2Vja28tZ3JpZC1sYXlvdXQtYmFzaWMsXG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UsXG4uZ2Vja28tZ3JpZC1sYXlvdXQtaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbn1cblxuW2RhdGEtdHlwZT1cImdlY2tvL2dyaWQtbGF5b3V0LWltYWdlXCJdLmlzLXNlbGVjdGVkIC5jb21wb25lbnRzLXJlc2l6YWJsZS1ib3hfX2hhbmRsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uaXMtZHJhZ2dpbmctY29tcG9uZW50cy1kcmFnZ2FibGUgLmdlY2tvLWdyaWQtbGF5b3V0LWltYWdlLmlzLXN0eWxlLWhvdmVyIC5nZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvbiB7XG4gIG9wYWNpdHk6IDEgIWltcG9ydGFudDtcbn1cblxuLmdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGVzIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMTIsIG1pbm1heCgxNXB4LCBhdXRvKSk7XG4gIGdyaWQtZ2FwOiAxcmVtO1xuICBncmlkLWF1dG8tcm93czogYXV0bztcbiAgZ3JpZC1hdXRvLWZsb3c6IGRlbnNlO1xufVxuLmdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuIDQ7XG4gIGdyaWQtcm93LWVuZDogc3BhbiAxO1xuICBwYWRkaW5nOiAxcmVtO1xuICBmb250LXNpemU6IDFyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QwRDBEMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtc2VsZWN0X190ZW1wbGF0ZTpob3ZlciB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNmMGYwZjA7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1wcmV2aWV3IHtcbiAgbWluLWhlaWdodDogMTAwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEMEQwRDA7XG4gIHBhZGRpbmc6IDNweDtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMTIsIG1pbm1heCgxNXB4LCBhdXRvKSk7XG4gIGdyaWQtZ2FwOiAzcHg7XG4gIGdyaWQtYXV0by1yb3dzOiBtaW5tYXgoMTVweCwgYXV0byk7XG4gIGdyaWQtYXV0by1mbG93OiBkZW5zZTtcbn1cbi5nZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1wcmV2aWV3X19pdGVtIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xuICBncmlkLXJvdy1lbmQ6IHNwYW4gMTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbn0iXSwic291cmNlUm9vdCI6IiJ9*/
  • gecko-grid-layout/trunk/dist/editor.bundle.js

    r2085474 r2085543  
    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/lodash/_Symbol.js":
    295 /*!****************************************!*\
    296   !*** ./node_modules/lodash/_Symbol.js ***!
    297   \****************************************/
    298 /*! no static exports found */
    299 /***/ (function(module, exports, __webpack_require__) {
    300 
    301 var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");
    302 
    303 /** Built-in value references. */
    304 var Symbol = root.Symbol;
    305 
    306 module.exports = Symbol;
    307 
    308 
    309 /***/ }),
    310 
    311 /***/ "./node_modules/lodash/_baseGetTag.js":
    312 /*!********************************************!*\
    313   !*** ./node_modules/lodash/_baseGetTag.js ***!
    314   \********************************************/
    315 /*! no static exports found */
    316 /***/ (function(module, exports, __webpack_require__) {
    317 
    318 var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"),
    319     getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"),
    320     objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js");
    321 
    322 /** `Object#toString` result references. */
    323 var nullTag = '[object Null]',
    324     undefinedTag = '[object Undefined]';
    325 
    326 /** Built-in value references. */
    327 var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
    328 
    329 /**
    330  * The base implementation of `getTag` without fallbacks for buggy environments.
    331  *
    332  * @private
    333  * @param {*} value The value to query.
    334  * @returns {string} Returns the `toStringTag`.
    335  */
    336 function baseGetTag(value) {
    337   if (value == null) {
    338     return value === undefined ? undefinedTag : nullTag;
    339   }
    340   return (symToStringTag && symToStringTag in Object(value))
    341     ? getRawTag(value)
    342     : objectToString(value);
    343 }
    344 
    345 module.exports = baseGetTag;
    346 
    347 
    348 /***/ }),
    349 
    350 /***/ "./node_modules/lodash/_freeGlobal.js":
    351 /*!********************************************!*\
    352   !*** ./node_modules/lodash/_freeGlobal.js ***!
    353   \********************************************/
    354 /*! no static exports found */
    355 /***/ (function(module, exports, __webpack_require__) {
    356 
    357 /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
    358 var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
    359 
    360 module.exports = freeGlobal;
    361 
    362 /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
    363 
    364 /***/ }),
    365 
    366 /***/ "./node_modules/lodash/_getRawTag.js":
    367 /*!*******************************************!*\
    368   !*** ./node_modules/lodash/_getRawTag.js ***!
    369   \*******************************************/
    370 /*! no static exports found */
    371 /***/ (function(module, exports, __webpack_require__) {
    372 
    373 var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js");
    374 
    375 /** Used for built-in method references. */
    376 var objectProto = Object.prototype;
    377 
    378 /** Used to check objects for own properties. */
    379 var hasOwnProperty = objectProto.hasOwnProperty;
    380 
    381 /**
    382  * Used to resolve the
    383  * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
    384  * of values.
    385  */
    386 var nativeObjectToString = objectProto.toString;
    387 
    388 /** Built-in value references. */
    389 var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
    390 
    391 /**
    392  * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
    393  *
    394  * @private
    395  * @param {*} value The value to query.
    396  * @returns {string} Returns the raw `toStringTag`.
    397  */
    398 function getRawTag(value) {
    399   var isOwn = hasOwnProperty.call(value, symToStringTag),
    400       tag = value[symToStringTag];
    401 
    402   try {
    403     value[symToStringTag] = undefined;
    404     var unmasked = true;
    405   } catch (e) {}
    406 
    407   var result = nativeObjectToString.call(value);
    408   if (unmasked) {
    409     if (isOwn) {
    410       value[symToStringTag] = tag;
    411     } else {
    412       delete value[symToStringTag];
    413     }
    414   }
    415   return result;
    416 }
    417 
    418 module.exports = getRawTag;
    419 
    420 
    421 /***/ }),
    422 
    423 /***/ "./node_modules/lodash/_objectToString.js":
    424 /*!************************************************!*\
    425   !*** ./node_modules/lodash/_objectToString.js ***!
    426   \************************************************/
    427 /*! no static exports found */
    428 /***/ (function(module, exports) {
    429 
    430 /** Used for built-in method references. */
    431 var objectProto = Object.prototype;
    432 
    433 /**
    434  * Used to resolve the
    435  * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
    436  * of values.
    437  */
    438 var nativeObjectToString = objectProto.toString;
    439 
    440 /**
    441  * Converts `value` to a string using `Object.prototype.toString`.
    442  *
    443  * @private
    444  * @param {*} value The value to convert.
    445  * @returns {string} Returns the converted string.
    446  */
    447 function objectToString(value) {
    448   return nativeObjectToString.call(value);
    449 }
    450 
    451 module.exports = objectToString;
    452 
    453 
    454 /***/ }),
    455 
    456 /***/ "./node_modules/lodash/_root.js":
    457 /*!**************************************!*\
    458   !*** ./node_modules/lodash/_root.js ***!
    459   \**************************************/
    460 /*! no static exports found */
    461 /***/ (function(module, exports, __webpack_require__) {
    462 
    463 var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js");
    464 
    465 /** Detect free variable `self`. */
    466 var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
    467 
    468 /** Used as a reference to the global object. */
    469 var root = freeGlobal || freeSelf || Function('return this')();
    470 
    471 module.exports = root;
    472 
    473 
    474 /***/ }),
    475 
    476 /***/ "./node_modules/lodash/debounce.js":
    477 /*!*****************************************!*\
    478   !*** ./node_modules/lodash/debounce.js ***!
    479   \*****************************************/
    480 /*! no static exports found */
    481 /***/ (function(module, exports, __webpack_require__) {
    482 
    483 var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"),
    484     now = __webpack_require__(/*! ./now */ "./node_modules/lodash/now.js"),
    485     toNumber = __webpack_require__(/*! ./toNumber */ "./node_modules/lodash/toNumber.js");
    486 
    487 /** Error message constants. */
    488 var FUNC_ERROR_TEXT = 'Expected a function';
    489 
    490 /* Built-in method references for those with the same name as other `lodash` methods. */
    491 var nativeMax = Math.max,
    492     nativeMin = Math.min;
    493 
    494 /**
    495  * Creates a debounced function that delays invoking `func` until after `wait`
    496  * milliseconds have elapsed since the last time the debounced function was
    497  * invoked. The debounced function comes with a `cancel` method to cancel
    498  * delayed `func` invocations and a `flush` method to immediately invoke them.
    499  * Provide `options` to indicate whether `func` should be invoked on the
    500  * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
    501  * with the last arguments provided to the debounced function. Subsequent
    502  * calls to the debounced function return the result of the last `func`
    503  * invocation.
    504  *
    505  * **Note:** If `leading` and `trailing` options are `true`, `func` is
    506  * invoked on the trailing edge of the timeout only if the debounced function
    507  * is invoked more than once during the `wait` timeout.
    508  *
    509  * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
    510  * until to the next tick, similar to `setTimeout` with a timeout of `0`.
    511  *
    512  * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
    513  * for details over the differences between `_.debounce` and `_.throttle`.
    514  *
    515  * @static
    516  * @memberOf _
    517  * @since 0.1.0
    518  * @category Function
    519  * @param {Function} func The function to debounce.
    520  * @param {number} [wait=0] The number of milliseconds to delay.
    521  * @param {Object} [options={}] The options object.
    522  * @param {boolean} [options.leading=false]
    523  *  Specify invoking on the leading edge of the timeout.
    524  * @param {number} [options.maxWait]
    525  *  The maximum time `func` is allowed to be delayed before it's invoked.
    526  * @param {boolean} [options.trailing=true]
    527  *  Specify invoking on the trailing edge of the timeout.
    528  * @returns {Function} Returns the new debounced function.
    529  * @example
    530  *
    531  * // Avoid costly calculations while the window size is in flux.
    532  * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
    533  *
    534  * // Invoke `sendMail` when clicked, debouncing subsequent calls.
    535  * jQuery(element).on('click', _.debounce(sendMail, 300, {
    536  *   'leading': true,
    537  *   'trailing': false
    538  * }));
    539  *
    540  * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
    541  * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
    542  * var source = new EventSource('/stream');
    543  * jQuery(source).on('message', debounced);
    544  *
    545  * // Cancel the trailing debounced invocation.
    546  * jQuery(window).on('popstate', debounced.cancel);
    547  */
    548 function debounce(func, wait, options) {
    549   var lastArgs,
    550       lastThis,
    551       maxWait,
    552       result,
    553       timerId,
    554       lastCallTime,
    555       lastInvokeTime = 0,
    556       leading = false,
    557       maxing = false,
    558       trailing = true;
    559 
    560   if (typeof func != 'function') {
    561     throw new TypeError(FUNC_ERROR_TEXT);
    562   }
    563   wait = toNumber(wait) || 0;
    564   if (isObject(options)) {
    565     leading = !!options.leading;
    566     maxing = 'maxWait' in options;
    567     maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
    568     trailing = 'trailing' in options ? !!options.trailing : trailing;
    569   }
    570 
    571   function invokeFunc(time) {
    572     var args = lastArgs,
    573         thisArg = lastThis;
    574 
    575     lastArgs = lastThis = undefined;
    576     lastInvokeTime = time;
    577     result = func.apply(thisArg, args);
    578     return result;
    579   }
    580 
    581   function leadingEdge(time) {
    582     // Reset any `maxWait` timer.
    583     lastInvokeTime = time;
    584     // Start the timer for the trailing edge.
    585     timerId = setTimeout(timerExpired, wait);
    586     // Invoke the leading edge.
    587     return leading ? invokeFunc(time) : result;
    588   }
    589 
    590   function remainingWait(time) {
    591     var timeSinceLastCall = time - lastCallTime,
    592         timeSinceLastInvoke = time - lastInvokeTime,
    593         timeWaiting = wait - timeSinceLastCall;
    594 
    595     return maxing
    596       ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
    597       : timeWaiting;
    598   }
    599 
    600   function shouldInvoke(time) {
    601     var timeSinceLastCall = time - lastCallTime,
    602         timeSinceLastInvoke = time - lastInvokeTime;
    603 
    604     // Either this is the first call, activity has stopped and we're at the
    605     // trailing edge, the system time has gone backwards and we're treating
    606     // it as the trailing edge, or we've hit the `maxWait` limit.
    607     return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
    608       (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
    609   }
    610 
    611   function timerExpired() {
    612     var time = now();
    613     if (shouldInvoke(time)) {
    614       return trailingEdge(time);
    615     }
    616     // Restart the timer.
    617     timerId = setTimeout(timerExpired, remainingWait(time));
    618   }
    619 
    620   function trailingEdge(time) {
    621     timerId = undefined;
    622 
    623     // Only invoke if we have `lastArgs` which means `func` has been
    624     // debounced at least once.
    625     if (trailing && lastArgs) {
    626       return invokeFunc(time);
    627     }
    628     lastArgs = lastThis = undefined;
    629     return result;
    630   }
    631 
    632   function cancel() {
    633     if (timerId !== undefined) {
    634       clearTimeout(timerId);
    635     }
    636     lastInvokeTime = 0;
    637     lastArgs = lastCallTime = lastThis = timerId = undefined;
    638   }
    639 
    640   function flush() {
    641     return timerId === undefined ? result : trailingEdge(now());
    642   }
    643 
    644   function debounced() {
    645     var time = now(),
    646         isInvoking = shouldInvoke(time);
    647 
    648     lastArgs = arguments;
    649     lastThis = this;
    650     lastCallTime = time;
    651 
    652     if (isInvoking) {
    653       if (timerId === undefined) {
    654         return leadingEdge(lastCallTime);
    655       }
    656       if (maxing) {
    657         // Handle invocations in a tight loop.
    658         timerId = setTimeout(timerExpired, wait);
    659         return invokeFunc(lastCallTime);
    660       }
    661     }
    662     if (timerId === undefined) {
    663       timerId = setTimeout(timerExpired, wait);
    664     }
    665     return result;
    666   }
    667   debounced.cancel = cancel;
    668   debounced.flush = flush;
    669   return debounced;
    670 }
    671 
    672 module.exports = debounce;
    673 
    674 
    675 /***/ }),
    676 
    677 /***/ "./node_modules/lodash/isObject.js":
    678 /*!*****************************************!*\
    679   !*** ./node_modules/lodash/isObject.js ***!
    680   \*****************************************/
    681 /*! no static exports found */
    682 /***/ (function(module, exports) {
    683 
    684 /**
    685  * Checks if `value` is the
    686  * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
    687  * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
    688  *
    689  * @static
    690  * @memberOf _
    691  * @since 0.1.0
    692  * @category Lang
    693  * @param {*} value The value to check.
    694  * @returns {boolean} Returns `true` if `value` is an object, else `false`.
    695  * @example
    696  *
    697  * _.isObject({});
    698  * // => true
    699  *
    700  * _.isObject([1, 2, 3]);
    701  * // => true
    702  *
    703  * _.isObject(_.noop);
    704  * // => true
    705  *
    706  * _.isObject(null);
    707  * // => false
    708  */
    709 function isObject(value) {
    710   var type = typeof value;
    711   return value != null && (type == 'object' || type == 'function');
    712 }
    713 
    714 module.exports = isObject;
    715 
    716 
    717 /***/ }),
    718 
    719 /***/ "./node_modules/lodash/isObjectLike.js":
    720 /*!*********************************************!*\
    721   !*** ./node_modules/lodash/isObjectLike.js ***!
    722   \*********************************************/
    723 /*! no static exports found */
    724 /***/ (function(module, exports) {
    725 
    726 /**
    727  * Checks if `value` is object-like. A value is object-like if it's not `null`
    728  * and has a `typeof` result of "object".
    729  *
    730  * @static
    731  * @memberOf _
    732  * @since 4.0.0
    733  * @category Lang
    734  * @param {*} value The value to check.
    735  * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
    736  * @example
    737  *
    738  * _.isObjectLike({});
    739  * // => true
    740  *
    741  * _.isObjectLike([1, 2, 3]);
    742  * // => true
    743  *
    744  * _.isObjectLike(_.noop);
    745  * // => false
    746  *
    747  * _.isObjectLike(null);
    748  * // => false
    749  */
    750 function isObjectLike(value) {
    751   return value != null && typeof value == 'object';
    752 }
    753 
    754 module.exports = isObjectLike;
    755 
    756 
    757 /***/ }),
    758 
    759 /***/ "./node_modules/lodash/isSymbol.js":
    760 /*!*****************************************!*\
    761   !*** ./node_modules/lodash/isSymbol.js ***!
    762   \*****************************************/
    763 /*! no static exports found */
    764 /***/ (function(module, exports, __webpack_require__) {
    765 
    766 var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"),
    767     isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js");
    768 
    769 /** `Object#toString` result references. */
    770 var symbolTag = '[object Symbol]';
    771 
    772 /**
    773  * Checks if `value` is classified as a `Symbol` primitive or object.
    774  *
    775  * @static
    776  * @memberOf _
    777  * @since 4.0.0
    778  * @category Lang
    779  * @param {*} value The value to check.
    780  * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
    781  * @example
    782  *
    783  * _.isSymbol(Symbol.iterator);
    784  * // => true
    785  *
    786  * _.isSymbol('abc');
    787  * // => false
    788  */
    789 function isSymbol(value) {
    790   return typeof value == 'symbol' ||
    791     (isObjectLike(value) && baseGetTag(value) == symbolTag);
    792 }
    793 
    794 module.exports = isSymbol;
    795 
    796 
    797 /***/ }),
    798 
    799 /***/ "./node_modules/lodash/now.js":
    800 /*!************************************!*\
    801   !*** ./node_modules/lodash/now.js ***!
    802   \************************************/
    803 /*! no static exports found */
    804 /***/ (function(module, exports, __webpack_require__) {
    805 
    806 var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");
    807 
    808 /**
    809  * Gets the timestamp of the number of milliseconds that have elapsed since
    810  * the Unix epoch (1 January 1970 00:00:00 UTC).
    811  *
    812  * @static
    813  * @memberOf _
    814  * @since 2.4.0
    815  * @category Date
    816  * @returns {number} Returns the timestamp.
    817  * @example
    818  *
    819  * _.defer(function(stamp) {
    820  *   console.log(_.now() - stamp);
    821  * }, _.now());
    822  * // => Logs the number of milliseconds it took for the deferred invocation.
    823  */
    824 var now = function() {
    825   return root.Date.now();
    826 };
    827 
    828 module.exports = now;
    829 
    830 
    831 /***/ }),
    832 
    833 /***/ "./node_modules/lodash/toNumber.js":
    834 /*!*****************************************!*\
    835   !*** ./node_modules/lodash/toNumber.js ***!
    836   \*****************************************/
    837 /*! no static exports found */
    838 /***/ (function(module, exports, __webpack_require__) {
    839 
    840 var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"),
    841     isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js");
    842 
    843 /** Used as references for various `Number` constants. */
    844 var NAN = 0 / 0;
    845 
    846 /** Used to match leading and trailing whitespace. */
    847 var reTrim = /^\s+|\s+$/g;
    848 
    849 /** Used to detect bad signed hexadecimal string values. */
    850 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
    851 
    852 /** Used to detect binary string values. */
    853 var reIsBinary = /^0b[01]+$/i;
    854 
    855 /** Used to detect octal string values. */
    856 var reIsOctal = /^0o[0-7]+$/i;
    857 
    858 /** Built-in method references without a dependency on `root`. */
    859 var freeParseInt = parseInt;
    860 
    861 /**
    862  * Converts `value` to a number.
    863  *
    864  * @static
    865  * @memberOf _
    866  * @since 4.0.0
    867  * @category Lang
    868  * @param {*} value The value to process.
    869  * @returns {number} Returns the number.
    870  * @example
    871  *
    872  * _.toNumber(3.2);
    873  * // => 3.2
    874  *
    875  * _.toNumber(Number.MIN_VALUE);
    876  * // => 5e-324
    877  *
    878  * _.toNumber(Infinity);
    879  * // => Infinity
    880  *
    881  * _.toNumber('3.2');
    882  * // => 3.2
    883  */
    884 function toNumber(value) {
    885   if (typeof value == 'number') {
    886     return value;
    887   }
    888   if (isSymbol(value)) {
    889     return NAN;
    890   }
    891   if (isObject(value)) {
    892     var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
    893     value = isObject(other) ? (other + '') : other;
    894   }
    895   if (typeof value != 'string') {
    896     return value === 0 ? value : +value;
    897   }
    898   value = value.replace(reTrim, '');
    899   var isBinary = reIsBinary.test(value);
    900   return (isBinary || reIsOctal.test(value))
    901     ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
    902     : (reIsBadHex.test(value) ? NAN : +value);
    903 }
    904 
    905 module.exports = toNumber;
    906 
    907 
    908 /***/ }),
    909 
    910 /***/ "./node_modules/tinycolor2/tinycolor.js":
    911 /*!**********************************************!*\
    912   !*** ./node_modules/tinycolor2/tinycolor.js ***!
    913   \**********************************************/
    914 /*! no static exports found */
    915 /***/ (function(module, exports, __webpack_require__) {
    916 
    917 var __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.1
    918 // https://github.com/bgrins/TinyColor
    919 // Brian Grinstead, MIT License
    920 
    921 (function(Math) {
    922 
    923 var trimLeft = /^\s+/,
    924     trimRight = /\s+$/,
    925     tinyCounter = 0,
    926     mathRound = Math.round,
    927     mathMin = Math.min,
    928     mathMax = Math.max,
    929     mathRandom = Math.random;
    930 
    931 function tinycolor (color, opts) {
    932 
    933     color = (color) ? color : '';
    934     opts = opts || { };
    935 
    936     // If input is already a tinycolor, return itself
    937     if (color instanceof tinycolor) {
    938        return color;
    939     }
    940     // If we are called as a function, call using new instead
    941     if (!(this instanceof tinycolor)) {
    942         return new tinycolor(color, opts);
    943     }
    944 
    945     var rgb = inputToRGB(color);
    946     this._originalInput = color,
    947     this._r = rgb.r,
    948     this._g = rgb.g,
    949     this._b = rgb.b,
    950     this._a = rgb.a,
    951     this._roundA = mathRound(100*this._a) / 100,
    952     this._format = opts.format || rgb.format;
    953     this._gradientType = opts.gradientType;
    954 
    955     // Don't let the range of [0,255] come back in [0,1].
    956     // Potentially lose a little bit of precision here, but will fix issues where
    957     // .5 gets interpreted as half of the total, instead of half of 1
    958     // If it was supposed to be 128, this was already taken care of by `inputToRgb`
    959     if (this._r < 1) { this._r = mathRound(this._r); }
    960     if (this._g < 1) { this._g = mathRound(this._g); }
    961     if (this._b < 1) { this._b = mathRound(this._b); }
    962 
    963     this._ok = rgb.ok;
    964     this._tc_id = tinyCounter++;
    965 }
    966 
    967 tinycolor.prototype = {
    968     isDark: function() {
    969         return this.getBrightness() < 128;
    970     },
    971     isLight: function() {
    972         return !this.isDark();
    973     },
    974     isValid: function() {
    975         return this._ok;
    976     },
    977     getOriginalInput: function() {
    978       return this._originalInput;
    979     },
    980     getFormat: function() {
    981         return this._format;
    982     },
    983     getAlpha: function() {
    984         return this._a;
    985     },
    986     getBrightness: function() {
    987         //http://www.w3.org/TR/AERT#color-contrast
    988         var rgb = this.toRgb();
    989         return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;
    990     },
    991     getLuminance: function() {
    992         //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
    993         var rgb = this.toRgb();
    994         var RsRGB, GsRGB, BsRGB, R, G, B;
    995         RsRGB = rgb.r/255;
    996         GsRGB = rgb.g/255;
    997         BsRGB = rgb.b/255;
    998 
    999         if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}
    1000         if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}
    1001         if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}
    1002         return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);
    1003     },
    1004     setAlpha: function(value) {
    1005         this._a = boundAlpha(value);
    1006         this._roundA = mathRound(100*this._a) / 100;
    1007         return this;
    1008     },
    1009     toHsv: function() {
    1010         var hsv = rgbToHsv(this._r, this._g, this._b);
    1011         return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };
    1012     },
    1013     toHsvString: function() {
    1014         var hsv = rgbToHsv(this._r, this._g, this._b);
    1015         var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
    1016         return (this._a == 1) ?
    1017           "hsv("  + h + ", " + s + "%, " + v + "%)" :
    1018           "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")";
    1019     },
    1020     toHsl: function() {
    1021         var hsl = rgbToHsl(this._r, this._g, this._b);
    1022         return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };
    1023     },
    1024     toHslString: function() {
    1025         var hsl = rgbToHsl(this._r, this._g, this._b);
    1026         var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
    1027         return (this._a == 1) ?
    1028           "hsl("  + h + ", " + s + "%, " + l + "%)" :
    1029           "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")";
    1030     },
    1031     toHex: function(allow3Char) {
    1032         return rgbToHex(this._r, this._g, this._b, allow3Char);
    1033     },
    1034     toHexString: function(allow3Char) {
    1035         return '#' + this.toHex(allow3Char);
    1036     },
    1037     toHex8: function(allow4Char) {
    1038         return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);
    1039     },
    1040     toHex8String: function(allow4Char) {
    1041         return '#' + this.toHex8(allow4Char);
    1042     },
    1043     toRgb: function() {
    1044         return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };
    1045     },
    1046     toRgbString: function() {
    1047         return (this._a == 1) ?
    1048           "rgb("  + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" :
    1049           "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")";
    1050     },
    1051     toPercentageRgb: function() {
    1052         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 };
    1053     },
    1054     toPercentageRgbString: function() {
    1055         return (this._a == 1) ?
    1056           "rgb("  + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" :
    1057           "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")";
    1058     },
    1059     toName: function() {
    1060         if (this._a === 0) {
    1061             return "transparent";
    1062         }
    1063 
    1064         if (this._a < 1) {
    1065             return false;
    1066         }
    1067 
    1068         return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;
    1069     },
    1070     toFilter: function(secondColor) {
    1071         var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);
    1072         var secondHex8String = hex8String;
    1073         var gradientType = this._gradientType ? "GradientType = 1, " : "";
    1074 
    1075         if (secondColor) {
    1076             var s = tinycolor(secondColor);
    1077             secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);
    1078         }
    1079 
    1080         return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")";
    1081     },
    1082     toString: function(format) {
    1083         var formatSet = !!format;
    1084         format = format || this._format;
    1085 
    1086         var formattedString = false;
    1087         var hasAlpha = this._a < 1 && this._a >= 0;
    1088         var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name");
    1089 
    1090         if (needsAlphaFormat) {
    1091             // Special case for "transparent", all other non-alpha formats
    1092             // will return rgba when there is transparency.
    1093             if (format === "name" && this._a === 0) {
    1094                 return this.toName();
    1095             }
    1096             return this.toRgbString();
    1097         }
    1098         if (format === "rgb") {
    1099             formattedString = this.toRgbString();
    1100         }
    1101         if (format === "prgb") {
    1102             formattedString = this.toPercentageRgbString();
    1103         }
    1104         if (format === "hex" || format === "hex6") {
    1105             formattedString = this.toHexString();
    1106         }
    1107         if (format === "hex3") {
    1108             formattedString = this.toHexString(true);
    1109         }
    1110         if (format === "hex4") {
    1111             formattedString = this.toHex8String(true);
    1112         }
    1113         if (format === "hex8") {
    1114             formattedString = this.toHex8String();
    1115         }
    1116         if (format === "name") {
    1117             formattedString = this.toName();
    1118         }
    1119         if (format === "hsl") {
    1120             formattedString = this.toHslString();
    1121         }
    1122         if (format === "hsv") {
    1123             formattedString = this.toHsvString();
    1124         }
    1125 
    1126         return formattedString || this.toHexString();
    1127     },
    1128     clone: function() {
    1129         return tinycolor(this.toString());
    1130     },
    1131 
    1132     _applyModification: function(fn, args) {
    1133         var color = fn.apply(null, [this].concat([].slice.call(args)));
    1134         this._r = color._r;
    1135         this._g = color._g;
    1136         this._b = color._b;
    1137         this.setAlpha(color._a);
    1138         return this;
    1139     },
    1140     lighten: function() {
    1141         return this._applyModification(lighten, arguments);
    1142     },
    1143     brighten: function() {
    1144         return this._applyModification(brighten, arguments);
    1145     },
    1146     darken: function() {
    1147         return this._applyModification(darken, arguments);
    1148     },
    1149     desaturate: function() {
    1150         return this._applyModification(desaturate, arguments);
    1151     },
    1152     saturate: function() {
    1153         return this._applyModification(saturate, arguments);
    1154     },
    1155     greyscale: function() {
    1156         return this._applyModification(greyscale, arguments);
    1157     },
    1158     spin: function() {
    1159         return this._applyModification(spin, arguments);
    1160     },
    1161 
    1162     _applyCombination: function(fn, args) {
    1163         return fn.apply(null, [this].concat([].slice.call(args)));
    1164     },
    1165     analogous: function() {
    1166         return this._applyCombination(analogous, arguments);
    1167     },
    1168     complement: function() {
    1169         return this._applyCombination(complement, arguments);
    1170     },
    1171     monochromatic: function() {
    1172         return this._applyCombination(monochromatic, arguments);
    1173     },
    1174     splitcomplement: function() {
    1175         return this._applyCombination(splitcomplement, arguments);
    1176     },
    1177     triad: function() {
    1178         return this._applyCombination(triad, arguments);
    1179     },
    1180     tetrad: function() {
    1181         return this._applyCombination(tetrad, arguments);
    1182     }
    1183 };
    1184 
    1185 // If input is an object, force 1 into "1.0" to handle ratios properly
    1186 // String input requires "1.0" as input, so 1 will be treated as 1
    1187 tinycolor.fromRatio = function(color, opts) {
    1188     if (typeof color == "object") {
    1189         var newColor = {};
    1190         for (var i in color) {
    1191             if (color.hasOwnProperty(i)) {
    1192                 if (i === "a") {
    1193                     newColor[i] = color[i];
    1194                 }
    1195                 else {
    1196                     newColor[i] = convertToPercentage(color[i]);
    1197                 }
    1198             }
    1199         }
    1200         color = newColor;
    1201     }
    1202 
    1203     return tinycolor(color, opts);
    1204 };
    1205 
    1206 // Given a string or object, convert that input to RGB
    1207 // Possible string inputs:
    1208 //
    1209 //     "red"
    1210 //     "#f00" or "f00"
    1211 //     "#ff0000" or "ff0000"
    1212 //     "#ff000000" or "ff000000"
    1213 //     "rgb 255 0 0" or "rgb (255, 0, 0)"
    1214 //     "rgb 1.0 0 0" or "rgb (1, 0, 0)"
    1215 //     "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
    1216 //     "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
    1217 //     "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
    1218 //     "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
    1219 //     "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
    1220 //
    1221 function inputToRGB(color) {
    1222 
    1223     var rgb = { r: 0, g: 0, b: 0 };
    1224     var a = 1;
    1225     var s = null;
    1226     var v = null;
    1227     var l = null;
    1228     var ok = false;
    1229     var format = false;
    1230 
    1231     if (typeof color == "string") {
    1232         color = stringInputToObject(color);
    1233     }
    1234 
    1235     if (typeof color == "object") {
    1236         if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
    1237             rgb = rgbToRgb(color.r, color.g, color.b);
    1238             ok = true;
    1239             format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
    1240         }
    1241         else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
    1242             s = convertToPercentage(color.s);
    1243             v = convertToPercentage(color.v);
    1244             rgb = hsvToRgb(color.h, s, v);
    1245             ok = true;
    1246             format = "hsv";
    1247         }
    1248         else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
    1249             s = convertToPercentage(color.s);
    1250             l = convertToPercentage(color.l);
    1251             rgb = hslToRgb(color.h, s, l);
    1252             ok = true;
    1253             format = "hsl";
    1254         }
    1255 
    1256         if (color.hasOwnProperty("a")) {
    1257             a = color.a;
    1258         }
    1259     }
    1260 
    1261     a = boundAlpha(a);
    1262 
    1263     return {
    1264         ok: ok,
    1265         format: color.format || format,
    1266         r: mathMin(255, mathMax(rgb.r, 0)),
    1267         g: mathMin(255, mathMax(rgb.g, 0)),
    1268         b: mathMin(255, mathMax(rgb.b, 0)),
    1269         a: a
    1270     };
    1271 }
    1272 
    1273 
    1274 // Conversion Functions
    1275 // --------------------
    1276 
    1277 // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
    1278 // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
    1279 
    1280 // `rgbToRgb`
    1281 // Handle bounds / percentage checking to conform to CSS color spec
    1282 // <http://www.w3.org/TR/css3-color/>
    1283 // *Assumes:* r, g, b in [0, 255] or [0, 1]
    1284 // *Returns:* { r, g, b } in [0, 255]
    1285 function rgbToRgb(r, g, b){
    1286     return {
    1287         r: bound01(r, 255) * 255,
    1288         g: bound01(g, 255) * 255,
    1289         b: bound01(b, 255) * 255
    1290     };
    1291 }
    1292 
    1293 // `rgbToHsl`
    1294 // Converts an RGB color value to HSL.
    1295 // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
    1296 // *Returns:* { h, s, l } in [0,1]
    1297 function rgbToHsl(r, g, b) {
    1298 
    1299     r = bound01(r, 255);
    1300     g = bound01(g, 255);
    1301     b = bound01(b, 255);
    1302 
    1303     var max = mathMax(r, g, b), min = mathMin(r, g, b);
    1304     var h, s, l = (max + min) / 2;
    1305 
    1306     if(max == min) {
    1307         h = s = 0; // achromatic
    1308     }
    1309     else {
    1310         var d = max - min;
    1311         s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
    1312         switch(max) {
    1313             case r: h = (g - b) / d + (g < b ? 6 : 0); break;
    1314             case g: h = (b - r) / d + 2; break;
    1315             case b: h = (r - g) / d + 4; break;
    1316         }
    1317 
    1318         h /= 6;
    1319     }
    1320 
    1321     return { h: h, s: s, l: l };
    1322 }
    1323 
    1324 // `hslToRgb`
    1325 // Converts an HSL color value to RGB.
    1326 // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
    1327 // *Returns:* { r, g, b } in the set [0, 255]
    1328 function hslToRgb(h, s, l) {
    1329     var r, g, b;
    1330 
    1331     h = bound01(h, 360);
    1332     s = bound01(s, 100);
    1333     l = bound01(l, 100);
    1334 
    1335     function hue2rgb(p, q, t) {
    1336         if(t < 0) t += 1;
    1337         if(t > 1) t -= 1;
    1338         if(t < 1/6) return p + (q - p) * 6 * t;
    1339         if(t < 1/2) return q;
    1340         if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
    1341         return p;
    1342     }
    1343 
    1344     if(s === 0) {
    1345         r = g = b = l; // achromatic
    1346     }
    1347     else {
    1348         var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
    1349         var p = 2 * l - q;
    1350         r = hue2rgb(p, q, h + 1/3);
    1351         g = hue2rgb(p, q, h);
    1352         b = hue2rgb(p, q, h - 1/3);
    1353     }
    1354 
    1355     return { r: r * 255, g: g * 255, b: b * 255 };
    1356 }
    1357 
    1358 // `rgbToHsv`
    1359 // Converts an RGB color value to HSV
    1360 // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
    1361 // *Returns:* { h, s, v } in [0,1]
    1362 function rgbToHsv(r, g, b) {
    1363 
    1364     r = bound01(r, 255);
    1365     g = bound01(g, 255);
    1366     b = bound01(b, 255);
    1367 
    1368     var max = mathMax(r, g, b), min = mathMin(r, g, b);
    1369     var h, s, v = max;
    1370 
    1371     var d = max - min;
    1372     s = max === 0 ? 0 : d / max;
    1373 
    1374     if(max == min) {
    1375         h = 0; // achromatic
    1376     }
    1377     else {
    1378         switch(max) {
    1379             case r: h = (g - b) / d + (g < b ? 6 : 0); break;
    1380             case g: h = (b - r) / d + 2; break;
    1381             case b: h = (r - g) / d + 4; break;
    1382         }
    1383         h /= 6;
    1384     }
    1385     return { h: h, s: s, v: v };
    1386 }
    1387 
    1388 // `hsvToRgb`
    1389 // Converts an HSV color value to RGB.
    1390 // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
    1391 // *Returns:* { r, g, b } in the set [0, 255]
    1392  function hsvToRgb(h, s, v) {
    1393 
    1394     h = bound01(h, 360) * 6;
    1395     s = bound01(s, 100);
    1396     v = bound01(v, 100);
    1397 
    1398     var i = Math.floor(h),
    1399         f = h - i,
    1400         p = v * (1 - s),
    1401         q = v * (1 - f * s),
    1402         t = v * (1 - (1 - f) * s),
    1403         mod = i % 6,
    1404         r = [v, q, p, p, t, v][mod],
    1405         g = [t, v, v, q, p, p][mod],
    1406         b = [p, p, t, v, v, q][mod];
    1407 
    1408     return { r: r * 255, g: g * 255, b: b * 255 };
    1409 }
    1410 
    1411 // `rgbToHex`
    1412 // Converts an RGB color to hex
    1413 // Assumes r, g, and b are contained in the set [0, 255]
    1414 // Returns a 3 or 6 character hex
    1415 function rgbToHex(r, g, b, allow3Char) {
    1416 
    1417     var hex = [
    1418         pad2(mathRound(r).toString(16)),
    1419         pad2(mathRound(g).toString(16)),
    1420         pad2(mathRound(b).toString(16))
    1421     ];
    1422 
    1423     // Return a 3 character hex if possible
    1424     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)) {
    1425         return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
    1426     }
    1427 
    1428     return hex.join("");
    1429 }
    1430 
    1431 // `rgbaToHex`
    1432 // Converts an RGBA color plus alpha transparency to hex
    1433 // Assumes r, g, b are contained in the set [0, 255] and
    1434 // a in [0, 1]. Returns a 4 or 8 character rgba hex
    1435 function rgbaToHex(r, g, b, a, allow4Char) {
    1436 
    1437     var hex = [
    1438         pad2(mathRound(r).toString(16)),
    1439         pad2(mathRound(g).toString(16)),
    1440         pad2(mathRound(b).toString(16)),
    1441         pad2(convertDecimalToHex(a))
    1442     ];
    1443 
    1444     // Return a 4 character hex if possible
    1445     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)) {
    1446         return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);
    1447     }
    1448 
    1449     return hex.join("");
    1450 }
    1451 
    1452 // `rgbaToArgbHex`
    1453 // Converts an RGBA color to an ARGB Hex8 string
    1454 // Rarely used, but required for "toFilter()"
    1455 function rgbaToArgbHex(r, g, b, a) {
    1456 
    1457     var hex = [
    1458         pad2(convertDecimalToHex(a)),
    1459         pad2(mathRound(r).toString(16)),
    1460         pad2(mathRound(g).toString(16)),
    1461         pad2(mathRound(b).toString(16))
    1462     ];
    1463 
    1464     return hex.join("");
    1465 }
    1466 
    1467 // `equals`
    1468 // Can be called with any tinycolor input
    1469 tinycolor.equals = function (color1, color2) {
    1470     if (!color1 || !color2) { return false; }
    1471     return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();
    1472 };
    1473 
    1474 tinycolor.random = function() {
    1475     return tinycolor.fromRatio({
    1476         r: mathRandom(),
    1477         g: mathRandom(),
    1478         b: mathRandom()
    1479     });
    1480 };
    1481 
    1482 
    1483 // Modification Functions
    1484 // ----------------------
    1485 // Thanks to less.js for some of the basics here
    1486 // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>
    1487 
    1488 function desaturate(color, amount) {
    1489     amount = (amount === 0) ? 0 : (amount || 10);
    1490     var hsl = tinycolor(color).toHsl();
    1491     hsl.s -= amount / 100;
    1492     hsl.s = clamp01(hsl.s);
    1493     return tinycolor(hsl);
    1494 }
    1495 
    1496 function saturate(color, amount) {
    1497     amount = (amount === 0) ? 0 : (amount || 10);
    1498     var hsl = tinycolor(color).toHsl();
    1499     hsl.s += amount / 100;
    1500     hsl.s = clamp01(hsl.s);
    1501     return tinycolor(hsl);
    1502 }
    1503 
    1504 function greyscale(color) {
    1505     return tinycolor(color).desaturate(100);
    1506 }
    1507 
    1508 function lighten (color, amount) {
    1509     amount = (amount === 0) ? 0 : (amount || 10);
    1510     var hsl = tinycolor(color).toHsl();
    1511     hsl.l += amount / 100;
    1512     hsl.l = clamp01(hsl.l);
    1513     return tinycolor(hsl);
    1514 }
    1515 
    1516 function brighten(color, amount) {
    1517     amount = (amount === 0) ? 0 : (amount || 10);
    1518     var rgb = tinycolor(color).toRgb();
    1519     rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));
    1520     rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));
    1521     rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));
    1522     return tinycolor(rgb);
    1523 }
    1524 
    1525 function darken (color, amount) {
    1526     amount = (amount === 0) ? 0 : (amount || 10);
    1527     var hsl = tinycolor(color).toHsl();
    1528     hsl.l -= amount / 100;
    1529     hsl.l = clamp01(hsl.l);
    1530     return tinycolor(hsl);
    1531 }
    1532 
    1533 // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
    1534 // Values outside of this range will be wrapped into this range.
    1535 function spin(color, amount) {
    1536     var hsl = tinycolor(color).toHsl();
    1537     var hue = (hsl.h + amount) % 360;
    1538     hsl.h = hue < 0 ? 360 + hue : hue;
    1539     return tinycolor(hsl);
    1540 }
    1541 
    1542 // Combination Functions
    1543 // ---------------------
    1544 // Thanks to jQuery xColor for some of the ideas behind these
    1545 // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>
    1546 
    1547 function complement(color) {
    1548     var hsl = tinycolor(color).toHsl();
    1549     hsl.h = (hsl.h + 180) % 360;
    1550     return tinycolor(hsl);
    1551 }
    1552 
    1553 function triad(color) {
    1554     var hsl = tinycolor(color).toHsl();
    1555     var h = hsl.h;
    1556     return [
    1557         tinycolor(color),
    1558         tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
    1559         tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
    1560     ];
    1561 }
    1562 
    1563 function tetrad(color) {
    1564     var hsl = tinycolor(color).toHsl();
    1565     var h = hsl.h;
    1566     return [
    1567         tinycolor(color),
    1568         tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
    1569         tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
    1570         tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
    1571     ];
    1572 }
    1573 
    1574 function splitcomplement(color) {
    1575     var hsl = tinycolor(color).toHsl();
    1576     var h = hsl.h;
    1577     return [
    1578         tinycolor(color),
    1579         tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),
    1580         tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})
    1581     ];
    1582 }
    1583 
    1584 function analogous(color, results, slices) {
    1585     results = results || 6;
    1586     slices = slices || 30;
    1587 
    1588     var hsl = tinycolor(color).toHsl();
    1589     var part = 360 / slices;
    1590     var ret = [tinycolor(color)];
    1591 
    1592     for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
    1593         hsl.h = (hsl.h + part) % 360;
    1594         ret.push(tinycolor(hsl));
    1595     }
    1596     return ret;
    1597 }
    1598 
    1599 function monochromatic(color, results) {
    1600     results = results || 6;
    1601     var hsv = tinycolor(color).toHsv();
    1602     var h = hsv.h, s = hsv.s, v = hsv.v;
    1603     var ret = [];
    1604     var modification = 1 / results;
    1605 
    1606     while (results--) {
    1607         ret.push(tinycolor({ h: h, s: s, v: v}));
    1608         v = (v + modification) % 1;
    1609     }
    1610 
    1611     return ret;
    1612 }
    1613 
    1614 // Utility Functions
    1615 // ---------------------
    1616 
    1617 tinycolor.mix = function(color1, color2, amount) {
    1618     amount = (amount === 0) ? 0 : (amount || 50);
    1619 
    1620     var rgb1 = tinycolor(color1).toRgb();
    1621     var rgb2 = tinycolor(color2).toRgb();
    1622 
    1623     var p = amount / 100;
    1624 
    1625     var rgba = {
    1626         r: ((rgb2.r - rgb1.r) * p) + rgb1.r,
    1627         g: ((rgb2.g - rgb1.g) * p) + rgb1.g,
    1628         b: ((rgb2.b - rgb1.b) * p) + rgb1.b,
    1629         a: ((rgb2.a - rgb1.a) * p) + rgb1.a
    1630     };
    1631 
    1632     return tinycolor(rgba);
    1633 };
    1634 
    1635 
    1636 // Readability Functions
    1637 // ---------------------
    1638 // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)
    1639 
    1640 // `contrast`
    1641 // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)
    1642 tinycolor.readability = function(color1, color2) {
    1643     var c1 = tinycolor(color1);
    1644     var c2 = tinycolor(color2);
    1645     return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05);
    1646 };
    1647 
    1648 // `isReadable`
    1649 // Ensure that foreground and background color combinations meet WCAG2 guidelines.
    1650 // The third argument is an optional Object.
    1651 //      the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';
    1652 //      the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.
    1653 // If the entire object is absent, isReadable defaults to {level:"AA",size:"small"}.
    1654 
    1655 // *Example*
    1656 //    tinycolor.isReadable("#000", "#111") => false
    1657 //    tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false
    1658 tinycolor.isReadable = function(color1, color2, wcag2) {
    1659     var readability = tinycolor.readability(color1, color2);
    1660     var wcag2Parms, out;
    1661 
    1662     out = false;
    1663 
    1664     wcag2Parms = validateWCAG2Parms(wcag2);
    1665     switch (wcag2Parms.level + wcag2Parms.size) {
    1666         case "AAsmall":
    1667         case "AAAlarge":
    1668             out = readability >= 4.5;
    1669             break;
    1670         case "AAlarge":
    1671             out = readability >= 3;
    1672             break;
    1673         case "AAAsmall":
    1674             out = readability >= 7;
    1675             break;
    1676     }
    1677     return out;
    1678 
    1679 };
    1680 
    1681 // `mostReadable`
    1682 // Given a base color and a list of possible foreground or background
    1683 // colors for that base, returns the most readable color.
    1684 // Optionally returns Black or White if the most readable color is unreadable.
    1685 // *Example*
    1686 //    tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255"
    1687 //    tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString();  // "#ffffff"
    1688 //    tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3"
    1689 //    tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff"
    1690 tinycolor.mostReadable = function(baseColor, colorList, args) {
    1691     var bestColor = null;
    1692     var bestScore = 0;
    1693     var readability;
    1694     var includeFallbackColors, level, size ;
    1695     args = args || {};
    1696     includeFallbackColors = args.includeFallbackColors ;
    1697     level = args.level;
    1698     size = args.size;
    1699 
    1700     for (var i= 0; i < colorList.length ; i++) {
    1701         readability = tinycolor.readability(baseColor, colorList[i]);
    1702         if (readability > bestScore) {
    1703             bestScore = readability;
    1704             bestColor = tinycolor(colorList[i]);
    1705         }
    1706     }
    1707 
    1708     if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) {
    1709         return bestColor;
    1710     }
    1711     else {
    1712         args.includeFallbackColors=false;
    1713         return tinycolor.mostReadable(baseColor,["#fff", "#000"],args);
    1714     }
    1715 };
    1716 
    1717 
    1718 // Big List of Colors
    1719 // ------------------
    1720 // <http://www.w3.org/TR/css3-color/#svg-color>
    1721 var names = tinycolor.names = {
    1722     aliceblue: "f0f8ff",
    1723     antiquewhite: "faebd7",
    1724     aqua: "0ff",
    1725     aquamarine: "7fffd4",
    1726     azure: "f0ffff",
    1727     beige: "f5f5dc",
    1728     bisque: "ffe4c4",
    1729     black: "000",
    1730     blanchedalmond: "ffebcd",
    1731     blue: "00f",
    1732     blueviolet: "8a2be2",
    1733     brown: "a52a2a",
    1734     burlywood: "deb887",
    1735     burntsienna: "ea7e5d",
    1736     cadetblue: "5f9ea0",
    1737     chartreuse: "7fff00",
    1738     chocolate: "d2691e",
    1739     coral: "ff7f50",
    1740     cornflowerblue: "6495ed",
    1741     cornsilk: "fff8dc",
    1742     crimson: "dc143c",
    1743     cyan: "0ff",
    1744     darkblue: "00008b",
    1745     darkcyan: "008b8b",
    1746     darkgoldenrod: "b8860b",
    1747     darkgray: "a9a9a9",
    1748     darkgreen: "006400",
    1749     darkgrey: "a9a9a9",
    1750     darkkhaki: "bdb76b",
    1751     darkmagenta: "8b008b",
    1752     darkolivegreen: "556b2f",
    1753     darkorange: "ff8c00",
    1754     darkorchid: "9932cc",
    1755     darkred: "8b0000",
    1756     darksalmon: "e9967a",
    1757     darkseagreen: "8fbc8f",
    1758     darkslateblue: "483d8b",
    1759     darkslategray: "2f4f4f",
    1760     darkslategrey: "2f4f4f",
    1761     darkturquoise: "00ced1",
    1762     darkviolet: "9400d3",
    1763     deeppink: "ff1493",
    1764     deepskyblue: "00bfff",
    1765     dimgray: "696969",
    1766     dimgrey: "696969",
    1767     dodgerblue: "1e90ff",
    1768     firebrick: "b22222",
    1769     floralwhite: "fffaf0",
    1770     forestgreen: "228b22",
    1771     fuchsia: "f0f",
    1772     gainsboro: "dcdcdc",
    1773     ghostwhite: "f8f8ff",
    1774     gold: "ffd700",
    1775     goldenrod: "daa520",
    1776     gray: "808080",
    1777     green: "008000",
    1778     greenyellow: "adff2f",
    1779     grey: "808080",
    1780     honeydew: "f0fff0",
    1781     hotpink: "ff69b4",
    1782     indianred: "cd5c5c",
    1783     indigo: "4b0082",
    1784     ivory: "fffff0",
    1785     khaki: "f0e68c",
    1786     lavender: "e6e6fa",
    1787     lavenderblush: "fff0f5",
    1788     lawngreen: "7cfc00",
    1789     lemonchiffon: "fffacd",
    1790     lightblue: "add8e6",
    1791     lightcoral: "f08080",
    1792     lightcyan: "e0ffff",
    1793     lightgoldenrodyellow: "fafad2",
    1794     lightgray: "d3d3d3",
    1795     lightgreen: "90ee90",
    1796     lightgrey: "d3d3d3",
    1797     lightpink: "ffb6c1",
    1798     lightsalmon: "ffa07a",
    1799     lightseagreen: "20b2aa",
    1800     lightskyblue: "87cefa",
    1801     lightslategray: "789",
    1802     lightslategrey: "789",
    1803     lightsteelblue: "b0c4de",
    1804     lightyellow: "ffffe0",
    1805     lime: "0f0",
    1806     limegreen: "32cd32",
    1807     linen: "faf0e6",
    1808     magenta: "f0f",
    1809     maroon: "800000",
    1810     mediumaquamarine: "66cdaa",
    1811     mediumblue: "0000cd",
    1812     mediumorchid: "ba55d3",
    1813     mediumpurple: "9370db",
    1814     mediumseagreen: "3cb371",
    1815     mediumslateblue: "7b68ee",
    1816     mediumspringgreen: "00fa9a",
    1817     mediumturquoise: "48d1cc",
    1818     mediumvioletred: "c71585",
    1819     midnightblue: "191970",
    1820     mintcream: "f5fffa",
    1821     mistyrose: "ffe4e1",
    1822     moccasin: "ffe4b5",
    1823     navajowhite: "ffdead",
    1824     navy: "000080",
    1825     oldlace: "fdf5e6",
    1826     olive: "808000",
    1827     olivedrab: "6b8e23",
    1828     orange: "ffa500",
    1829     orangered: "ff4500",
    1830     orchid: "da70d6",
    1831     palegoldenrod: "eee8aa",
    1832     palegreen: "98fb98",
    1833     paleturquoise: "afeeee",
    1834     palevioletred: "db7093",
    1835     papayawhip: "ffefd5",
    1836     peachpuff: "ffdab9",
    1837     peru: "cd853f",
    1838     pink: "ffc0cb",
    1839     plum: "dda0dd",
    1840     powderblue: "b0e0e6",
    1841     purple: "800080",
    1842     rebeccapurple: "663399",
    1843     red: "f00",
    1844     rosybrown: "bc8f8f",
    1845     royalblue: "4169e1",
    1846     saddlebrown: "8b4513",
    1847     salmon: "fa8072",
    1848     sandybrown: "f4a460",
    1849     seagreen: "2e8b57",
    1850     seashell: "fff5ee",
    1851     sienna: "a0522d",
    1852     silver: "c0c0c0",
    1853     skyblue: "87ceeb",
    1854     slateblue: "6a5acd",
    1855     slategray: "708090",
    1856     slategrey: "708090",
    1857     snow: "fffafa",
    1858     springgreen: "00ff7f",
    1859     steelblue: "4682b4",
    1860     tan: "d2b48c",
    1861     teal: "008080",
    1862     thistle: "d8bfd8",
    1863     tomato: "ff6347",
    1864     turquoise: "40e0d0",
    1865     violet: "ee82ee",
    1866     wheat: "f5deb3",
    1867     white: "fff",
    1868     whitesmoke: "f5f5f5",
    1869     yellow: "ff0",
    1870     yellowgreen: "9acd32"
    1871 };
    1872 
    1873 // Make it easy to access colors via `hexNames[hex]`
    1874 var hexNames = tinycolor.hexNames = flip(names);
    1875 
    1876 
    1877 // Utilities
    1878 // ---------
    1879 
    1880 // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
    1881 function flip(o) {
    1882     var flipped = { };
    1883     for (var i in o) {
    1884         if (o.hasOwnProperty(i)) {
    1885             flipped[o[i]] = i;
    1886         }
    1887     }
    1888     return flipped;
    1889 }
    1890 
    1891 // Return a valid alpha value [0,1] with all invalid values being set to 1
    1892 function boundAlpha(a) {
    1893     a = parseFloat(a);
    1894 
    1895     if (isNaN(a) || a < 0 || a > 1) {
    1896         a = 1;
    1897     }
    1898 
    1899     return a;
    1900 }
    1901 
    1902 // Take input from [0, n] and return it as [0, 1]
    1903 function bound01(n, max) {
    1904     if (isOnePointZero(n)) { n = "100%"; }
    1905 
    1906     var processPercent = isPercentage(n);
    1907     n = mathMin(max, mathMax(0, parseFloat(n)));
    1908 
    1909     // Automatically convert percentage into number
    1910     if (processPercent) {
    1911         n = parseInt(n * max, 10) / 100;
    1912     }
    1913 
    1914     // Handle floating point rounding errors
    1915     if ((Math.abs(n - max) < 0.000001)) {
    1916         return 1;
    1917     }
    1918 
    1919     // Convert into [0, 1] range if it isn't already
    1920     return (n % max) / parseFloat(max);
    1921 }
    1922 
    1923 // Force a number between 0 and 1
    1924 function clamp01(val) {
    1925     return mathMin(1, mathMax(0, val));
    1926 }
    1927 
    1928 // Parse a base-16 hex value into a base-10 integer
    1929 function parseIntFromHex(val) {
    1930     return parseInt(val, 16);
    1931 }
    1932 
    1933 // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
    1934 // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
    1935 function isOnePointZero(n) {
    1936     return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
    1937 }
    1938 
    1939 // Check to see if string passed in is a percentage
    1940 function isPercentage(n) {
    1941     return typeof n === "string" && n.indexOf('%') != -1;
    1942 }
    1943 
    1944 // Force a hex value to have 2 characters
    1945 function pad2(c) {
    1946     return c.length == 1 ? '0' + c : '' + c;
    1947 }
    1948 
    1949 // Replace a decimal with it's percentage value
    1950 function convertToPercentage(n) {
    1951     if (n <= 1) {
    1952         n = (n * 100) + "%";
    1953     }
    1954 
    1955     return n;
    1956 }
    1957 
    1958 // Converts a decimal to a hex value
    1959 function convertDecimalToHex(d) {
    1960     return Math.round(parseFloat(d) * 255).toString(16);
    1961 }
    1962 // Converts a hex value to a decimal
    1963 function convertHexToDecimal(h) {
    1964     return (parseIntFromHex(h) / 255);
    1965 }
    1966 
    1967 var matchers = (function() {
    1968 
    1969     // <http://www.w3.org/TR/css3-values/#integers>
    1970     var CSS_INTEGER = "[-\\+]?\\d+%?";
    1971 
    1972     // <http://www.w3.org/TR/css3-values/#number-value>
    1973     var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";
    1974 
    1975     // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.
    1976     var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";
    1977 
    1978     // Actual matching.
    1979     // Parentheses and commas are optional, but not required.
    1980     // Whitespace can take the place of commas or opening paren
    1981     var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
    1982     var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
    1983 
    1984     return {
    1985         CSS_UNIT: new RegExp(CSS_UNIT),
    1986         rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
    1987         rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
    1988         hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
    1989         hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
    1990         hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
    1991         hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
    1992         hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
    1993         hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
    1994         hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
    1995         hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
    1996     };
    1997 })();
    1998 
    1999 // `isValidCSSUnit`
    2000 // Take in a single string / number and check to see if it looks like a CSS unit
    2001 // (see `matchers` above for definition).
    2002 function isValidCSSUnit(color) {
    2003     return !!matchers.CSS_UNIT.exec(color);
    2004 }
    2005 
    2006 // `stringInputToObject`
    2007 // Permissive string parsing.  Take in a number of formats, and output an object
    2008 // based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
    2009 function stringInputToObject(color) {
    2010 
    2011     color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();
    2012     var named = false;
    2013     if (names[color]) {
    2014         color = names[color];
    2015         named = true;
    2016     }
    2017     else if (color == 'transparent') {
    2018         return { r: 0, g: 0, b: 0, a: 0, format: "name" };
    2019     }
    2020 
    2021     // Try to match string input using regular expressions.
    2022     // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
    2023     // Just return an object and let the conversion functions handle that.
    2024     // This way the result will be the same whether the tinycolor is initialized with string or object.
    2025     var match;
    2026     if ((match = matchers.rgb.exec(color))) {
    2027         return { r: match[1], g: match[2], b: match[3] };
    2028     }
    2029     if ((match = matchers.rgba.exec(color))) {
    2030         return { r: match[1], g: match[2], b: match[3], a: match[4] };
    2031     }
    2032     if ((match = matchers.hsl.exec(color))) {
    2033         return { h: match[1], s: match[2], l: match[3] };
    2034     }
    2035     if ((match = matchers.hsla.exec(color))) {
    2036         return { h: match[1], s: match[2], l: match[3], a: match[4] };
    2037     }
    2038     if ((match = matchers.hsv.exec(color))) {
    2039         return { h: match[1], s: match[2], v: match[3] };
    2040     }
    2041     if ((match = matchers.hsva.exec(color))) {
    2042         return { h: match[1], s: match[2], v: match[3], a: match[4] };
    2043     }
    2044     if ((match = matchers.hex8.exec(color))) {
    2045         return {
    2046             r: parseIntFromHex(match[1]),
    2047             g: parseIntFromHex(match[2]),
    2048             b: parseIntFromHex(match[3]),
    2049             a: convertHexToDecimal(match[4]),
    2050             format: named ? "name" : "hex8"
    2051         };
    2052     }
    2053     if ((match = matchers.hex6.exec(color))) {
    2054         return {
    2055             r: parseIntFromHex(match[1]),
    2056             g: parseIntFromHex(match[2]),
    2057             b: parseIntFromHex(match[3]),
    2058             format: named ? "name" : "hex"
    2059         };
    2060     }
    2061     if ((match = matchers.hex4.exec(color))) {
    2062         return {
    2063             r: parseIntFromHex(match[1] + '' + match[1]),
    2064             g: parseIntFromHex(match[2] + '' + match[2]),
    2065             b: parseIntFromHex(match[3] + '' + match[3]),
    2066             a: convertHexToDecimal(match[4] + '' + match[4]),
    2067             format: named ? "name" : "hex8"
    2068         };
    2069     }
    2070     if ((match = matchers.hex3.exec(color))) {
    2071         return {
    2072             r: parseIntFromHex(match[1] + '' + match[1]),
    2073             g: parseIntFromHex(match[2] + '' + match[2]),
    2074             b: parseIntFromHex(match[3] + '' + match[3]),
    2075             format: named ? "name" : "hex"
    2076         };
    2077     }
    2078 
    2079     return false;
    2080 }
    2081 
    2082 function validateWCAG2Parms(parms) {
    2083     // return valid WCAG2 parms for isReadable.
    2084     // If input parms are invalid, return {"level":"AA", "size":"small"}
    2085     var level, size;
    2086     parms = parms || {"level":"AA", "size":"small"};
    2087     level = (parms.level || "AA").toUpperCase();
    2088     size = (parms.size || "small").toLowerCase();
    2089     if (level !== "AA" && level !== "AAA") {
    2090         level = "AA";
    2091     }
    2092     if (size !== "small" && size !== "large") {
    2093         size = "small";
    2094     }
    2095     return {"level":level, "size":size};
    2096 }
    2097 
    2098 // Node: Export function
    2099 if ( true && module.exports) {
    2100     module.exports = tinycolor;
    2101 }
    2102 // AMD/requirejs: Define the module
    2103 else if (true) {
    2104     !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {return tinycolor;}).call(exports, __webpack_require__, exports, module),
    2105                 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    2106 }
    2107 // Browser: Expose to window
    2108 else {}
    2109 
    2110 })(Math);
    2111 
    2112 
    2113 /***/ }),
    2114 
    2115 /***/ "./node_modules/webpack/buildin/global.js":
    2116 /*!***********************************!*\
    2117   !*** (webpack)/buildin/global.js ***!
    2118   \***********************************/
    2119 /*! no static exports found */
    2120 /***/ (function(module, exports) {
    2121 
    2122 var g;
    2123 
    2124 // This works in non-strict mode
    2125 g = (function() {
    2126     return this;
    2127 })();
    2128 
    2129 try {
    2130     // This works if eval is allowed (see CSP)
    2131     g = g || new Function("return this")();
    2132 } catch (e) {
    2133     // This works if the window reference is available
    2134     if (typeof window === "object") g = window;
    2135 }
    2136 
    2137 // g can still be undefined, but nothing to do about it...
    2138 // We return undefined, instead of nothing here, so it's
    2139 // easier to handle this case. if(!global) { ...}
    2140 
    2141 module.exports = g;
    2142 
    2143 
    2144 /***/ }),
    2145 
    2146 /***/ "./src/grid-layout-basic.js":
    2147 /*!**********************************!*\
    2148   !*** ./src/grid-layout-basic.js ***!
    2149   \**********************************/
    2150 /*! exports provided: name, settings */
    2151 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    2152 
    2153 "use strict";
    2154 __webpack_require__.r(__webpack_exports__);
    2155 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
    2156 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
    2157 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    2158 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
    2159 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
    2160 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
    2161 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
    2162 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__);
    2163 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    2164 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
    2165 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    2166 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);
    2167 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
    2168 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__);
    2169 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
    2170 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__);
    2171 
    2172 
    2173 
    2174 /**
    2175  * WordPress dependencies
    2176  */
    2177 
    2178 
    2179 
    2180 
    2181 
    2182 
    2183 var name = 'gecko/grid-layout-basic';
    2184 var settings = {
    2185   title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Basic'),
    2186   parent: ['gecko/grid-layout'],
    2187   icon: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["SVG"], {
    2188     viewBox: "0 0 24 24",
    2189     xmlns: "http://www.w3.org/2000/svg"
    2190   }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Path"], {
    2191     d: "M0,0h24v24H0V0z M0,0h24v24H0V0z",
    2192     fill: "none"
    2193   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Path"], {
    2194     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"
    2195   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2196     x: "11",
    2197     y: "8",
    2198     width: "2",
    2199     height: "2"
    2200   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2201     x: "11",
    2202     y: "11",
    2203     width: "2",
    2204     height: "2"
    2205   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2206     x: "8",
    2207     y: "8",
    2208     width: "2",
    2209     height: "2"
    2210   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2211     x: "8",
    2212     y: "11",
    2213     width: "2",
    2214     height: "2"
    2215   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2216     x: "5",
    2217     y: "11",
    2218     width: "2",
    2219     height: "2"
    2220   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2221     x: "5",
    2222     y: "8",
    2223     width: "2",
    2224     height: "2"
    2225   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2226     x: "8",
    2227     y: "14",
    2228     width: "8",
    2229     height: "2"
    2230   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2231     x: "14",
    2232     y: "11",
    2233     width: "2",
    2234     height: "2"
    2235   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2236     x: "14",
    2237     y: "8",
    2238     width: "2",
    2239     height: "2"
    2240   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2241     x: "17",
    2242     y: "11",
    2243     width: "2",
    2244     height: "2"
    2245   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Rect"], {
    2246     x: "17",
    2247     y: "8",
    2248     width: "2",
    2249     height: "2"
    2250   })),
    2251   description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('An image grid block.'),
    2252   category: 'common',
    2253   supports: {
    2254     className: true,
    2255     inserter: true,
    2256     reusable: false,
    2257     html: false
    2258   },
    2259   styles: [{
    2260     name: 'default',
    2261     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Default'),
    2262     isDefault: true
    2263   }],
    2264   attributes: {
    2265     h: {
    2266       type: 'number',
    2267       "default": 1
    2268     },
    2269     w: {
    2270       type: 'number',
    2271       "default": 1
    2272     },
    2273     alignContent: {
    2274       type: 'string',
    2275       "default": 'top'
    2276     }
    2277   },
    2278   transforms: {
    2279     from: [{
    2280       type: 'block',
    2281       blocks: ['gecko/grid-layout-image', 'gecko/grid-layout-item'],
    2282       transform: function transform(attributes, innerBlocks) {
    2283         var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_6__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work.
    2284         // It appears that innerBlocks will be added in the future.
    2285 
    2286         var h = attributes.h,
    2287             w = attributes.w;
    2288         return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__["createBlock"])('gecko/grid-layout-basic', {
    2289           h: h,
    2290           w: w
    2291         }, selected.innerBlocks);
    2292       }
    2293     }]
    2294   },
    2295   deprecated: [{
    2296     migrate: function migrate() {},
    2297     save: function save() {
    2298       return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null);
    2299     }
    2300   }],
    2301   edit: function edit(_ref) {
    2302     var attributes = _ref.attributes,
    2303         setAttributes = _ref.setAttributes,
    2304         className = _ref.className,
    2305         insertBlocksAfter = _ref.insertBlocksAfter;
    2306     var h = attributes.h,
    2307         w = attributes.w,
    2308         alignContent = attributes.alignContent;
    2309     var styles = {
    2310       gridColumnEnd: 'span ' + w,
    2311       gridRowEnd: 'span ' + h,
    2312       alignSelf: alignContent === 'center' ? 'center' : 'start'
    2313     };
    2314     return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InspectorControls"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["PanelBody"], {
    2315       title: "Grid Item"
    2316     }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["RangeControl"], {
    2317       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Width'),
    2318       value: w,
    2319       onChange: function onChange(next) {
    2320         setAttributes({
    2321           w: next
    2322         });
    2323       },
    2324       min: 1,
    2325       max: 12
    2326     }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["RangeControl"], {
    2327       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Span Rows'),
    2328       value: h,
    2329       onChange: function onChange(next) {
    2330         setAttributes({
    2331           h: next
    2332         });
    2333       },
    2334       min: 1,
    2335       max: 12
    2336     }))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["BlockControls"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Toolbar"], {
    2337       controls: [{
    2338         icon: 'arrow-up-alt',
    2339         title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Align Top'),
    2340         isActive: alignContent === 'top',
    2341         onClick: function onClick() {
    2342           return setAttributes({
    2343             alignContent: 'top'
    2344           });
    2345         }
    2346       }, {
    2347         icon: 'align-center',
    2348         title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Align Center'),
    2349         isActive: alignContent === 'center',
    2350         onClick: function onClick() {
    2351           return setAttributes({
    2352             alignContent: 'center'
    2353           });
    2354         }
    2355       }, {
    2356         icon: 'arrow-down-alt',
    2357         title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__["__"])('Align Bottom'),
    2358         isActive: alignContent === 'bottom',
    2359         onClick: function onClick() {
    2360           return setAttributes({
    2361             alignContent: 'bottom'
    2362           });
    2363         }
    2364       }]
    2365     })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    2366       className: "gecko-grid-layout-editor-styles",
    2367       style: styles
    2368     }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    2369       className: "wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-basic ".concat(attributes.className, " align-content-").concat(attributes.alignContent)
    2370     }, typeof insertBlocksAfter === 'function' //This line makes sure styles do not break
    2371     ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"], {
    2372       templateLock: false
    2373     }) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, "Lorem Ipsum") // This is what shows as the preview content.
    2374     ));
    2375   },
    2376   save: function save() {
    2377     // Honestly I don't want to do this but conventions are conventions.
    2378     return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_5__["InnerBlocks"].Content, null));
    2379   }
    2380 };
    2381 
    2382 /***/ }),
    2383 
    2384 /***/ "./src/grid-layout-image.js":
    2385 /*!**********************************!*\
    2386   !*** ./src/grid-layout-image.js ***!
    2387   \**********************************/
    2388 /*! exports provided: name, settings */
    2389 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    2390 
    2391 "use strict";
    2392 __webpack_require__.r(__webpack_exports__);
    2393 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
    2394 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
    2395 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    2396 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
    2397 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
    2398 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
    2399 /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/debounce */ "./node_modules/lodash/debounce.js");
    2400 /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_2__);
    2401 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
    2402 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__);
    2403 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    2404 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
    2405 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    2406 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__);
    2407 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
    2408 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__);
    2409 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
    2410 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_7__);
    2411 
    2412 
    2413 
    2414 /**
    2415  * WordPress dependencies
    2416  */
    2417 
    2418 
    2419 
    2420 
    2421 
    2422 
    2423 
    2424 var ALLOWED_BLOCKS = ['core/paragraph', 'core/heading', 'core/button', 'core/list', 'core/quote'];
    2425 var name = 'gecko/grid-layout-image';
    2426 var settings = {
    2427   title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Image'),
    2428   parent: ['gecko/grid-layout'],
    2429   icon: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["SVG"], {
    2430     viewBox: "0 0 24 24",
    2431     xmlns: "http://www.w3.org/2000/svg"
    2432   }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
    2433     d: "M0,0h24v24H0V0z",
    2434     fill: "none"
    2435   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
    2436     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"
    2437   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
    2438     d: "m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z"
    2439   })),
    2440   description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('An image Grid Block.'),
    2441   category: 'common',
    2442   supports: {
    2443     className: true,
    2444     inserter: true,
    2445     reusable: false,
    2446     html: false
    2447   },
    2448   styles: [{
    2449     name: 'default',
    2450     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Default'),
    2451     isDefault: true
    2452   }, {
    2453     name: 'hover',
    2454     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Hover')
    2455   }, {
    2456     name: 'no-caption',
    2457     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('No Caption')
    2458   }],
    2459   attributes: {
    2460     h: {
    2461       type: 'number',
    2462       "default": 1
    2463     },
    2464     w: {
    2465       type: 'number',
    2466       "default": 1
    2467     },
    2468     minHeight: {
    2469       type: 'number',
    2470       "default": 200
    2471     },
    2472     imgId: {
    2473       type: 'number'
    2474     },
    2475     imgUrl: {
    2476       type: 'string'
    2477     }
    2478   },
    2479   transforms: {
    2480     from: [{
    2481       type: 'block',
    2482       blocks: ['gecko/grid-layout-basic', 'gecko/grid-layout-item'],
    2483       transform: function transform(attributes, innerBlocks) {
    2484         var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_7__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work.
    2485         // It appears that innerBlocks will be added in the future.
    2486 
    2487         var h = attributes.h,
    2488             w = attributes.w,
    2489             bgMedia = attributes.bgMedia,
    2490             bgMediaUrl = attributes.bgMediaUrl,
    2491             mediaId = attributes.mediaId,
    2492             mediaUrl = attributes.mediaUrl,
    2493             minHeight = attributes.minHeight;
    2494         return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__["createBlock"])('gecko/grid-layout-image', {
    2495           h: h,
    2496           w: w,
    2497           imgId: bgMedia || mediaId,
    2498           imgUrl: bgMediaUrl || mediaUrl,
    2499           minHeight: minHeight
    2500         }, selected.innerBlocks);
    2501       }
    2502     }]
    2503   },
    2504   deprecated: [{
    2505     migrate: function migrate() {},
    2506     save: function save() {
    2507       return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"].Content, null);
    2508     }
    2509   }],
    2510   edit: function edit(_ref) {
    2511     var attributes = _ref.attributes,
    2512         setAttributes = _ref.setAttributes,
    2513         className = _ref.className,
    2514         insertBlocksAfter = _ref.insertBlocksAfter,
    2515         toggleSelection = _ref.toggleSelection;
    2516     var h = attributes.h,
    2517         w = attributes.w,
    2518         imgId = attributes.imgId,
    2519         imgUrl = attributes.imgUrl,
    2520         minHeight = attributes.minHeight;
    2521     var styles = {
    2522       gridColumnEnd: 'span ' + w,
    2523       gridRowEnd: 'span ' + h,
    2524       minHeight: minHeight + 'px'
    2525     };
    2526 
    2527     var onResizing = function onResizing(event, direction, elt, delta) {
    2528       if (direction === 'bottom') {
    2529         var newMinHeight = elt.clientHeight > 600 ? 600 : elt.clientHeight;
    2530         setAttributes({
    2531           minHeight: newMinHeight
    2532         });
    2533         elt.style.height = "100%";
    2534       }
    2535 
    2536       ;
    2537       if (direction !== 'right') return; // console.log(elt);
    2538 
    2539       var columnWidth = Math.floor(elt.parentNode.offsetWidth / w);
    2540       var currentSpan = Math.floor(elt.parentNode.offsetWidth / columnWidth);
    2541       var elColWidth = Math.floor(elt.clientWidth / w);
    2542       var spans = Math.floor(elt.clientWidth / columnWidth);
    2543       var toUpdate = Math.floor(parseInt(delta.width, 10) / columnWidth);
    2544       var original = w - toUpdate;
    2545       var newWidth = spans;
    2546 
    2547       if (newWidth > 12) {
    2548         newWidth = 12;
    2549       }
    2550 
    2551       if (newWidth < 1) {
    2552         newWidth = 1;
    2553       }
    2554 
    2555       setAttributes({
    2556         w: newWidth
    2557       });
    2558       elt.style.width = "100%"; // }
    2559 
    2560       return;
    2561     };
    2562 
    2563     return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InspectorControls"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelBody"], {
    2564       title: "Grid Item"
    2565     }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
    2566       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Minimum Height'),
    2567       value: minHeight,
    2568       onChange: function onChange(next) {
    2569         setAttributes({
    2570           minHeight: next
    2571         });
    2572       },
    2573       min: "50",
    2574       max: "600",
    2575       step: "1"
    2576     }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
    2577       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Width'),
    2578       value: w,
    2579       onChange: function onChange(next) {
    2580         setAttributes({
    2581           w: next
    2582         });
    2583       },
    2584       min: 1,
    2585       max: 12
    2586     }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
    2587       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Span Rows'),
    2588       value: h,
    2589       onChange: function onChange(next) {
    2590         setAttributes({
    2591           h: next
    2592         });
    2593       },
    2594       min: 1,
    2595       max: 12
    2596     }))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["BlockControls"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Toolbar"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["MediaUpload"], {
    2597       onSelect: function onSelect(value) {
    2598         // console.log(value);
    2599         setAttributes({
    2600           imgId: value.id,
    2601           imgUrl: value.url
    2602         });
    2603       },
    2604       type: ['image'],
    2605       value: imgId ? imgId : null,
    2606       render: function render(_ref2) {
    2607         var open = _ref2.open;
    2608         return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["IconButton"], {
    2609           className: "components-icon-button components-toolbar__control",
    2610           label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Edit image'),
    2611           onClick: open,
    2612           icon: "edit"
    2613         });
    2614       }
    2615     }))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    2616       className: "gecko-grid-layout-editor-styles",
    2617       style: styles
    2618     }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["ResizableBox"], {
    2619       size: {
    2620         width: '',
    2621         height: '100%'
    2622       } // minHeight = "50"
    2623       // minWidth = "100%"
    2624       ,
    2625       className: "wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-image ".concat(attributes.className) // minHeight={ minHeight }
    2626       // maxHeight={600}
    2627       // lockAspectRatio
    2628       ,
    2629       enable: {
    2630         top: false,
    2631         right: true,
    2632         bottom: true,
    2633         left: false
    2634       },
    2635       onResizeStart: function onResizeStart(event, direction, elt, delta) {
    2636         toggleSelection(false);
    2637       },
    2638       onResize: lodash_debounce__WEBPACK_IMPORTED_MODULE_2___default()(onResizing, 250),
    2639       onResizeStop: function onResizeStop(event, direction, elt, delta) {
    2640         elt.style.width = "100%";
    2641         if (direction !== 'bottom') return;
    2642         var newMinHeight = elt.clientHeight > 600 ? 600 : elt.clientHeight;
    2643         setAttributes({
    2644           minHeight: newMinHeight
    2645         });
    2646         toggleSelection(true);
    2647       }
    2648     }, !imgId && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["MediaPlaceholder"], {
    2649       onSelect: function onSelect(value) {
    2650         setAttributes({
    2651           imgId: value.id,
    2652           imgUrl: value.url
    2653         });
    2654       },
    2655       allowedTypes: ['image'],
    2656       accept: "image/*"
    2657     }), imgUrl && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", {
    2658       className: "gecko-grid-layout-image__image",
    2659       src: imgUrl
    2660     }), imgId && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("figcaption", {
    2661       className: "gecko-grid-layout-image__caption"
    2662     }, typeof insertBlocksAfter === 'function' //This line makes sure styles do not break
    2663     ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"], {
    2664       templateLock: false,
    2665       allowedBlocks: ALLOWED_BLOCKS
    2666     }) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, "Lorem Ipsum") // This is what shows as the preview content.
    2667     )));
    2668   },
    2669   save: function save() {
    2670     // Honestly I don't want to do this but conventions are conventions.
    2671     return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"].Content, null));
    2672   }
    2673 };
    2674 
    2675 /***/ }),
    2676 
    2677 /***/ "./src/grid-layout-item.js":
    2678 /*!*********************************!*\
    2679   !*** ./src/grid-layout-item.js ***!
    2680   \*********************************/
    2681 /*! exports provided: name, settings */
    2682 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    2683 
    2684 "use strict";
    2685 __webpack_require__.r(__webpack_exports__);
    2686 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
    2687 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
    2688 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    2689 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
    2690 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
    2691 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
    2692 /* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinycolor2 */ "./node_modules/tinycolor2/tinycolor.js");
    2693 /* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinycolor2__WEBPACK_IMPORTED_MODULE_2__);
    2694 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
    2695 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__);
    2696 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    2697 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
    2698 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    2699 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__);
    2700 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
    2701 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__);
    2702 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
    2703 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_7__);
    2704 /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @wordpress/deprecated */ "@wordpress/deprecated");
    2705 /* harmony import */ var _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_wordpress_deprecated__WEBPACK_IMPORTED_MODULE_8__);
    2706 
    2707 
    2708 
    2709 /**
    2710  * WordPress dependencies
    2711  */
    2712 
    2713 
    2714 
    2715 
    2716 
    2717 
    2718 
    2719 
    2720 var name = 'gecko/grid-layout-item';
    2721 var settings = {
    2722   title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Item (deprecated)'),
    2723   parent: ['gecko/grid-layout'],
    2724   icon: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["SVG"], {
    2725     xmlns: "http://www.w3.org/2000/svg",
    2726     viewBox: "0 0 24 24"
    2727   }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
    2728     fill: "none",
    2729     d: "M0 0h24v24H0V0z"
    2730   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
    2731     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"
    2732   })),
    2733   description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('This block is deprecated. Please use basic or image block instead.'),
    2734   category: 'common',
    2735   supports: {
    2736     inserter: false
    2737   },
    2738   styles: [{
    2739     name: 'default',
    2740     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Default'),
    2741     isDefault: true
    2742   }, {
    2743     name: 'hover',
    2744     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Hover')
    2745   }],
    2746   attributes: {
    2747     type: {
    2748       type: 'string',
    2749       "default": undefined
    2750     },
    2751     //solid, image, image-content
    2752     h: {
    2753       type: 'number',
    2754       "default": 1
    2755     },
    2756     w: {
    2757       type: 'number'
    2758     },
    2759     minHeight: {
    2760       type: 'number',
    2761       "default": 200
    2762     },
    2763     opacity: {
    2764       type: 'number',
    2765       "default": 1
    2766     },
    2767     bgMedia: {
    2768       type: 'number'
    2769     },
    2770     bgMediaUrl: {
    2771       type: 'string'
    2772     },
    2773     bgColor: {
    2774       type: 'string'
    2775     },
    2776     bgColorSlug: {
    2777       type: 'string'
    2778     },
    2779     bgColorBrightness: {
    2780       type: 'number'
    2781     } //light or dark
    2782 
    2783   },
    2784   deprecated: [{
    2785     migrate: function migrate(attributes, innerBlocks) {
    2786       // const selected = select('core/editor').getSelectedBlock(); // because innerBlocks does not work.
    2787       // It appears that innerBlocks will be added in the future.
    2788       var h = attributes.h,
    2789           w = attributes.w,
    2790           bgMedia = attributes.bgMedia,
    2791           bgMediaUrl = attributes.bgMediaUrl,
    2792           minHeight = attributes.minHeight;
    2793 
    2794       if (bgMedia) {
    2795         return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__["createBlock"])('gecko/grid-layout-image', {
    2796           h: h,
    2797           w: w,
    2798           imgId: bgMedia,
    2799           imgUrl: bgMediaUrl,
    2800           minHeight: minHeight
    2801         }, innerBlocks);
    2802       }
    2803 
    2804       return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_5__["createBlock"])('gecko/grid-layout-basic', {
    2805         h: h,
    2806         w: w
    2807       }, innerBlocks);
    2808     },
    2809     save: function save() {
    2810       return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"].Content, null);
    2811     }
    2812   }],
    2813   edit: function edit(_ref) {
    2814     var attributes = _ref.attributes,
    2815         setAttributes = _ref.setAttributes,
    2816         className = _ref.className,
    2817         insertBlocksAfter = _ref.insertBlocksAfter;
    2818     var opacity = attributes.opacity,
    2819         h = attributes.h,
    2820         w = attributes.w,
    2821         type = attributes.type,
    2822         padding = attributes.padding,
    2823         bgMedia = attributes.bgMedia,
    2824         bgMediaUrl = attributes.bgMediaUrl,
    2825         bgColor = attributes.bgColor,
    2826         bgColorBrightness = attributes.bgColorBrightness,
    2827         bgColorSlug = attributes.bgColorSlug,
    2828         minHeight = attributes.minHeight;
    2829     _wordpress_deprecated__WEBPACK_IMPORTED_MODULE_8___default()('Grid Layout Idem', {
    2830       alternative: 'Basic or Image',
    2831       plugin: 'Gecko Grid Layout'
    2832     });
    2833     var styles = {
    2834       '--background': bgColor,
    2835       '--opacity': opacity,
    2836       gridColumnEnd: 'span ' + w,
    2837       gridRowEnd: 'span ' + h,
    2838       backgroundColor: bgColor,
    2839       backgroundImage: 'url(' + bgMediaUrl + ')',
    2840       minHeight: minHeight + 'px'
    2841     };
    2842     var lightOrDark = 'light';
    2843     if (bgColorBrightness < 130) lightOrDark = 'dark';
    2844     return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InspectorControls"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelBody"], {
    2845       title: "Settings"
    2846     }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
    2847       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Width'),
    2848       value: w,
    2849       onChange: function onChange(next) {
    2850         setAttributes({
    2851           w: next
    2852         });
    2853       },
    2854       min: 1,
    2855       max: 12
    2856     }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
    2857       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Span Rows'),
    2858       value: h,
    2859       onChange: function onChange(next) {
    2860         setAttributes({
    2861           h: next
    2862         });
    2863       },
    2864       min: 1,
    2865       max: 12
    2866     })), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelBody"], {
    2867       title: "Style"
    2868     }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["RangeControl"], {
    2869       label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('Minimum Height'),
    2870       value: minHeight,
    2871       onChange: function onChange(next) {
    2872         setAttributes({
    2873           minHeight: next
    2874         });
    2875       },
    2876       min: "50",
    2877       max: "600",
    2878       step: "1"
    2879     }), type !== "solid" && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["MediaUpload"], {
    2880       onSelect: function onSelect(value) {
    2881         // console.log(value);
    2882         setAttributes({
    2883           bgMedia: value.id,
    2884           bgMediaUrl: value.url
    2885         });
    2886       },
    2887       type: ['image', 'video'],
    2888       value: bgMedia ? bgMedia : null,
    2889       render: function render(_ref2) {
    2890         var open = _ref2.open;
    2891         return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, bgMediaUrl && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("img", {
    2892           src: bgMediaUrl,
    2893           onClick: open,
    2894           width: "100%",
    2895           height: "auto",
    2896           style: {
    2897             cursor: "pointer"
    2898           }
    2899         }), !bgMediaUrl && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    2900           className: 'button button-large',
    2901           onClick: open
    2902         }, "Choose Background"));
    2903       }
    2904     }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("hr", null), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["ColorPalette"], {
    2905       label: "Background Color",
    2906       value: bgColor ? bgColor.color : undefined,
    2907       onChange: function onChange(value) {
    2908         var settings = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_7__["select"])('core/editor').getEditorSettings();
    2909         var colorSlug = value ? Object(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["getColorObjectByColorValue"])(settings.colors, value).slug : undefined;
    2910         setAttributes({
    2911           bgColorSlug: colorSlug
    2912         });
    2913         var brightness = value ? tinycolor2__WEBPACK_IMPORTED_MODULE_2___default()(value).getBrightness() : undefined;
    2914         setAttributes({
    2915           bgColorBrightness: brightness
    2916         });
    2917         setAttributes({
    2918           bgColor: value
    2919         });
    2920       }
    2921     }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("hr", null)))), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    2922       className: "gecko-grid-layout-editor-styles",
    2923       style: styles
    2924     }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    2925       className: "wp-block-gecko-grid-layout-editor__wrap".concat(type, " ").concat(attributes.className, " has-").concat(bgColorSlug, "-background-color is-").concat(lightOrDark, "-background")
    2926     }, (type === 'image' || type === 'image-content') && !bgMedia && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["MediaPlaceholder"], {
    2927       onSelect: function onSelect(value) {
    2928         setAttributes({
    2929           bgMedia: value.id,
    2930           bgMediaUrl: value.url
    2931         });
    2932       },
    2933       allowedTypes: ['image'],
    2934       accept: "image/*"
    2935     }), typeof insertBlocksAfter === 'function' && //This line makes sure styles do not break
    2936     react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"], {
    2937       templateLock: false
    2938     })));
    2939   },
    2940   save: function save() {
    2941     // Honestly I don't want to do this but conventions are conventions.
    2942     return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_6__["InnerBlocks"].Content, null));
    2943   }
    2944 };
    2945 
    2946 /***/ }),
    2947 
    2948 /***/ "./src/grid-layout.js":
    2949 /*!****************************!*\
    2950   !*** ./src/grid-layout.js ***!
    2951   \****************************/
    2952 /*! exports provided: name, settings */
    2953 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    2954 
    2955 "use strict";
    2956 __webpack_require__.r(__webpack_exports__);
    2957 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; });
    2958 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
    2959 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    2960 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
    2961 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
    2962 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
    2963 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    2964 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
    2965 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
    2966 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__);
    2967 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
    2968 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_4__);
    2969 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
    2970 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_5__);
    2971 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    2972 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_6__);
    2973 /* harmony import */ var _template_select__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./template-select */ "./src/template-select.js");
    2974 
    2975 
    2976 
    2977 /**
    2978  * WordPress dependencies
    2979  */
    2980 
    2981 
    2982 
    2983 
    2984 
    2985 
    2986 
    2987 /**
    2988  * Allowed blocks constant is passed to InnerBlocks precisely as specified here.
    2989  * The contents of the array should never change.
    2990  * The array should contain the name of each block that is allowed.
    2991  *
    2992  * @constant
    2993  * @type {string[]}
    2994 */
    2995 
    2996 var ALLOWED_BLOCKS = ['gecko/grid-layout-item', 'gecko/grid-layout-image', 'gecko/grid-layout-basic'];
    2997 var name = 'gecko/grid-layout';
    2998 var settings = {
    2999   title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Grid'),
    3000   icon: react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["SVG"], {
    3001     viewBox: "0 0 24 24",
    3002     xmlns: "http://www.w3.org/2000/svg"
    3003   }, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
    3004     fill: "none",
    3005     d: "M0 0h24v24H0V0z"
    3006   }), react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["G"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Path"], {
    3007     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"
    3008   }))),
    3009   category: 'layout',
    3010   description: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Use CSS Grid to build layouts and, then add whatever content blocks you’d like.'),
    3011   supports: {
    3012     align: ['wide', 'full'],
    3013     html: false
    3014   },
    3015   deprecated: [{
    3016     migrate: function migrate() {},
    3017     save: function save() {
    3018       return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_4__["InnerBlocks"].Content, null);
    3019     }
    3020   }],
    3021   transforms: {
    3022     from: [{
    3023       type: 'block',
    3024       blocks: ['core/columns'],
    3025       transform: function transform(attributes) {
    3026         var selected = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_5__["select"])('core/editor').getSelectedBlock(); // because innerBlocks does not work.
    3027 
    3028         var columns = selected.innerBlocks;
    3029         var count = columns.length;
    3030         var w = Math.floor(12 / count);
    3031         var innerBlocks = [];
    3032         columns.map(function (column) {
    3033           var block = Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_6__["createBlock"])('gecko/grid-layout-basic', {
    3034             w: w
    3035           }, column.innerBlocks);
    3036           innerBlocks.push(block);
    3037         });
    3038         return Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_6__["createBlock"])('gecko/grid-layout', {}, innerBlocks);
    3039       }
    3040     }]
    3041   },
    3042   styles: [{
    3043     name: 'default',
    3044     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Default'),
    3045     isDefault: true
    3046   }, {
    3047     name: 'no-gap',
    3048     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('No Gap')
    3049   }],
    3050   edit: function edit(_ref) {
    3051     var insertBlocksAfter = _ref.insertBlocksAfter,
    3052         clientId = _ref.clientId;
    3053     // Get the block so we can see if it had innerblocks
    3054     var block = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_5__["select"])('core/editor').getBlocksByClientId(clientId)[0];
    3055     var hasInnerBlocks = block && block.innerBlocks ? block.innerBlocks.length > 0 : false;
    3056     return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", {
    3057       className: "wp-block-gecko-grid-layout-editor"
    3058     }, typeof insertBlocksAfter === 'function' ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_template_select__WEBPACK_IMPORTED_MODULE_7__["default"], {
    3059       hasInnnerBlocks: hasInnerBlocks,
    3060       allowedBlocks: ALLOWED_BLOCKS
    3061     }) : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Preview Not Available'))));
    3062   },
    3063   save: function save() {
    3064     // Honestly I don't want to do this but conventions are conventions.
    3065     return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_4__["InnerBlocks"].Content, null));
    3066   }
    3067 };
    3068 
    3069 /***/ }),
    3070 
    3071 /***/ "./src/index.js":
    3072 /*!**********************!*\
    3073   !*** ./src/index.js ***!
    3074   \**********************/
    3075 /*! no exports provided */
    3076 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    3077 
    3078 "use strict";
    3079 __webpack_require__.r(__webpack_exports__);
    3080 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    3081 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);
    3082 /* harmony import */ var _grid_layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./grid-layout */ "./src/grid-layout.js");
    3083 /* harmony import */ var _grid_layout_item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./grid-layout-item */ "./src/grid-layout-item.js");
    3084 /* harmony import */ var _grid_layout_image__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./grid-layout-image */ "./src/grid-layout-image.js");
    3085 /* harmony import */ var _grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./grid-layout-basic */ "./src/grid-layout-basic.js");
    3086 /**
    3087  * WordPress dependencies
    3088  */
    3089 
    3090 /**
    3091  * Internal dependencies
    3092  */
    3093 
    3094 
    3095 
    3096 
    3097 
    3098 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout__WEBPACK_IMPORTED_MODULE_1__["name"], _grid_layout__WEBPACK_IMPORTED_MODULE_1__["settings"]);
    3099 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__["name"], _grid_layout_basic__WEBPACK_IMPORTED_MODULE_4__["settings"]);
    3100 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_image__WEBPACK_IMPORTED_MODULE_3__["name"], _grid_layout_image__WEBPACK_IMPORTED_MODULE_3__["settings"]);
    3101 Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__["registerBlockType"])(_grid_layout_item__WEBPACK_IMPORTED_MODULE_2__["name"], _grid_layout_item__WEBPACK_IMPORTED_MODULE_2__["settings"]);
    3102 /**
    3103  * This make sure the grid works in the editor.
    3104  */
    3105 
    3106 document.addEventListener("DOMContentLoaded", function () {
    3107   // Create the observer
    3108   var observer = new MutationObserver(function (mutations) {
    3109     mutations.forEach(function (mutation) {
    3110       // On style mutation update blocks styles.
    3111       var block = mutation.target.closest('[data-type^="gecko/grid-layout-"]');
    3112       if (!block) return;
    3113       var styles = mutation.target.getAttribute('style');
    3114       block.style = styles;
    3115     });
    3116   }); // Add style elements to the observer
    3117 
    3118   var addStyleElementsToObserver = function addStyleElementsToObserver() {
    3119     var styleElements = document.querySelectorAll('.gecko-grid-layout-editor-styles');
    3120     if (!styleElements.length > 0) return;
    3121     var _iteratorNormalCompletion = true;
    3122     var _didIteratorError = false;
    3123     var _iteratorError = undefined;
    3124 
    3125     try {
    3126       for (var _iterator = styleElements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
    3127         var element = _step.value;
    3128         observer.observe(element, {
    3129           attributes: true,
    3130           attributeFilter: ['style']
    3131         });
    3132       }
    3133     } catch (err) {
    3134       _didIteratorError = true;
    3135       _iteratorError = err;
    3136     } finally {
    3137       try {
    3138         if (!_iteratorNormalCompletion && _iterator["return"] != null) {
    3139           _iterator["return"]();
    3140         }
    3141       } finally {
    3142         if (_didIteratorError) {
    3143           throw _iteratorError;
    3144         }
    3145       }
    3146     }
    3147   }; // Add the styles to grid layout items for editor.
    3148 
    3149 
    3150   function applyAllGridItemStyles() {
    3151     var blocks = document.querySelectorAll('[data-type^="gecko/grid-layout-"]');
    3152     if (!blocks.length > 0) return;
    3153     var _iteratorNormalCompletion2 = true;
    3154     var _didIteratorError2 = false;
    3155     var _iteratorError2 = undefined;
    3156 
    3157     try {
    3158       for (var _iterator2 = blocks[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
    3159         var block = _step2.value;
    3160         applyGridItemStyle(block);
    3161       }
    3162     } catch (err) {
    3163       _didIteratorError2 = true;
    3164       _iteratorError2 = err;
    3165     } finally {
    3166       try {
    3167         if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
    3168           _iterator2["return"]();
    3169         }
    3170       } finally {
    3171         if (_didIteratorError2) {
    3172           throw _iteratorError2;
    3173         }
    3174       }
    3175     }
    3176   }
    3177 
    3178   function applyGridItemStyle(block) {
    3179     // if (typeof block.querySelector !== 'function') return;
    3180     var styles = block.querySelector('.gecko-grid-layout-editor-styles').getAttribute('style');
    3181     block.style = styles;
    3182   } // Add the styles to grid layout items for editor.
    3183 
    3184 
    3185   function newGridInserted(e) {
    3186     if (typeof e.target.querySelectorAll !== 'function') return;
    3187     var blocks = e.target.querySelectorAll('[data-type^="gecko/grid-layout-"]');
    3188     if (!blocks.length > 0) return; // console.log('node added', e);
    3189 
    3190     var _iteratorNormalCompletion3 = true;
    3191     var _didIteratorError3 = false;
    3192     var _iteratorError3 = undefined;
    3193 
    3194     try {
    3195       for (var _iterator3 = blocks[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
    3196         var block = _step3.value;
    3197         // console.log('style', block);
    3198         applyGridItemStyle(block);
    3199       }
    3200     } catch (err) {
    3201       _didIteratorError3 = true;
    3202       _iteratorError3 = err;
    3203     } finally {
    3204       try {
    3205         if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
    3206           _iterator3["return"]();
    3207         }
    3208       } finally {
    3209         if (_didIteratorError3) {
    3210           throw _iteratorError3;
    3211         }
    3212       }
    3213     }
    3214   }
    3215 
    3216   var newBlockObserver = new MutationObserver(function (mutations) {
    3217     mutations.forEach(function (mutation) {
    3218       if (!mutation.addedNodes) return;
    3219 
    3220       for (var i = 0; i < mutation.addedNodes.length; i++) {
    3221         // do things to your newly added nodes here
    3222         var node = mutation.addedNodes[i];
    3223         if (typeof node.matches !== 'function') return;
    3224         if (!node.matches('[data-type^="gecko/grid-layout-"]')) return;
    3225         return applyGridItemStyle(node);
    3226       }
    3227     });
    3228   });
    3229   newBlockObserver.observe(document.body, {
    3230     childList: true,
    3231     subtree: true,
    3232     attributes: false,
    3233     characterData: false
    3234   });
    3235   applyAllGridItemStyles();
    3236   document.addEventListener("DOMNodeInserted", newGridInserted);
    3237   document.addEventListener("DOMNodeInserted", addStyleElementsToObserver);
    3238 });
    3239 
    3240 /***/ }),
    3241 
    3242 /***/ "./src/template-preview.js":
    3243 /*!*********************************!*\
    3244   !*** ./src/template-preview.js ***!
    3245   \*********************************/
    3246 /*! exports provided: default */
    3247 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    3248 
    3249 "use strict";
    3250 __webpack_require__.r(__webpack_exports__);
    3251 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Preview; });
    3252 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
    3253 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
    3254 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");
    3255 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
    3256 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
    3257 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
    3258 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");
    3259 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
    3260 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js");
    3261 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);
    3262 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    3263 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_5__);
    3264 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "react");
    3265 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
    3266 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    3267 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__);
    3268 
    3269 
    3270 
    3271 
    3272 
    3273 
    3274 
    3275  // import { Fragment } from '@wordpress/element';
    3276 
    3277 var Preview =
    3278 /*#__PURE__*/
    3279 function (_React$PureComponent) {
    3280   _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(Preview, _React$PureComponent);
    3281 
    3282   function Preview() {
    3283     _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, Preview);
    3284 
    3285     return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(Preview).apply(this, arguments));
    3286   }
    3287 
    3288   _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(Preview, [{
    3289     key: "render",
    3290     value: function render() {
    3291       var layout = this.props.layout;
    3292       return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("div", {
    3293         className: "gecko-grid-layout-template-preview"
    3294       }, layout.map(function (block, key) {
    3295         var styles = {
    3296           gridColumnEnd: 'span ' + block[1].w,
    3297           gridRowEnd: 'span ' + block[1].h
    3298         };
    3299         return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("div", {
    3300           key: key,
    3301           className: "gecko-grid-layout-template-preview__item",
    3302           style: styles
    3303         });
    3304       }));
    3305     }
    3306   }]);
    3307 
    3308   return Preview;
    3309 }(react__WEBPACK_IMPORTED_MODULE_6___default.a.PureComponent);
    3310 
    3311 
    3312 
    3313 /***/ }),
    3314 
    3315 /***/ "./src/template-select.js":
    3316 /*!********************************!*\
    3317   !*** ./src/template-select.js ***!
    3318   \********************************/
    3319 /*! exports provided: default */
    3320 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    3321 
    3322 "use strict";
    3323 __webpack_require__.r(__webpack_exports__);
    3324 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TemplateSelect; });
    3325 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
    3326 /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);
    3327 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");
    3328 /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);
    3329 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
    3330 /* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);
    3331 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");
    3332 /* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);
    3333 /* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js");
    3334 /* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__);
    3335 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js");
    3336 /* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);
    3337 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
    3338 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6__);
    3339 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    3340 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_7__);
    3341 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react */ "react");
    3342 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__);
    3343 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    3344 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__);
    3345 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @wordpress/editor */ "@wordpress/editor");
    3346 /* harmony import */ var _wordpress_editor__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_wordpress_editor__WEBPACK_IMPORTED_MODULE_10__);
    3347 /* harmony import */ var _templates__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./templates */ "./src/templates.js");
    3348 /* harmony import */ var _template_preview__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./template-preview */ "./src/template-preview.js");
    3349 
    3350 
    3351 
    3352 
    3353 
    3354 
    3355 
    3356 
    3357 
    3358 
    3359 
    3360  // Custom Templates to choose from.
    3361 
    3362  // Custom Templates to choose from.
    3363 // import { Fragment } from '@wordpress/element';
    3364 
    3365 var TemplateSelect =
    3366 /*#__PURE__*/
    3367 function (_React$Component) {
    3368   _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(TemplateSelect, _React$Component);
    3369 
    3370   function TemplateSelect(props) {
    3371     var _this;
    3372 
    3373     _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, TemplateSelect);
    3374 
    3375     _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(TemplateSelect).call(this, props));
    3376 
    3377     _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this), "setTemplate", function (template) {
    3378       _this.setState({
    3379         selected: template
    3380       });
    3381     });
    3382 
    3383     _this.state = {
    3384       selected: null
    3385     };
    3386     return _this;
    3387   }
    3388 
    3389   _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(TemplateSelect, [{
    3390     key: "render",
    3391     value: function render() {
    3392       var _this2 = this;
    3393 
    3394       var _this$props = this.props,
    3395           hasInnnerBlocks = _this$props.hasInnnerBlocks,
    3396           allowedBlocks = _this$props.allowedBlocks;
    3397       var selected = this.state.selected;
    3398       var blankTemplate = [['gecko/grid-layout-basic', {
    3399         w: 6
    3400       }]];
    3401 
    3402       if (!hasInnnerBlocks && !selected) {
    3403         return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("div", {
    3404           className: "gecko-grid-layout-template-select"
    3405         }, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("h2", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__["__"])('Choose a Template')), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__["__"])('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_8___default.a.createElement("div", {
    3406           className: "gecko-grid-layout-template-select__templates"
    3407         }, Object(_templates__WEBPACK_IMPORTED_MODULE_11__["default"])().map(function (template, key) {
    3408           return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("div", {
    3409             key: key,
    3410             className: "gecko-grid-layout-template-select__template",
    3411             onClick: function onClick() {
    3412               return _this2.setTemplate(template.layout);
    3413             }
    3414           }, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(_template_preview__WEBPACK_IMPORTED_MODULE_12__["default"], {
    3415             layout: template.layout
    3416           }), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("p", null, template.label));
    3417         }), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("div", {
    3418           className: "gecko-grid-layout-template-select__template",
    3419           onClick: function onClick() {
    3420             return _this2.setTemplate(blankTemplate);
    3421           }
    3422         }, react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(_template_preview__WEBPACK_IMPORTED_MODULE_12__["default"], {
    3423           layout: blankTemplate
    3424         }), react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__["__"])('Create New')))));
    3425       }
    3426 
    3427       return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(_wordpress_editor__WEBPACK_IMPORTED_MODULE_10__["InnerBlocks"], {
    3428         template: selected,
    3429         templateLock: false,
    3430         allowedBlocks: allowedBlocks
    3431       });
    3432     }
    3433   }]);
    3434 
    3435   return TemplateSelect;
    3436 }(react__WEBPACK_IMPORTED_MODULE_8___default.a.Component);
    3437 
    3438 
    3439 
    3440 /***/ }),
    3441 
    3442 /***/ "./src/templates.js":
    3443 /*!**************************!*\
    3444   !*** ./src/templates.js ***!
    3445   \**************************/
    3446 /*! exports provided: default */
    3447 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    3448 
    3449 "use strict";
    3450 __webpack_require__.r(__webpack_exports__);
    3451 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getTemplates; });
    3452 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    3453 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__);
    3454 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/hooks */ "@wordpress/hooks");
    3455 /* harmony import */ var _wordpress_hooks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__);
    3456 /**
    3457  * WordPress dependencies
    3458  */
    3459 
    3460 
    3461 function getTemplates() {
    3462   var templates = [{
    3463     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('2 Columns'),
    3464     layout: [['gecko/grid-layout-basic', {
    3465       w: 6
    3466     }], ['gecko/grid-layout-basic', {
    3467       w: 6
    3468     }]]
    3469   }, {
    3470     label: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__["__"])('3 Columns'),
    3471     layout: [['gecko/grid-layout-basic', {
    3472       w: 4
    3473     }], ['gecko/grid-layout-basic', {
    3474       w: 4
    3475     }], ['gecko/grid-layout-basic', {
    3476       w: 4
    3477     }]]
    3478   }];
    3479   return Object(_wordpress_hooks__WEBPACK_IMPORTED_MODULE_1__["applyFilters"])('gecko.grid-layout.templates', templates);
    3480 }
    3481 
    3482 /***/ }),
    3483 
    3484 /***/ "@wordpress/blocks":
    3485 /*!***********************************!*\
    3486   !*** external "window.wp.blocks" ***!
    3487   \***********************************/
    3488 /*! no static exports found */
    3489 /***/ (function(module, exports) {
    3490 
    3491 module.exports = window.wp.blocks;
    3492 
    3493 /***/ }),
    3494 
    3495 /***/ "@wordpress/components":
    3496 /*!***************************************!*\
    3497   !*** external "window.wp.components" ***!
    3498   \***************************************/
    3499 /*! no static exports found */
    3500 /***/ (function(module, exports) {
    3501 
    3502 module.exports = window.wp.components;
    3503 
    3504 /***/ }),
    3505 
    3506 /***/ "@wordpress/data":
    3507 /*!*********************************!*\
    3508   !*** external "window.wp.data" ***!
    3509   \*********************************/
    3510 /*! no static exports found */
    3511 /***/ (function(module, exports) {
    3512 
    3513 module.exports = window.wp.data;
    3514 
    3515 /***/ }),
    3516 
    3517 /***/ "@wordpress/deprecated":
    3518 /*!***************************************!*\
    3519   !*** external "window.wp.deprecated" ***!
    3520   \***************************************/
    3521 /*! no static exports found */
    3522 /***/ (function(module, exports) {
    3523 
    3524 module.exports = window.wp.deprecated;
    3525 
    3526 /***/ }),
    3527 
    3528 /***/ "@wordpress/editor":
    3529 /*!***********************************!*\
    3530   !*** external "window.wp.editor" ***!
    3531   \***********************************/
    3532 /*! no static exports found */
    3533 /***/ (function(module, exports) {
    3534 
    3535 module.exports = window.wp.editor;
    3536 
    3537 /***/ }),
    3538 
    3539 /***/ "@wordpress/element":
    3540 /*!************************************!*\
    3541   !*** external "window.wp.element" ***!
    3542   \************************************/
    3543 /*! no static exports found */
    3544 /***/ (function(module, exports) {
    3545 
    3546 module.exports = window.wp.element;
    3547 
    3548 /***/ }),
    3549 
    3550 /***/ "@wordpress/hooks":
    3551 /*!**********************************!*\
    3552   !*** external "window.wp.hooks" ***!
    3553   \**********************************/
    3554 /*! no static exports found */
    3555 /***/ (function(module, exports) {
    3556 
    3557 module.exports = window.wp.hooks;
    3558 
    3559 /***/ }),
    3560 
    3561 /***/ "@wordpress/i18n":
    3562 /*!*********************************!*\
    3563   !*** external "window.wp.i18n" ***!
    3564   \*********************************/
    3565 /*! no static exports found */
    3566 /***/ (function(module, exports) {
    3567 
    3568 module.exports = window.wp.i18n;
    3569 
    3570 /***/ }),
    3571 
    3572 /***/ "react":
    3573 /*!************************!*\
    3574   !*** external "React" ***!
    3575   \************************/
    3576 /*! no static exports found */
    3577 /***/ (function(module, exports) {
    3578 
    3579 module.exports = React;
    3580 
    3581 /***/ })
    3582 
    3583 /******/ });
    3584 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9ub3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGlueWNvbG9yMi90aW55Y29sb3IuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZ3JpZC1sYXlvdXQtYmFzaWMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2dyaWQtbGF5b3V0LWltYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy9ncmlkLWxheW91dC1pdGVtLmpzIiwid2VicGFjazovLy8uL3NyYy9ncmlkLWxheW91dC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlLXByZXZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlLXNlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy53cC5ibG9ja3NcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cud3AuY29tcG9uZW50c1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy53cC5kYXRhXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LndwLmRlcHJlY2F0ZWRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cud3AuZWRpdG9yXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LndwLmVsZW1lbnRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cud3AuaG9va3NcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cud3AuaTE4blwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIlJlYWN0XCIiXSwibmFtZXMiOlsibmFtZSIsInNldHRpbmdzIiwidGl0bGUiLCJfXyIsInBhcmVudCIsImljb24iLCJkZXNjcmlwdGlvbiIsImNhdGVnb3J5Iiwic3VwcG9ydHMiLCJjbGFzc05hbWUiLCJpbnNlcnRlciIsInJldXNhYmxlIiwiaHRtbCIsInN0eWxlcyIsImxhYmVsIiwiaXNEZWZhdWx0IiwiYXR0cmlidXRlcyIsImgiLCJ0eXBlIiwidyIsImFsaWduQ29udGVudCIsInRyYW5zZm9ybXMiLCJmcm9tIiwiYmxvY2tzIiwidHJhbnNmb3JtIiwiaW5uZXJCbG9ja3MiLCJzZWxlY3RlZCIsInNlbGVjdCIsImdldFNlbGVjdGVkQmxvY2siLCJjcmVhdGVCbG9jayIsImRlcHJlY2F0ZWQiLCJtaWdyYXRlIiwic2F2ZSIsImVkaXQiLCJzZXRBdHRyaWJ1dGVzIiwiaW5zZXJ0QmxvY2tzQWZ0ZXIiLCJncmlkQ29sdW1uRW5kIiwiZ3JpZFJvd0VuZCIsImFsaWduU2VsZiIsIm5leHQiLCJpc0FjdGl2ZSIsIm9uQ2xpY2siLCJBTExPV0VEX0JMT0NLUyIsIm1pbkhlaWdodCIsImltZ0lkIiwiaW1nVXJsIiwiYmdNZWRpYSIsImJnTWVkaWFVcmwiLCJtZWRpYUlkIiwibWVkaWFVcmwiLCJ0b2dnbGVTZWxlY3Rpb24iLCJvblJlc2l6aW5nIiwiZXZlbnQiLCJkaXJlY3Rpb24iLCJlbHQiLCJkZWx0YSIsIm5ld01pbkhlaWdodCIsImNsaWVudEhlaWdodCIsInN0eWxlIiwiaGVpZ2h0IiwiY29sdW1uV2lkdGgiLCJNYXRoIiwiZmxvb3IiLCJwYXJlbnROb2RlIiwib2Zmc2V0V2lkdGgiLCJjdXJyZW50U3BhbiIsImVsQ29sV2lkdGgiLCJjbGllbnRXaWR0aCIsInNwYW5zIiwidG9VcGRhdGUiLCJwYXJzZUludCIsIndpZHRoIiwib3JpZ2luYWwiLCJuZXdXaWR0aCIsInZhbHVlIiwiaWQiLCJ1cmwiLCJvcGVuIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwiZGVib3VuY2UiLCJ1bmRlZmluZWQiLCJvcGFjaXR5IiwiYmdDb2xvciIsImJnQ29sb3JTbHVnIiwiYmdDb2xvckJyaWdodG5lc3MiLCJwYWRkaW5nIiwiYWx0ZXJuYXRpdmUiLCJwbHVnaW4iLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJsaWdodE9yRGFyayIsImN1cnNvciIsImNvbG9yIiwiZ2V0RWRpdG9yU2V0dGluZ3MiLCJjb2xvclNsdWciLCJnZXRDb2xvck9iamVjdEJ5Q29sb3JWYWx1ZSIsImNvbG9ycyIsInNsdWciLCJicmlnaHRuZXNzIiwidGlueWNvbG9yIiwiZ2V0QnJpZ2h0bmVzcyIsImFsaWduIiwiY29sdW1ucyIsImNvdW50IiwibGVuZ3RoIiwibWFwIiwiY29sdW1uIiwiYmxvY2siLCJwdXNoIiwiY2xpZW50SWQiLCJnZXRCbG9ja3NCeUNsaWVudElkIiwiaGFzSW5uZXJCbG9ja3MiLCJyZWdpc3RlckJsb2NrVHlwZSIsImdyaWQiLCJncmlkSXRlbUJhc2ljIiwiZ3JpZEl0ZW1JbWFnZSIsImdyaWRJdGVtIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwiZm9yRWFjaCIsIm11dGF0aW9uIiwidGFyZ2V0IiwiY2xvc2VzdCIsImdldEF0dHJpYnV0ZSIsImFkZFN0eWxlRWxlbWVudHNUb09ic2VydmVyIiwic3R5bGVFbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJlbGVtZW50Iiwib2JzZXJ2ZSIsImF0dHJpYnV0ZUZpbHRlciIsImFwcGx5QWxsR3JpZEl0ZW1TdHlsZXMiLCJhcHBseUdyaWRJdGVtU3R5bGUiLCJxdWVyeVNlbGVjdG9yIiwibmV3R3JpZEluc2VydGVkIiwiZSIsIm5ld0Jsb2NrT2JzZXJ2ZXIiLCJhZGRlZE5vZGVzIiwiaSIsIm5vZGUiLCJtYXRjaGVzIiwiYm9keSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJjaGFyYWN0ZXJEYXRhIiwiUHJldmlldyIsImxheW91dCIsInByb3BzIiwia2V5IiwiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwiVGVtcGxhdGVTZWxlY3QiLCJ0ZW1wbGF0ZSIsInNldFN0YXRlIiwic3RhdGUiLCJoYXNJbm5uZXJCbG9ja3MiLCJhbGxvd2VkQmxvY2tzIiwiYmxhbmtUZW1wbGF0ZSIsInRlbXBsYXRlcyIsInNldFRlbXBsYXRlIiwiQ29tcG9uZW50IiwiZ2V0VGVtcGxhdGVzIiwiYXBwbHlGaWx0ZXJzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7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QUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxnQkFBZ0I7QUFDaEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsZ0JBQWdCO0FBQ2hCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSxLQUFLLGtCQUFrQixZQUFZLGtCQUFrQjtBQUNyRDtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtB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LEVBQTRCO0FBQzNCQSxPQUFDLEVBQUU7QUFEd0IsS0FBNUIsQ0FKTztBQUZTLEdBQUQsRUFXakI7QUFDQ0wsU0FBSyxFQUFFWCwwREFBRSxDQUFDLFdBQUQsQ0FEVjtBQUVDb0osVUFBTSxFQUFFLENBQ1AsQ0FBQyx5QkFBRCxFQUE0QjtBQUMzQnBJLE9BQUMsRUFBRTtBQUR3QixLQUE1QixDQURPLEVBSVAsQ0FBQyx5QkFBRCxFQUE0QjtBQUMzQkEsT0FBQyxFQUFFO0FBRHdCLEtBQTVCLENBSk8sRUFPUCxDQUFDLHlCQUFELEVBQTRCO0FBQzNCQSxPQUFDLEVBQUU7QUFEd0IsS0FBNUIsQ0FQTztBQUZULEdBWGlCLENBQWxCO0FBMEJBLFNBQU9vSixxRUFBWSxDQUFDLDZCQUFELEVBQWdDSixTQUFoQyxDQUFuQjtBQUNBLEM7Ozs7Ozs7Ozs7O0FDakNELGtDOzs7Ozs7Ozs7OztBQ0FBLHNDOzs7Ozs7Ozs7OztBQ0FBLGdDOzs7Ozs7Ozs7OztBQ0FBLHNDOzs7Ozs7Ozs7OztBQ0FBLGtDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLGlDOzs7Ozs7Ozs7OztBQ0FBLGdDOzs7Ozs7Ozs7OztBQ0FBLHVCIiwiZmlsZSI6ImVkaXRvci5idW5kbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi93cC1jb250ZW50L3BsdWdpbnMvZ2Vja28tZ3JpZC1sYXlvdXQvZGlzdC9cIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyIsImZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mMihvYmopOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZjIoU3ltYm9sLml0ZXJhdG9yKSA9PT0gXCJzeW1ib2xcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogX3R5cGVvZjIob2JqKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mOyIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgbm93ID0gcmVxdWlyZSgnLi9ub3cnKSxcbiAgICB0b051bWJlciA9IHJlcXVpcmUoJy4vdG9OdW1iZXInKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWJvdW5jZWQgZnVuY3Rpb24gdGhhdCBkZWxheXMgaW52b2tpbmcgYGZ1bmNgIHVudGlsIGFmdGVyIGB3YWl0YFxuICogbWlsbGlzZWNvbmRzIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gd2FzXG4gKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG4gKiBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0byBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS5cbiAqIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZVxuICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICogd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbi4gU3Vic2VxdWVudFxuICogY2FsbHMgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2BcbiAqIGludm9jYXRpb24uXG4gKlxuICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAqXG4gKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAqXG4gKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8uZGVib3VuY2VgIGFuZCBgXy50aHJvdHRsZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWJvdW5jZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPWZhbHNlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuICogIFRoZSBtYXhpbXVtIHRpbWUgYGZ1bmNgIGlzIGFsbG93ZWQgdG8gYmUgZGVsYXllZCBiZWZvcmUgaXQncyBpbnZva2VkLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIGNvc3RseSBjYWxjdWxhdGlvbnMgd2hpbGUgdGhlIHdpbmRvdyBzaXplIGlzIGluIGZsdXguXG4gKiBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgXy5kZWJvdW5jZShjYWxjdWxhdGVMYXlvdXQsIDE1MCkpO1xuICpcbiAqIC8vIEludm9rZSBgc2VuZE1haWxgIHdoZW4gY2xpY2tlZCwgZGVib3VuY2luZyBzdWJzZXF1ZW50IGNhbGxzLlxuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uZGVib3VuY2Uoc2VuZE1haWwsIDMwMCwge1xuICogICAnbGVhZGluZyc6IHRydWUsXG4gKiAgICd0cmFpbGluZyc6IGZhbHNlXG4gKiB9KSk7XG4gKlxuICogLy8gRW5zdXJlIGBiYXRjaExvZ2AgaXMgaW52b2tlZCBvbmNlIGFmdGVyIDEgc2Vjb25kIG9mIGRlYm91bmNlZCBjYWxscy5cbiAqIHZhciBkZWJvdW5jZWQgPSBfLmRlYm91bmNlKGJhdGNoTG9nLCAyNTAsIHsgJ21heFdhaXQnOiAxMDAwIH0pO1xuICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuICogalF1ZXJ5KHNvdXJjZSkub24oJ21lc3NhZ2UnLCBkZWJvdW5jZWQpO1xuICpcbiAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG4gKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCBkZWJvdW5jZWQuY2FuY2VsKTtcbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgbGFzdEFyZ3MsXG4gICAgICBsYXN0VGhpcyxcbiAgICAgIG1heFdhaXQsXG4gICAgICByZXN1bHQsXG4gICAgICB0aW1lcklkLFxuICAgICAgbGFzdENhbGxUaW1lLFxuICAgICAgbGFzdEludm9rZVRpbWUgPSAwLFxuICAgICAgbGVhZGluZyA9IGZhbHNlLFxuICAgICAgbWF4aW5nID0gZmFsc2UsXG4gICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgd2FpdCA9IHRvTnVtYmVyKHdhaXQpIHx8IDA7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgIGxlYWRpbmcgPSAhIW9wdGlvbnMubGVhZGluZztcbiAgICBtYXhpbmcgPSAnbWF4V2FpdCcgaW4gb3B0aW9ucztcbiAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0O1xuICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpIHtcbiAgICB2YXIgYXJncyA9IGxhc3RBcmdzLFxuICAgICAgICB0aGlzQXJnID0gbGFzdFRoaXM7XG5cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBsZWFkaW5nRWRnZSh0aW1lKSB7XG4gICAgLy8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci5cbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgLy8gU3RhcnQgdGhlIHRpbWVyIGZvciB0aGUgdHJhaWxpbmcgZWRnZS5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIC8vIEludm9rZSB0aGUgbGVhZGluZyBlZGdlLlxuICAgIHJldHVybiBsZWFkaW5nID8gaW52b2tlRnVuYyh0aW1lKSA6IHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbWFpbmluZ1dhaXQodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWUsXG4gICAgICAgIHRpbWVXYWl0aW5nID0gd2FpdCAtIHRpbWVTaW5jZUxhc3RDYWxsO1xuXG4gICAgcmV0dXJuIG1heGluZ1xuICAgICAgPyBuYXRpdmVNaW4odGltZVdhaXRpbmcsIG1heFdhaXQgLSB0aW1lU2luY2VMYXN0SW52b2tlKVxuICAgICAgOiB0aW1lV2FpdGluZztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEludm9rZSh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZTtcblxuICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBhY3Rpdml0eSBoYXMgc3RvcHBlZCBhbmQgd2UncmUgYXQgdGhlXG4gICAgLy8gdHJhaWxpbmcgZWRnZSwgdGhlIHN5c3RlbSB0aW1lIGhhcyBnb25lIGJhY2t3YXJkcyBhbmQgd2UncmUgdHJlYXRpbmdcbiAgICAvLyBpdCBhcyB0aGUgdHJhaWxpbmcgZWRnZSwgb3Igd2UndmUgaGl0IHRoZSBgbWF4V2FpdGAgbGltaXQuXG4gICAgcmV0dXJuIChsYXN0Q2FsbFRpbWUgPT09IHVuZGVmaW5lZCB8fCAodGltZVNpbmNlTGFzdENhbGwgPj0gd2FpdCkgfHxcbiAgICAgICh0aW1lU2luY2VMYXN0Q2FsbCA8IDApIHx8IChtYXhpbmcgJiYgdGltZVNpbmNlTGFzdEludm9rZSA+PSBtYXhXYWl0KSk7XG4gIH1cblxuICBmdW5jdGlvbiB0aW1lckV4cGlyZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKTtcbiAgICBpZiAoc2hvdWxkSW52b2tlKHRpbWUpKSB7XG4gICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgIH1cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lci5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhaWxpbmdFZGdlKHRpbWUpIHtcbiAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5zIGBmdW5jYCBoYXMgYmVlblxuICAgIC8vIGRlYm91bmNlZCBhdCBsZWFzdCBvbmNlLlxuICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgfVxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgfVxuICAgIGxhc3RJbnZva2VUaW1lID0gMDtcbiAgICBsYXN0QXJncyA9IGxhc3RDYWxsVGltZSA9IGxhc3RUaGlzID0gdGltZXJJZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHJldHVybiB0aW1lcklkID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiB0cmFpbGluZ0VkZ2Uobm93KCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVib3VuY2VkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCksXG4gICAgICAgIGlzSW52b2tpbmcgPSBzaG91bGRJbnZva2UodGltZSk7XG5cbiAgICBsYXN0QXJncyA9IGFyZ3VtZW50cztcbiAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgbGFzdENhbGxUaW1lID0gdGltZTtcblxuICAgIGlmIChpc0ludm9raW5nKSB7XG4gICAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgICAgaWYgKG1heGluZykge1xuICAgICAgICAvLyBIYW5kbGUgaW52b2NhdGlvbnMgaW4gYSB0aWdodCBsb29wLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYm91bmNlO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xudmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBub3c7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsIi8vIFRpbnlDb2xvciB2MS40LjFcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZ3JpbnMvVGlueUNvbG9yXG4vLyBCcmlhbiBHcmluc3RlYWQsIE1JVCBMaWNlbnNlXG5cbihmdW5jdGlvbihNYXRoKSB7XG5cbnZhciB0cmltTGVmdCA9IC9eXFxzKy8sXG4gICAgdHJpbVJpZ2h0ID0gL1xccyskLyxcbiAgICB0aW55Q291bnRlciA9IDAsXG4gICAgbWF0aFJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICBtYXRoTWluID0gTWF0aC5taW4sXG4gICAgbWF0aE1heCA9IE1hdGgubWF4LFxuICAgIG1hdGhSYW5kb20gPSBNYXRoLnJhbmRvbTtcblxuZnVuY3Rpb24gdGlueWNvbG9yIChjb2xvciwgb3B0cykge1xuXG4gICAgY29sb3IgPSAoY29sb3IpID8gY29sb3IgOiAnJztcbiAgICBvcHRzID0gb3B0cyB8fCB7IH07XG5cbiAgICAvLyBJZiBpbnB1dCBpcyBhbHJlYWR5IGEgdGlueWNvbG9yLCByZXR1cm4gaXRzZWxmXG4gICAgaWYgKGNvbG9yIGluc3RhbmNlb2YgdGlueWNvbG9yKSB7XG4gICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGNhbGwgdXNpbmcgbmV3IGluc3RlYWRcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgdGlueWNvbG9yKSkge1xuICAgICAgICByZXR1cm4gbmV3IHRpbnljb2xvcihjb2xvciwgb3B0cyk7XG4gICAgfVxuXG4gICAgdmFyIHJnYiA9IGlucHV0VG9SR0IoY29sb3IpO1xuICAgIHRoaXMuX29yaWdpbmFsSW5wdXQgPSBjb2xvcixcbiAgICB0aGlzLl9yID0gcmdiLnIsXG4gICAgdGhpcy5fZyA9IHJnYi5nLFxuICAgIHRoaXMuX2IgPSByZ2IuYixcbiAgICB0aGlzLl9hID0gcmdiLmEsXG4gICAgdGhpcy5fcm91bmRBID0gbWF0aFJvdW5kKDEwMCp0aGlzLl9hKSAvIDEwMCxcbiAgICB0aGlzLl9mb3JtYXQgPSBvcHRzLmZvcm1hdCB8fCByZ2IuZm9ybWF0O1xuICAgIHRoaXMuX2dyYWRpZW50VHlwZSA9IG9wdHMuZ3JhZGllbnRUeXBlO1xuXG4gICAgLy8gRG9uJ3QgbGV0IHRoZSByYW5nZSBvZiBbMCwyNTVdIGNvbWUgYmFjayBpbiBbMCwxXS5cbiAgICAvLyBQb3RlbnRpYWxseSBsb3NlIGEgbGl0dGxlIGJpdCBvZiBwcmVjaXNpb24gaGVyZSwgYnV0IHdpbGwgZml4IGlzc3VlcyB3aGVyZVxuICAgIC8vIC41IGdldHMgaW50ZXJwcmV0ZWQgYXMgaGFsZiBvZiB0aGUgdG90YWwsIGluc3RlYWQgb2YgaGFsZiBvZiAxXG4gICAgLy8gSWYgaXQgd2FzIHN1cHBvc2VkIHRvIGJlIDEyOCwgdGhpcyB3YXMgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIGJ5IGBpbnB1dFRvUmdiYFxuICAgIGlmICh0aGlzLl9yIDwgMSkgeyB0aGlzLl9yID0gbWF0aFJvdW5kKHRoaXMuX3IpOyB9XG4gICAgaWYgKHRoaXMuX2cgPCAxKSB7IHRoaXMuX2cgPSBtYXRoUm91bmQodGhpcy5fZyk7IH1cbiAgICBpZiAodGhpcy5fYiA8IDEpIHsgdGhpcy5fYiA9IG1hdGhSb3VuZCh0aGlzLl9iKTsgfVxuXG4gICAgdGhpcy5fb2sgPSByZ2Iub2s7XG4gICAgdGhpcy5fdGNfaWQgPSB0aW55Q291bnRlcisrO1xufVxuXG50aW55Y29sb3IucHJvdG90eXBlID0ge1xuICAgIGlzRGFyazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJyaWdodG5lc3MoKSA8IDEyODtcbiAgICB9LFxuICAgIGlzTGlnaHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNEYXJrKCk7XG4gICAgfSxcbiAgICBpc1ZhbGlkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29rO1xuICAgIH0sXG4gICAgZ2V0T3JpZ2luYWxJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dDtcbiAgICB9LFxuICAgIGdldEZvcm1hdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXQ7XG4gICAgfSxcbiAgICBnZXRBbHBoYTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hO1xuICAgIH0sXG4gICAgZ2V0QnJpZ2h0bmVzczogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vaHR0cDovL3d3dy53My5vcmcvVFIvQUVSVCNjb2xvci1jb250cmFzdFxuICAgICAgICB2YXIgcmdiID0gdGhpcy50b1JnYigpO1xuICAgICAgICByZXR1cm4gKHJnYi5yICogMjk5ICsgcmdiLmcgKiA1ODcgKyByZ2IuYiAqIDExNCkgLyAxMDAwO1xuICAgIH0sXG4gICAgZ2V0THVtaW5hbmNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy9odHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICAgICAgIHZhciByZ2IgPSB0aGlzLnRvUmdiKCk7XG4gICAgICAgIHZhciBSc1JHQiwgR3NSR0IsIEJzUkdCLCBSLCBHLCBCO1xuICAgICAgICBSc1JHQiA9IHJnYi5yLzI1NTtcbiAgICAgICAgR3NSR0IgPSByZ2IuZy8yNTU7XG4gICAgICAgIEJzUkdCID0gcmdiLmIvMjU1O1xuXG4gICAgICAgIGlmIChSc1JHQiA8PSAwLjAzOTI4KSB7UiA9IFJzUkdCIC8gMTIuOTI7fSBlbHNlIHtSID0gTWF0aC5wb3coKChSc1JHQiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KTt9XG4gICAgICAgIGlmIChHc1JHQiA8PSAwLjAzOTI4KSB7RyA9IEdzUkdCIC8gMTIuOTI7fSBlbHNlIHtHID0gTWF0aC5wb3coKChHc1JHQiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KTt9XG4gICAgICAgIGlmIChCc1JHQiA8PSAwLjAzOTI4KSB7QiA9IEJzUkdCIC8gMTIuOTI7fSBlbHNlIHtCID0gTWF0aC5wb3coKChCc1JHQiArIDAuMDU1KSAvIDEuMDU1KSwgMi40KTt9XG4gICAgICAgIHJldHVybiAoMC4yMTI2ICogUikgKyAoMC43MTUyICogRykgKyAoMC4wNzIyICogQik7XG4gICAgfSxcbiAgICBzZXRBbHBoYTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdGhpcy5fYSA9IGJvdW5kQWxwaGEodmFsdWUpO1xuICAgICAgICB0aGlzLl9yb3VuZEEgPSBtYXRoUm91bmQoMTAwKnRoaXMuX2EpIC8gMTAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHRvSHN2OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhzdiA9IHJnYlRvSHN2KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IpO1xuICAgICAgICByZXR1cm4geyBoOiBoc3YuaCAqIDM2MCwgczogaHN2LnMsIHY6IGhzdi52LCBhOiB0aGlzLl9hIH07XG4gICAgfSxcbiAgICB0b0hzdlN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoc3YgPSByZ2JUb0hzdih0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICAgICAgdmFyIGggPSBtYXRoUm91bmQoaHN2LmggKiAzNjApLCBzID0gbWF0aFJvdW5kKGhzdi5zICogMTAwKSwgdiA9IG1hdGhSb3VuZChoc3YudiAqIDEwMCk7XG4gICAgICAgIHJldHVybiAodGhpcy5fYSA9PSAxKSA/XG4gICAgICAgICAgXCJoc3YoXCIgICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgdiArIFwiJSlcIiA6XG4gICAgICAgICAgXCJoc3ZhKFwiICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgdiArIFwiJSwgXCIrIHRoaXMuX3JvdW5kQSArIFwiKVwiO1xuICAgIH0sXG4gICAgdG9Ic2w6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaHNsID0gcmdiVG9Ic2wodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgICAgIHJldHVybiB7IGg6IGhzbC5oICogMzYwLCBzOiBoc2wucywgbDogaHNsLmwsIGE6IHRoaXMuX2EgfTtcbiAgICB9LFxuICAgIHRvSHNsU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhzbCA9IHJnYlRvSHNsKHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IpO1xuICAgICAgICB2YXIgaCA9IG1hdGhSb3VuZChoc2wuaCAqIDM2MCksIHMgPSBtYXRoUm91bmQoaHNsLnMgKiAxMDApLCBsID0gbWF0aFJvdW5kKGhzbC5sICogMTAwKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9hID09IDEpID9cbiAgICAgICAgICBcImhzbChcIiAgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyBsICsgXCIlKVwiIDpcbiAgICAgICAgICBcImhzbGEoXCIgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyBsICsgXCIlLCBcIisgdGhpcy5fcm91bmRBICsgXCIpXCI7XG4gICAgfSxcbiAgICB0b0hleDogZnVuY3Rpb24oYWxsb3czQ2hhcikge1xuICAgICAgICByZXR1cm4gcmdiVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgYWxsb3czQ2hhcik7XG4gICAgfSxcbiAgICB0b0hleFN0cmluZzogZnVuY3Rpb24oYWxsb3czQ2hhcikge1xuICAgICAgICByZXR1cm4gJyMnICsgdGhpcy50b0hleChhbGxvdzNDaGFyKTtcbiAgICB9LFxuICAgIHRvSGV4ODogZnVuY3Rpb24oYWxsb3c0Q2hhcikge1xuICAgICAgICByZXR1cm4gcmdiYVRvSGV4KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IsIHRoaXMuX2EsIGFsbG93NENoYXIpO1xuICAgIH0sXG4gICAgdG9IZXg4U3RyaW5nOiBmdW5jdGlvbihhbGxvdzRDaGFyKSB7XG4gICAgICAgIHJldHVybiAnIycgKyB0aGlzLnRvSGV4OChhbGxvdzRDaGFyKTtcbiAgICB9LFxuICAgIHRvUmdiOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHsgcjogbWF0aFJvdW5kKHRoaXMuX3IpLCBnOiBtYXRoUm91bmQodGhpcy5fZyksIGI6IG1hdGhSb3VuZCh0aGlzLl9iKSwgYTogdGhpcy5fYSB9O1xuICAgIH0sXG4gICAgdG9SZ2JTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2EgPT0gMSkgP1xuICAgICAgICAgIFwicmdiKFwiICArIG1hdGhSb3VuZCh0aGlzLl9yKSArIFwiLCBcIiArIG1hdGhSb3VuZCh0aGlzLl9nKSArIFwiLCBcIiArIG1hdGhSb3VuZCh0aGlzLl9iKSArIFwiKVwiIDpcbiAgICAgICAgICBcInJnYmEoXCIgKyBtYXRoUm91bmQodGhpcy5fcikgKyBcIiwgXCIgKyBtYXRoUm91bmQodGhpcy5fZykgKyBcIiwgXCIgKyBtYXRoUm91bmQodGhpcy5fYikgKyBcIiwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgICB9LFxuICAgIHRvUGVyY2VudGFnZVJnYjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX3IsIDI1NSkgKiAxMDApICsgXCIlXCIsIGc6IG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2csIDI1NSkgKiAxMDApICsgXCIlXCIsIGI6IG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2IsIDI1NSkgKiAxMDApICsgXCIlXCIsIGE6IHRoaXMuX2EgfTtcbiAgICB9LFxuICAgIHRvUGVyY2VudGFnZVJnYlN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fYSA9PSAxKSA/XG4gICAgICAgICAgXCJyZ2IoXCIgICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fciwgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fZywgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgbWF0aFJvdW5kKGJvdW5kMDEodGhpcy5fYiwgMjU1KSAqIDEwMCkgKyBcIiUpXCIgOlxuICAgICAgICAgIFwicmdiYShcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX3IsIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2csIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIG1hdGhSb3VuZChib3VuZDAxKHRoaXMuX2IsIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIHRoaXMuX3JvdW5kQSArIFwiKVwiO1xuICAgIH0sXG4gICAgdG9OYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2EgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoZXhOYW1lc1tyZ2JUb0hleCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iLCB0cnVlKV0gfHwgZmFsc2U7XG4gICAgfSxcbiAgICB0b0ZpbHRlcjogZnVuY3Rpb24oc2Vjb25kQ29sb3IpIHtcbiAgICAgICAgdmFyIGhleDhTdHJpbmcgPSAnIycgKyByZ2JhVG9BcmdiSGV4KHRoaXMuX3IsIHRoaXMuX2csIHRoaXMuX2IsIHRoaXMuX2EpO1xuICAgICAgICB2YXIgc2Vjb25kSGV4OFN0cmluZyA9IGhleDhTdHJpbmc7XG4gICAgICAgIHZhciBncmFkaWVudFR5cGUgPSB0aGlzLl9ncmFkaWVudFR5cGUgPyBcIkdyYWRpZW50VHlwZSA9IDEsIFwiIDogXCJcIjtcblxuICAgICAgICBpZiAoc2Vjb25kQ29sb3IpIHtcbiAgICAgICAgICAgIHZhciBzID0gdGlueWNvbG9yKHNlY29uZENvbG9yKTtcbiAgICAgICAgICAgIHNlY29uZEhleDhTdHJpbmcgPSAnIycgKyByZ2JhVG9BcmdiSGV4KHMuX3IsIHMuX2csIHMuX2IsIHMuX2EpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KFwiK2dyYWRpZW50VHlwZStcInN0YXJ0Q29sb3JzdHI9XCIraGV4OFN0cmluZytcIixlbmRDb2xvcnN0cj1cIitzZWNvbmRIZXg4U3RyaW5nK1wiKVwiO1xuICAgIH0sXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgZm9ybWF0U2V0ID0gISFmb3JtYXQ7XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLl9mb3JtYXQ7XG5cbiAgICAgICAgdmFyIGZvcm1hdHRlZFN0cmluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgaGFzQWxwaGEgPSB0aGlzLl9hIDwgMSAmJiB0aGlzLl9hID49IDA7XG4gICAgICAgIHZhciBuZWVkc0FscGhhRm9ybWF0ID0gIWZvcm1hdFNldCAmJiBoYXNBbHBoYSAmJiAoZm9ybWF0ID09PSBcImhleFwiIHx8IGZvcm1hdCA9PT0gXCJoZXg2XCIgfHwgZm9ybWF0ID09PSBcImhleDNcIiB8fCBmb3JtYXQgPT09IFwiaGV4NFwiIHx8IGZvcm1hdCA9PT0gXCJoZXg4XCIgfHwgZm9ybWF0ID09PSBcIm5hbWVcIik7XG5cbiAgICAgICAgaWYgKG5lZWRzQWxwaGFGb3JtYXQpIHtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgXCJ0cmFuc3BhcmVudFwiLCBhbGwgb3RoZXIgbm9uLWFscGhhIGZvcm1hdHNcbiAgICAgICAgICAgIC8vIHdpbGwgcmV0dXJuIHJnYmEgd2hlbiB0aGVyZSBpcyB0cmFuc3BhcmVuY3kuXG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSBcIm5hbWVcIiAmJiB0aGlzLl9hID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9OYW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b1JnYlN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwicmdiXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9SZ2JTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInByZ2JcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhleFwiIHx8IGZvcm1hdCA9PT0gXCJoZXg2XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXhTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhleDNcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleFN0cmluZyh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImhleDRcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleDhTdHJpbmcodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoZXg4XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXg4U3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJuYW1lXCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9OYW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJoc2xcIikge1xuICAgICAgICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hzbFN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiaHN2XCIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9Ic3ZTdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRTdHJpbmcgfHwgdGhpcy50b0hleFN0cmluZygpO1xuICAgIH0sXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGlueWNvbG9yKHRoaXMudG9TdHJpbmcoKSk7XG4gICAgfSxcblxuICAgIF9hcHBseU1vZGlmaWNhdGlvbjogZnVuY3Rpb24oZm4sIGFyZ3MpIHtcbiAgICAgICAgdmFyIGNvbG9yID0gZm4uYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MpKSk7XG4gICAgICAgIHRoaXMuX3IgPSBjb2xvci5fcjtcbiAgICAgICAgdGhpcy5fZyA9IGNvbG9yLl9nO1xuICAgICAgICB0aGlzLl9iID0gY29sb3IuX2I7XG4gICAgICAgIHRoaXMuc2V0QWxwaGEoY29sb3IuX2EpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGxpZ2h0ZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obGlnaHRlbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGJyaWdodGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGJyaWdodGVuLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZGFya2VuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGRhcmtlbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGRlc2F0dXJhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZGVzYXR1cmF0ZSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHNhdHVyYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHNhdHVyYXRlLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZ3JleXNjYWxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGdyZXlzY2FsZSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHNwaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oc3BpbiwgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgX2FwcGx5Q29tYmluYXRpb246IGZ1bmN0aW9uKGZuLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncykpKTtcbiAgICB9LFxuICAgIGFuYWxvZ291czogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKGFuYWxvZ291cywgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGNvbXBsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihjb21wbGVtZW50LCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbW9ub2Nocm9tYXRpYzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKG1vbm9jaHJvbWF0aWMsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBzcGxpdGNvbXBsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihzcGxpdGNvbXBsZW1lbnQsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICB0cmlhZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHRyaWFkLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgdGV0cmFkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odGV0cmFkLCBhcmd1bWVudHMpO1xuICAgIH1cbn07XG5cbi8vIElmIGlucHV0IGlzIGFuIG9iamVjdCwgZm9yY2UgMSBpbnRvIFwiMS4wXCIgdG8gaGFuZGxlIHJhdGlvcyBwcm9wZXJseVxuLy8gU3RyaW5nIGlucHV0IHJlcXVpcmVzIFwiMS4wXCIgYXMgaW5wdXQsIHNvIDEgd2lsbCBiZSB0cmVhdGVkIGFzIDFcbnRpbnljb2xvci5mcm9tUmF0aW8gPSBmdW5jdGlvbihjb2xvciwgb3B0cykge1xuICAgIGlmICh0eXBlb2YgY29sb3IgPT0gXCJvYmplY3RcIikge1xuICAgICAgICB2YXIgbmV3Q29sb3IgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBjb2xvcikge1xuICAgICAgICAgICAgaWYgKGNvbG9yLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbG9yW2ldID0gY29sb3JbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdDb2xvcltpXSA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3JbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2xvciA9IG5ld0NvbG9yO1xuICAgIH1cblxuICAgIHJldHVybiB0aW55Y29sb3IoY29sb3IsIG9wdHMpO1xufTtcblxuLy8gR2l2ZW4gYSBzdHJpbmcgb3Igb2JqZWN0LCBjb252ZXJ0IHRoYXQgaW5wdXQgdG8gUkdCXG4vLyBQb3NzaWJsZSBzdHJpbmcgaW5wdXRzOlxuLy9cbi8vICAgICBcInJlZFwiXG4vLyAgICAgXCIjZjAwXCIgb3IgXCJmMDBcIlxuLy8gICAgIFwiI2ZmMDAwMFwiIG9yIFwiZmYwMDAwXCJcbi8vICAgICBcIiNmZjAwMDAwMFwiIG9yIFwiZmYwMDAwMDBcIlxuLy8gICAgIFwicmdiIDI1NSAwIDBcIiBvciBcInJnYiAoMjU1LCAwLCAwKVwiXG4vLyAgICAgXCJyZ2IgMS4wIDAgMFwiIG9yIFwicmdiICgxLCAwLCAwKVwiXG4vLyAgICAgXCJyZ2JhICgyNTUsIDAsIDAsIDEpXCIgb3IgXCJyZ2JhIDI1NSwgMCwgMCwgMVwiXG4vLyAgICAgXCJyZ2JhICgxLjAsIDAsIDAsIDEpXCIgb3IgXCJyZ2JhIDEuMCwgMCwgMCwgMVwiXG4vLyAgICAgXCJoc2woMCwgMTAwJSwgNTAlKVwiIG9yIFwiaHNsIDAgMTAwJSA1MCVcIlxuLy8gICAgIFwiaHNsYSgwLCAxMDAlLCA1MCUsIDEpXCIgb3IgXCJoc2xhIDAgMTAwJSA1MCUsIDFcIlxuLy8gICAgIFwiaHN2KDAsIDEwMCUsIDEwMCUpXCIgb3IgXCJoc3YgMCAxMDAlIDEwMCVcIlxuLy9cbmZ1bmN0aW9uIGlucHV0VG9SR0IoY29sb3IpIHtcblxuICAgIHZhciByZ2IgPSB7IHI6IDAsIGc6IDAsIGI6IDAgfTtcbiAgICB2YXIgYSA9IDE7XG4gICAgdmFyIHMgPSBudWxsO1xuICAgIHZhciB2ID0gbnVsbDtcbiAgICB2YXIgbCA9IG51bGw7XG4gICAgdmFyIG9rID0gZmFsc2U7XG4gICAgdmFyIGZvcm1hdCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbG9yID0gc3RyaW5nSW5wdXRUb09iamVjdChjb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChpc1ZhbGlkQ1NTVW5pdChjb2xvci5yKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5nKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5iKSkge1xuICAgICAgICAgICAgcmdiID0gcmdiVG9SZ2IoY29sb3IuciwgY29sb3IuZywgY29sb3IuYik7XG4gICAgICAgICAgICBvayA9IHRydWU7XG4gICAgICAgICAgICBmb3JtYXQgPSBTdHJpbmcoY29sb3Iucikuc3Vic3RyKC0xKSA9PT0gXCIlXCIgPyBcInByZ2JcIiA6IFwicmdiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IuaCkgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IucykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IudikpIHtcbiAgICAgICAgICAgIHMgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLnMpO1xuICAgICAgICAgICAgdiA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3Iudik7XG4gICAgICAgICAgICByZ2IgPSBoc3ZUb1JnYihjb2xvci5oLCBzLCB2KTtcbiAgICAgICAgICAgIG9rID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcm1hdCA9IFwiaHN2XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IuaCkgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IucykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IubCkpIHtcbiAgICAgICAgICAgIHMgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLnMpO1xuICAgICAgICAgICAgbCA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3IubCk7XG4gICAgICAgICAgICByZ2IgPSBoc2xUb1JnYihjb2xvci5oLCBzLCBsKTtcbiAgICAgICAgICAgIG9rID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcm1hdCA9IFwiaHNsXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3IuaGFzT3duUHJvcGVydHkoXCJhXCIpKSB7XG4gICAgICAgICAgICBhID0gY29sb3IuYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGEgPSBib3VuZEFscGhhKGEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgb2s6IG9rLFxuICAgICAgICBmb3JtYXQ6IGNvbG9yLmZvcm1hdCB8fCBmb3JtYXQsXG4gICAgICAgIHI6IG1hdGhNaW4oMjU1LCBtYXRoTWF4KHJnYi5yLCAwKSksXG4gICAgICAgIGc6IG1hdGhNaW4oMjU1LCBtYXRoTWF4KHJnYi5nLCAwKSksXG4gICAgICAgIGI6IG1hdGhNaW4oMjU1LCBtYXRoTWF4KHJnYi5iLCAwKSksXG4gICAgICAgIGE6IGFcbiAgICB9O1xufVxuXG5cbi8vIENvbnZlcnNpb24gRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBgcmdiVG9Ic2xgLCBgcmdiVG9Ic3ZgLCBgaHNsVG9SZ2JgLCBgaHN2VG9SZ2JgIG1vZGlmaWVkIGZyb206XG4vLyA8aHR0cDovL21qaWphY2tzb24uY29tLzIwMDgvMDIvcmdiLXRvLWhzbC1hbmQtcmdiLXRvLWhzdi1jb2xvci1tb2RlbC1jb252ZXJzaW9uLWFsZ29yaXRobXMtaW4tamF2YXNjcmlwdD5cblxuLy8gYHJnYlRvUmdiYFxuLy8gSGFuZGxlIGJvdW5kcyAvIHBlcmNlbnRhZ2UgY2hlY2tpbmcgdG8gY29uZm9ybSB0byBDU1MgY29sb3Igc3BlY1xuLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvPlxuLy8gKkFzc3VtZXM6KiByLCBnLCBiIGluIFswLCAyNTVdIG9yIFswLCAxXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiBbMCwgMjU1XVxuZnVuY3Rpb24gcmdiVG9SZ2IociwgZywgYil7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcjogYm91bmQwMShyLCAyNTUpICogMjU1LFxuICAgICAgICBnOiBib3VuZDAxKGcsIDI1NSkgKiAyNTUsXG4gICAgICAgIGI6IGJvdW5kMDEoYiwgMjU1KSAqIDI1NVxuICAgIH07XG59XG5cbi8vIGByZ2JUb0hzbGBcbi8vIENvbnZlcnRzIGFuIFJHQiBjb2xvciB2YWx1ZSB0byBIU0wuXG4vLyAqQXNzdW1lczoqIHIsIGcsIGFuZCBiIGFyZSBjb250YWluZWQgaW4gWzAsIDI1NV0gb3IgWzAsIDFdXG4vLyAqUmV0dXJuczoqIHsgaCwgcywgbCB9IGluIFswLDFdXG5mdW5jdGlvbiByZ2JUb0hzbChyLCBnLCBiKSB7XG5cbiAgICByID0gYm91bmQwMShyLCAyNTUpO1xuICAgIGcgPSBib3VuZDAxKGcsIDI1NSk7XG4gICAgYiA9IGJvdW5kMDEoYiwgMjU1KTtcblxuICAgIHZhciBtYXggPSBtYXRoTWF4KHIsIGcsIGIpLCBtaW4gPSBtYXRoTWluKHIsIGcsIGIpO1xuICAgIHZhciBoLCBzLCBsID0gKG1heCArIG1pbikgLyAyO1xuXG4gICAgaWYobWF4ID09IG1pbikge1xuICAgICAgICBoID0gcyA9IDA7IC8vIGFjaHJvbWF0aWNcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBkID0gbWF4IC0gbWluO1xuICAgICAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgICAgIHN3aXRjaChtYXgpIHtcbiAgICAgICAgICAgIGNhc2UgcjogaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgZzogaCA9IChiIC0gcikgLyBkICsgMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGI6IGggPSAociAtIGcpIC8gZCArIDQ7IGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaCAvPSA2O1xuICAgIH1cblxuICAgIHJldHVybiB7IGg6IGgsIHM6IHMsIGw6IGwgfTtcbn1cblxuLy8gYGhzbFRvUmdiYFxuLy8gQ29udmVydHMgYW4gSFNMIGNvbG9yIHZhbHVlIHRvIFJHQi5cbi8vICpBc3N1bWVzOiogaCBpcyBjb250YWluZWQgaW4gWzAsIDFdIG9yIFswLCAzNjBdIGFuZCBzIGFuZCBsIGFyZSBjb250YWluZWQgWzAsIDFdIG9yIFswLCAxMDBdXG4vLyAqUmV0dXJuczoqIHsgciwgZywgYiB9IGluIHRoZSBzZXQgWzAsIDI1NV1cbmZ1bmN0aW9uIGhzbFRvUmdiKGgsIHMsIGwpIHtcbiAgICB2YXIgciwgZywgYjtcblxuICAgIGggPSBib3VuZDAxKGgsIDM2MCk7XG4gICAgcyA9IGJvdW5kMDEocywgMTAwKTtcbiAgICBsID0gYm91bmQwMShsLCAxMDApO1xuXG4gICAgZnVuY3Rpb24gaHVlMnJnYihwLCBxLCB0KSB7XG4gICAgICAgIGlmKHQgPCAwKSB0ICs9IDE7XG4gICAgICAgIGlmKHQgPiAxKSB0IC09IDE7XG4gICAgICAgIGlmKHQgPCAxLzYpIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiB0O1xuICAgICAgICBpZih0IDwgMS8yKSByZXR1cm4gcTtcbiAgICAgICAgaWYodCA8IDIvMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIvMyAtIHQpICogNjtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuXG4gICAgaWYocyA9PT0gMCkge1xuICAgICAgICByID0gZyA9IGIgPSBsOyAvLyBhY2hyb21hdGljXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcSA9IGwgPCAwLjUgPyBsICogKDEgKyBzKSA6IGwgKyBzIC0gbCAqIHM7XG4gICAgICAgIHZhciBwID0gMiAqIGwgLSBxO1xuICAgICAgICByID0gaHVlMnJnYihwLCBxLCBoICsgMS8zKTtcbiAgICAgICAgZyA9IGh1ZTJyZ2IocCwgcSwgaCk7XG4gICAgICAgIGIgPSBodWUycmdiKHAsIHEsIGggLSAxLzMpO1xuICAgIH1cblxuICAgIHJldHVybiB7IHI6IHIgKiAyNTUsIGc6IGcgKiAyNTUsIGI6IGIgKiAyNTUgfTtcbn1cblxuLy8gYHJnYlRvSHN2YFxuLy8gQ29udmVydHMgYW4gUkdCIGNvbG9yIHZhbHVlIHRvIEhTVlxuLy8gKkFzc3VtZXM6KiByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gb3IgWzAsIDFdXG4vLyAqUmV0dXJuczoqIHsgaCwgcywgdiB9IGluIFswLDFdXG5mdW5jdGlvbiByZ2JUb0hzdihyLCBnLCBiKSB7XG5cbiAgICByID0gYm91bmQwMShyLCAyNTUpO1xuICAgIGcgPSBib3VuZDAxKGcsIDI1NSk7XG4gICAgYiA9IGJvdW5kMDEoYiwgMjU1KTtcblxuICAgIHZhciBtYXggPSBtYXRoTWF4KHIsIGcsIGIpLCBtaW4gPSBtYXRoTWluKHIsIGcsIGIpO1xuICAgIHZhciBoLCBzLCB2ID0gbWF4O1xuXG4gICAgdmFyIGQgPSBtYXggLSBtaW47XG4gICAgcyA9IG1heCA9PT0gMCA/IDAgOiBkIC8gbWF4O1xuXG4gICAgaWYobWF4ID09IG1pbikge1xuICAgICAgICBoID0gMDsgLy8gYWNocm9tYXRpY1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3dpdGNoKG1heCkge1xuICAgICAgICAgICAgY2FzZSByOiBoID0gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCk7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBnOiBoID0gKGIgLSByKSAvIGQgKyAyOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYjogaCA9IChyIC0gZykgLyBkICsgNDsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaCAvPSA2O1xuICAgIH1cbiAgICByZXR1cm4geyBoOiBoLCBzOiBzLCB2OiB2IH07XG59XG5cbi8vIGBoc3ZUb1JnYmBcbi8vIENvbnZlcnRzIGFuIEhTViBjb2xvciB2YWx1ZSB0byBSR0IuXG4vLyAqQXNzdW1lczoqIGggaXMgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMzYwXSBhbmQgcyBhbmQgdiBhcmUgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMTAwXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiB0aGUgc2V0IFswLCAyNTVdXG4gZnVuY3Rpb24gaHN2VG9SZ2IoaCwgcywgdikge1xuXG4gICAgaCA9IGJvdW5kMDEoaCwgMzYwKSAqIDY7XG4gICAgcyA9IGJvdW5kMDEocywgMTAwKTtcbiAgICB2ID0gYm91bmQwMSh2LCAxMDApO1xuXG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKGgpLFxuICAgICAgICBmID0gaCAtIGksXG4gICAgICAgIHAgPSB2ICogKDEgLSBzKSxcbiAgICAgICAgcSA9IHYgKiAoMSAtIGYgKiBzKSxcbiAgICAgICAgdCA9IHYgKiAoMSAtICgxIC0gZikgKiBzKSxcbiAgICAgICAgbW9kID0gaSAlIDYsXG4gICAgICAgIHIgPSBbdiwgcSwgcCwgcCwgdCwgdl1bbW9kXSxcbiAgICAgICAgZyA9IFt0LCB2LCB2LCBxLCBwLCBwXVttb2RdLFxuICAgICAgICBiID0gW3AsIHAsIHQsIHYsIHYsIHFdW21vZF07XG5cbiAgICByZXR1cm4geyByOiByICogMjU1LCBnOiBnICogMjU1LCBiOiBiICogMjU1IH07XG59XG5cbi8vIGByZ2JUb0hleGBcbi8vIENvbnZlcnRzIGFuIFJHQiBjb2xvciB0byBoZXhcbi8vIEFzc3VtZXMgciwgZywgYW5kIGIgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAyNTVdXG4vLyBSZXR1cm5zIGEgMyBvciA2IGNoYXJhY3RlciBoZXhcbmZ1bmN0aW9uIHJnYlRvSGV4KHIsIGcsIGIsIGFsbG93M0NoYXIpIHtcblxuICAgIHZhciBoZXggPSBbXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKHIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGcpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGIpLnRvU3RyaW5nKDE2KSlcbiAgICBdO1xuXG4gICAgLy8gUmV0dXJuIGEgMyBjaGFyYWN0ZXIgaGV4IGlmIHBvc3NpYmxlXG4gICAgaWYgKGFsbG93M0NoYXIgJiYgaGV4WzBdLmNoYXJBdCgwKSA9PSBoZXhbMF0uY2hhckF0KDEpICYmIGhleFsxXS5jaGFyQXQoMCkgPT0gaGV4WzFdLmNoYXJBdCgxKSAmJiBoZXhbMl0uY2hhckF0KDApID09IGhleFsyXS5jaGFyQXQoMSkpIHtcbiAgICAgICAgcmV0dXJuIGhleFswXS5jaGFyQXQoMCkgKyBoZXhbMV0uY2hhckF0KDApICsgaGV4WzJdLmNoYXJBdCgwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGV4LmpvaW4oXCJcIik7XG59XG5cbi8vIGByZ2JhVG9IZXhgXG4vLyBDb252ZXJ0cyBhbiBSR0JBIGNvbG9yIHBsdXMgYWxwaGEgdHJhbnNwYXJlbmN5IHRvIGhleFxuLy8gQXNzdW1lcyByLCBnLCBiIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMjU1XSBhbmRcbi8vIGEgaW4gWzAsIDFdLiBSZXR1cm5zIGEgNCBvciA4IGNoYXJhY3RlciByZ2JhIGhleFxuZnVuY3Rpb24gcmdiYVRvSGV4KHIsIGcsIGIsIGEsIGFsbG93NENoYXIpIHtcblxuICAgIHZhciBoZXggPSBbXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKHIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGcpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIoY29udmVydERlY2ltYWxUb0hleChhKSlcbiAgICBdO1xuXG4gICAgLy8gUmV0dXJuIGEgNCBjaGFyYWN0ZXIgaGV4IGlmIHBvc3NpYmxlXG4gICAgaWYgKGFsbG93NENoYXIgJiYgaGV4WzBdLmNoYXJBdCgwKSA9PSBoZXhbMF0uY2hhckF0KDEpICYmIGhleFsxXS5jaGFyQXQoMCkgPT0gaGV4WzFdLmNoYXJBdCgxKSAmJiBoZXhbMl0uY2hhckF0KDApID09IGhleFsyXS5jaGFyQXQoMSkgJiYgaGV4WzNdLmNoYXJBdCgwKSA9PSBoZXhbM10uY2hhckF0KDEpKSB7XG4gICAgICAgIHJldHVybiBoZXhbMF0uY2hhckF0KDApICsgaGV4WzFdLmNoYXJBdCgwKSArIGhleFsyXS5jaGFyQXQoMCkgKyBoZXhbM10uY2hhckF0KDApO1xuICAgIH1cblxuICAgIHJldHVybiBoZXguam9pbihcIlwiKTtcbn1cblxuLy8gYHJnYmFUb0FyZ2JIZXhgXG4vLyBDb252ZXJ0cyBhbiBSR0JBIGNvbG9yIHRvIGFuIEFSR0IgSGV4OCBzdHJpbmdcbi8vIFJhcmVseSB1c2VkLCBidXQgcmVxdWlyZWQgZm9yIFwidG9GaWx0ZXIoKVwiXG5mdW5jdGlvbiByZ2JhVG9BcmdiSGV4KHIsIGcsIGIsIGEpIHtcblxuICAgIHZhciBoZXggPSBbXG4gICAgICAgIHBhZDIoY29udmVydERlY2ltYWxUb0hleChhKSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKHIpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGcpLnRvU3RyaW5nKDE2KSksXG4gICAgICAgIHBhZDIobWF0aFJvdW5kKGIpLnRvU3RyaW5nKDE2KSlcbiAgICBdO1xuXG4gICAgcmV0dXJuIGhleC5qb2luKFwiXCIpO1xufVxuXG4vLyBgZXF1YWxzYFxuLy8gQ2FuIGJlIGNhbGxlZCB3aXRoIGFueSB0aW55Y29sb3IgaW5wdXRcbnRpbnljb2xvci5lcXVhbHMgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIpIHtcbiAgICBpZiAoIWNvbG9yMSB8fCAhY29sb3IyKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiB0aW55Y29sb3IoY29sb3IxKS50b1JnYlN0cmluZygpID09IHRpbnljb2xvcihjb2xvcjIpLnRvUmdiU3RyaW5nKCk7XG59O1xuXG50aW55Y29sb3IucmFuZG9tID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpbnljb2xvci5mcm9tUmF0aW8oe1xuICAgICAgICByOiBtYXRoUmFuZG9tKCksXG4gICAgICAgIGc6IG1hdGhSYW5kb20oKSxcbiAgICAgICAgYjogbWF0aFJhbmRvbSgpXG4gICAgfSk7XG59O1xuXG5cbi8vIE1vZGlmaWNhdGlvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoYW5rcyB0byBsZXNzLmpzIGZvciBzb21lIG9mIHRoZSBiYXNpY3MgaGVyZVxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9jbG91ZGhlYWQvbGVzcy5qcy9ibG9iL21hc3Rlci9saWIvbGVzcy9mdW5jdGlvbnMuanM+XG5cbmZ1bmN0aW9uIGRlc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLnMgLT0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5zID0gY2xhbXAwMShoc2wucyk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG5mdW5jdGlvbiBzYXR1cmF0ZShjb2xvciwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCAxMCk7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICBoc2wucyArPSBhbW91bnQgLyAxMDA7XG4gICAgaHNsLnMgPSBjbGFtcDAxKGhzbC5zKTtcbiAgICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5cbmZ1bmN0aW9uIGdyZXlzY2FsZShjb2xvcikge1xuICAgIHJldHVybiB0aW55Y29sb3IoY29sb3IpLmRlc2F0dXJhdGUoMTAwKTtcbn1cblxuZnVuY3Rpb24gbGlnaHRlbiAoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLmwgKz0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5sID0gY2xhbXAwMShoc2wubCk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG5mdW5jdGlvbiBicmlnaHRlbihjb2xvciwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCAxMCk7XG4gICAgdmFyIHJnYiA9IHRpbnljb2xvcihjb2xvcikudG9SZ2IoKTtcbiAgICByZ2IuciA9IG1hdGhNYXgoMCwgbWF0aE1pbigyNTUsIHJnYi5yIC0gbWF0aFJvdW5kKDI1NSAqIC0gKGFtb3VudCAvIDEwMCkpKSk7XG4gICAgcmdiLmcgPSBtYXRoTWF4KDAsIG1hdGhNaW4oMjU1LCByZ2IuZyAtIG1hdGhSb3VuZCgyNTUgKiAtIChhbW91bnQgLyAxMDApKSkpO1xuICAgIHJnYi5iID0gbWF0aE1heCgwLCBtYXRoTWluKDI1NSwgcmdiLmIgLSBtYXRoUm91bmQoMjU1ICogLSAoYW1vdW50IC8gMTAwKSkpKTtcbiAgICByZXR1cm4gdGlueWNvbG9yKHJnYik7XG59XG5cbmZ1bmN0aW9uIGRhcmtlbiAoY29sb3IsIGFtb3VudCkge1xuICAgIGFtb3VudCA9IChhbW91bnQgPT09IDApID8gMCA6IChhbW91bnQgfHwgMTApO1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgaHNsLmwgLT0gYW1vdW50IC8gMTAwO1xuICAgIGhzbC5sID0gY2xhbXAwMShoc2wubCk7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG4vLyBTcGluIHRha2VzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgYW1vdW50IHdpdGhpbiBbLTM2MCwgMzYwXSBpbmRpY2F0aW5nIHRoZSBjaGFuZ2Ugb2YgaHVlLlxuLy8gVmFsdWVzIG91dHNpZGUgb2YgdGhpcyByYW5nZSB3aWxsIGJlIHdyYXBwZWQgaW50byB0aGlzIHJhbmdlLlxuZnVuY3Rpb24gc3Bpbihjb2xvciwgYW1vdW50KSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICB2YXIgaHVlID0gKGhzbC5oICsgYW1vdW50KSAlIDM2MDtcbiAgICBoc2wuaCA9IGh1ZSA8IDAgPyAzNjAgKyBodWUgOiBodWU7XG4gICAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG4vLyBDb21iaW5hdGlvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhhbmtzIHRvIGpRdWVyeSB4Q29sb3IgZm9yIHNvbWUgb2YgdGhlIGlkZWFzIGJlaGluZCB0aGVzZVxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9pbmZ1c2lvbi9qUXVlcnkteGNvbG9yL2Jsb2IvbWFzdGVyL2pxdWVyeS54Y29sb3IuanM+XG5cbmZ1bmN0aW9uIGNvbXBsZW1lbnQoY29sb3IpIHtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIGhzbC5oID0gKGhzbC5oICsgMTgwKSAlIDM2MDtcbiAgICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5cbmZ1bmN0aW9uIHRyaWFkKGNvbG9yKSB7XG4gICAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgICB2YXIgaCA9IGhzbC5oO1xuICAgIHJldHVybiBbXG4gICAgICAgIHRpbnljb2xvcihjb2xvciksXG4gICAgICAgIHRpbnljb2xvcih7IGg6IChoICsgMTIwKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sIH0pLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDI0MCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KVxuICAgIF07XG59XG5cbmZ1bmN0aW9uIHRldHJhZChjb2xvcikge1xuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIGggPSBoc2wuaDtcbiAgICByZXR1cm4gW1xuICAgICAgICB0aW55Y29sb3IoY29sb3IpLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDkwKSAlIDM2MCwgczogaHNsLnMsIGw6IGhzbC5sIH0pLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDE4MCkgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubCB9KSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyAyNzApICUgMzYwLCBzOiBoc2wucywgbDogaHNsLmwgfSlcbiAgICBdO1xufVxuXG5mdW5jdGlvbiBzcGxpdGNvbXBsZW1lbnQoY29sb3IpIHtcbiAgICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICAgIHZhciBoID0gaHNsLmg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdGlueWNvbG9yKGNvbG9yKSxcbiAgICAgICAgdGlueWNvbG9yKHsgaDogKGggKyA3MikgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubH0pLFxuICAgICAgICB0aW55Y29sb3IoeyBoOiAoaCArIDIxNikgJSAzNjAsIHM6IGhzbC5zLCBsOiBoc2wubH0pXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gYW5hbG9nb3VzKGNvbG9yLCByZXN1bHRzLCBzbGljZXMpIHtcbiAgICByZXN1bHRzID0gcmVzdWx0cyB8fCA2O1xuICAgIHNsaWNlcyA9IHNsaWNlcyB8fCAzMDtcblxuICAgIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gICAgdmFyIHBhcnQgPSAzNjAgLyBzbGljZXM7XG4gICAgdmFyIHJldCA9IFt0aW55Y29sb3IoY29sb3IpXTtcblxuICAgIGZvciAoaHNsLmggPSAoKGhzbC5oIC0gKHBhcnQgKiByZXN1bHRzID4+IDEpKSArIDcyMCkgJSAzNjA7IC0tcmVzdWx0czsgKSB7XG4gICAgICAgIGhzbC5oID0gKGhzbC5oICsgcGFydCkgJSAzNjA7XG4gICAgICAgIHJldC5wdXNoKHRpbnljb2xvcihoc2wpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gbW9ub2Nocm9tYXRpYyhjb2xvciwgcmVzdWx0cykge1xuICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IDY7XG4gICAgdmFyIGhzdiA9IHRpbnljb2xvcihjb2xvcikudG9Ic3YoKTtcbiAgICB2YXIgaCA9IGhzdi5oLCBzID0gaHN2LnMsIHYgPSBoc3YudjtcbiAgICB2YXIgcmV0ID0gW107XG4gICAgdmFyIG1vZGlmaWNhdGlvbiA9IDEgLyByZXN1bHRzO1xuXG4gICAgd2hpbGUgKHJlc3VsdHMtLSkge1xuICAgICAgICByZXQucHVzaCh0aW55Y29sb3IoeyBoOiBoLCBzOiBzLCB2OiB2fSkpO1xuICAgICAgICB2ID0gKHYgKyBtb2RpZmljYXRpb24pICUgMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufVxuXG4vLyBVdGlsaXR5IEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnRpbnljb2xvci5taXggPSBmdW5jdGlvbihjb2xvcjEsIGNvbG9yMiwgYW1vdW50KSB7XG4gICAgYW1vdW50ID0gKGFtb3VudCA9PT0gMCkgPyAwIDogKGFtb3VudCB8fCA1MCk7XG5cbiAgICB2YXIgcmdiMSA9IHRpbnljb2xvcihjb2xvcjEpLnRvUmdiKCk7XG4gICAgdmFyIHJnYjIgPSB0aW55Y29sb3IoY29sb3IyKS50b1JnYigpO1xuXG4gICAgdmFyIHAgPSBhbW91bnQgLyAxMDA7XG5cbiAgICB2YXIgcmdiYSA9IHtcbiAgICAgICAgcjogKChyZ2IyLnIgLSByZ2IxLnIpICogcCkgKyByZ2IxLnIsXG4gICAgICAgIGc6ICgocmdiMi5nIC0gcmdiMS5nKSAqIHApICsgcmdiMS5nLFxuICAgICAgICBiOiAoKHJnYjIuYiAtIHJnYjEuYikgKiBwKSArIHJnYjEuYixcbiAgICAgICAgYTogKChyZ2IyLmEgLSByZ2IxLmEpICogcCkgKyByZ2IxLmFcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRpbnljb2xvcihyZ2JhKTtcbn07XG5cblxuLy8gUmVhZGFiaWxpdHkgRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI2NvbnRyYXN0LXJhdGlvZGVmIChXQ0FHIFZlcnNpb24gMilcblxuLy8gYGNvbnRyYXN0YFxuLy8gQW5hbHl6ZSB0aGUgMiBjb2xvcnMgYW5kIHJldHVybnMgdGhlIGNvbG9yIGNvbnRyYXN0IGRlZmluZWQgYnkgKFdDQUcgVmVyc2lvbiAyKVxudGlueWNvbG9yLnJlYWRhYmlsaXR5ID0gZnVuY3Rpb24oY29sb3IxLCBjb2xvcjIpIHtcbiAgICB2YXIgYzEgPSB0aW55Y29sb3IoY29sb3IxKTtcbiAgICB2YXIgYzIgPSB0aW55Y29sb3IoY29sb3IyKTtcbiAgICByZXR1cm4gKE1hdGgubWF4KGMxLmdldEx1bWluYW5jZSgpLGMyLmdldEx1bWluYW5jZSgpKSswLjA1KSAvIChNYXRoLm1pbihjMS5nZXRMdW1pbmFuY2UoKSxjMi5nZXRMdW1pbmFuY2UoKSkrMC4wNSk7XG59O1xuXG4vLyBgaXNSZWFkYWJsZWBcbi8vIEVuc3VyZSB0aGF0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3IgY29tYmluYXRpb25zIG1lZXQgV0NBRzIgZ3VpZGVsaW5lcy5cbi8vIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBPYmplY3QuXG4vLyAgICAgIHRoZSAnbGV2ZWwnIHByb3BlcnR5IHN0YXRlcyAnQUEnIG9yICdBQUEnIC0gaWYgbWlzc2luZyBvciBpbnZhbGlkLCBpdCBkZWZhdWx0cyB0byAnQUEnO1xuLy8gICAgICB0aGUgJ3NpemUnIHByb3BlcnR5IHN0YXRlcyAnbGFyZ2UnIG9yICdzbWFsbCcgLSBpZiBtaXNzaW5nIG9yIGludmFsaWQsIGl0IGRlZmF1bHRzIHRvICdzbWFsbCcuXG4vLyBJZiB0aGUgZW50aXJlIG9iamVjdCBpcyBhYnNlbnQsIGlzUmVhZGFibGUgZGVmYXVsdHMgdG8ge2xldmVsOlwiQUFcIixzaXplOlwic21hbGxcIn0uXG5cbi8vICpFeGFtcGxlKlxuLy8gICAgdGlueWNvbG9yLmlzUmVhZGFibGUoXCIjMDAwXCIsIFwiIzExMVwiKSA9PiBmYWxzZVxuLy8gICAgdGlueWNvbG9yLmlzUmVhZGFibGUoXCIjMDAwXCIsIFwiIzExMVwiLHtsZXZlbDpcIkFBXCIsc2l6ZTpcImxhcmdlXCJ9KSA9PiBmYWxzZVxudGlueWNvbG9yLmlzUmVhZGFibGUgPSBmdW5jdGlvbihjb2xvcjEsIGNvbG9yMiwgd2NhZzIpIHtcbiAgICB2YXIgcmVhZGFiaWxpdHkgPSB0aW55Y29sb3IucmVhZGFiaWxpdHkoY29sb3IxLCBjb2xvcjIpO1xuICAgIHZhciB3Y2FnMlBhcm1zLCBvdXQ7XG5cbiAgICBvdXQgPSBmYWxzZTtcblxuICAgIHdjYWcyUGFybXMgPSB2YWxpZGF0ZVdDQUcyUGFybXMod2NhZzIpO1xuICAgIHN3aXRjaCAod2NhZzJQYXJtcy5sZXZlbCArIHdjYWcyUGFybXMuc2l6ZSkge1xuICAgICAgICBjYXNlIFwiQUFzbWFsbFwiOlxuICAgICAgICBjYXNlIFwiQUFBbGFyZ2VcIjpcbiAgICAgICAgICAgIG91dCA9IHJlYWRhYmlsaXR5ID49IDQuNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQUFsYXJnZVwiOlxuICAgICAgICAgICAgb3V0ID0gcmVhZGFiaWxpdHkgPj0gMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQUFBc21hbGxcIjpcbiAgICAgICAgICAgIG91dCA9IHJlYWRhYmlsaXR5ID49IDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcblxufTtcblxuLy8gYG1vc3RSZWFkYWJsZWBcbi8vIEdpdmVuIGEgYmFzZSBjb2xvciBhbmQgYSBsaXN0IG9mIHBvc3NpYmxlIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZFxuLy8gY29sb3JzIGZvciB0aGF0IGJhc2UsIHJldHVybnMgdGhlIG1vc3QgcmVhZGFibGUgY29sb3IuXG4vLyBPcHRpb25hbGx5IHJldHVybnMgQmxhY2sgb3IgV2hpdGUgaWYgdGhlIG1vc3QgcmVhZGFibGUgY29sb3IgaXMgdW5yZWFkYWJsZS5cbi8vICpFeGFtcGxlKlxuLy8gICAgdGlueWNvbG9yLm1vc3RSZWFkYWJsZSh0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiIzEyM1wiLCBbXCIjMTI0XCIsIFwiIzEyNVwiXSx7aW5jbHVkZUZhbGxiYWNrQ29sb3JzOmZhbHNlfSkudG9IZXhTdHJpbmcoKTsgLy8gXCIjMTEyMjU1XCJcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUodGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiMxMjNcIiwgW1wiIzEyNFwiLCBcIiMxMjVcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczp0cnVlfSkudG9IZXhTdHJpbmcoKTsgIC8vIFwiI2ZmZmZmZlwiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiI2E4MDE1YVwiLCBbXCIjZmFmM2YzXCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZSxsZXZlbDpcIkFBQVwiLHNpemU6XCJsYXJnZVwifSkudG9IZXhTdHJpbmcoKTsgLy8gXCIjZmFmM2YzXCJcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUoXCIjYTgwMTVhXCIsIFtcIiNmYWYzZjNcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczp0cnVlLGxldmVsOlwiQUFBXCIsc2l6ZTpcInNtYWxsXCJ9KS50b0hleFN0cmluZygpOyAvLyBcIiNmZmZmZmZcIlxudGlueWNvbG9yLm1vc3RSZWFkYWJsZSA9IGZ1bmN0aW9uKGJhc2VDb2xvciwgY29sb3JMaXN0LCBhcmdzKSB7XG4gICAgdmFyIGJlc3RDb2xvciA9IG51bGw7XG4gICAgdmFyIGJlc3RTY29yZSA9IDA7XG4gICAgdmFyIHJlYWRhYmlsaXR5O1xuICAgIHZhciBpbmNsdWRlRmFsbGJhY2tDb2xvcnMsIGxldmVsLCBzaXplIDtcbiAgICBhcmdzID0gYXJncyB8fCB7fTtcbiAgICBpbmNsdWRlRmFsbGJhY2tDb2xvcnMgPSBhcmdzLmluY2x1ZGVGYWxsYmFja0NvbG9ycyA7XG4gICAgbGV2ZWwgPSBhcmdzLmxldmVsO1xuICAgIHNpemUgPSBhcmdzLnNpemU7XG5cbiAgICBmb3IgKHZhciBpPSAwOyBpIDwgY29sb3JMaXN0Lmxlbmd0aCA7IGkrKykge1xuICAgICAgICByZWFkYWJpbGl0eSA9IHRpbnljb2xvci5yZWFkYWJpbGl0eShiYXNlQ29sb3IsIGNvbG9yTGlzdFtpXSk7XG4gICAgICAgIGlmIChyZWFkYWJpbGl0eSA+IGJlc3RTY29yZSkge1xuICAgICAgICAgICAgYmVzdFNjb3JlID0gcmVhZGFiaWxpdHk7XG4gICAgICAgICAgICBiZXN0Q29sb3IgPSB0aW55Y29sb3IoY29sb3JMaXN0W2ldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aW55Y29sb3IuaXNSZWFkYWJsZShiYXNlQ29sb3IsIGJlc3RDb2xvciwge1wibGV2ZWxcIjpsZXZlbCxcInNpemVcIjpzaXplfSkgfHwgIWluY2x1ZGVGYWxsYmFja0NvbG9ycykge1xuICAgICAgICByZXR1cm4gYmVzdENvbG9yO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXJncy5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ZmFsc2U7XG4gICAgICAgIHJldHVybiB0aW55Y29sb3IubW9zdFJlYWRhYmxlKGJhc2VDb2xvcixbXCIjZmZmXCIsIFwiIzAwMFwiXSxhcmdzKTtcbiAgICB9XG59O1xuXG5cbi8vIEJpZyBMaXN0IG9mIENvbG9yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA8aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yPlxudmFyIG5hbWVzID0gdGlueWNvbG9yLm5hbWVzID0ge1xuICAgIGFsaWNlYmx1ZTogXCJmMGY4ZmZcIixcbiAgICBhbnRpcXVld2hpdGU6IFwiZmFlYmQ3XCIsXG4gICAgYXF1YTogXCIwZmZcIixcbiAgICBhcXVhbWFyaW5lOiBcIjdmZmZkNFwiLFxuICAgIGF6dXJlOiBcImYwZmZmZlwiLFxuICAgIGJlaWdlOiBcImY1ZjVkY1wiLFxuICAgIGJpc3F1ZTogXCJmZmU0YzRcIixcbiAgICBibGFjazogXCIwMDBcIixcbiAgICBibGFuY2hlZGFsbW9uZDogXCJmZmViY2RcIixcbiAgICBibHVlOiBcIjAwZlwiLFxuICAgIGJsdWV2aW9sZXQ6IFwiOGEyYmUyXCIsXG4gICAgYnJvd246IFwiYTUyYTJhXCIsXG4gICAgYnVybHl3b29kOiBcImRlYjg4N1wiLFxuICAgIGJ1cm50c2llbm5hOiBcImVhN2U1ZFwiLFxuICAgIGNhZGV0Ymx1ZTogXCI1ZjllYTBcIixcbiAgICBjaGFydHJldXNlOiBcIjdmZmYwMFwiLFxuICAgIGNob2NvbGF0ZTogXCJkMjY5MWVcIixcbiAgICBjb3JhbDogXCJmZjdmNTBcIixcbiAgICBjb3JuZmxvd2VyYmx1ZTogXCI2NDk1ZWRcIixcbiAgICBjb3Juc2lsazogXCJmZmY4ZGNcIixcbiAgICBjcmltc29uOiBcImRjMTQzY1wiLFxuICAgIGN5YW46IFwiMGZmXCIsXG4gICAgZGFya2JsdWU6IFwiMDAwMDhiXCIsXG4gICAgZGFya2N5YW46IFwiMDA4YjhiXCIsXG4gICAgZGFya2dvbGRlbnJvZDogXCJiODg2MGJcIixcbiAgICBkYXJrZ3JheTogXCJhOWE5YTlcIixcbiAgICBkYXJrZ3JlZW46IFwiMDA2NDAwXCIsXG4gICAgZGFya2dyZXk6IFwiYTlhOWE5XCIsXG4gICAgZGFya2toYWtpOiBcImJkYjc2YlwiLFxuICAgIGRhcmttYWdlbnRhOiBcIjhiMDA4YlwiLFxuICAgIGRhcmtvbGl2ZWdyZWVuOiBcIjU1NmIyZlwiLFxuICAgIGRhcmtvcmFuZ2U6IFwiZmY4YzAwXCIsXG4gICAgZGFya29yY2hpZDogXCI5OTMyY2NcIixcbiAgICBkYXJrcmVkOiBcIjhiMDAwMFwiLFxuICAgIGRhcmtzYWxtb246IFwiZTk5NjdhXCIsXG4gICAgZGFya3NlYWdyZWVuOiBcIjhmYmM4ZlwiLFxuICAgIGRhcmtzbGF0ZWJsdWU6IFwiNDgzZDhiXCIsXG4gICAgZGFya3NsYXRlZ3JheTogXCIyZjRmNGZcIixcbiAgICBkYXJrc2xhdGVncmV5OiBcIjJmNGY0ZlwiLFxuICAgIGRhcmt0dXJxdW9pc2U6IFwiMDBjZWQxXCIsXG4gICAgZGFya3Zpb2xldDogXCI5NDAwZDNcIixcbiAgICBkZWVwcGluazogXCJmZjE0OTNcIixcbiAgICBkZWVwc2t5Ymx1ZTogXCIwMGJmZmZcIixcbiAgICBkaW1ncmF5OiBcIjY5Njk2OVwiLFxuICAgIGRpbWdyZXk6IFwiNjk2OTY5XCIsXG4gICAgZG9kZ2VyYmx1ZTogXCIxZTkwZmZcIixcbiAgICBmaXJlYnJpY2s6IFwiYjIyMjIyXCIsXG4gICAgZmxvcmFsd2hpdGU6IFwiZmZmYWYwXCIsXG4gICAgZm9yZXN0Z3JlZW46IFwiMjI4YjIyXCIsXG4gICAgZnVjaHNpYTogXCJmMGZcIixcbiAgICBnYWluc2Jvcm86IFwiZGNkY2RjXCIsXG4gICAgZ2hvc3R3aGl0ZTogXCJmOGY4ZmZcIixcbiAgICBnb2xkOiBcImZmZDcwMFwiLFxuICAgIGdvbGRlbnJvZDogXCJkYWE1MjBcIixcbiAgICBncmF5OiBcIjgwODA4MFwiLFxuICAgIGdyZWVuOiBcIjAwODAwMFwiLFxuICAgIGdyZWVueWVsbG93OiBcImFkZmYyZlwiLFxuICAgIGdyZXk6IFwiODA4MDgwXCIsXG4gICAgaG9uZXlkZXc6IFwiZjBmZmYwXCIsXG4gICAgaG90cGluazogXCJmZjY5YjRcIixcbiAgICBpbmRpYW5yZWQ6IFwiY2Q1YzVjXCIsXG4gICAgaW5kaWdvOiBcIjRiMDA4MlwiLFxuICAgIGl2b3J5OiBcImZmZmZmMFwiLFxuICAgIGtoYWtpOiBcImYwZTY4Y1wiLFxuICAgIGxhdmVuZGVyOiBcImU2ZTZmYVwiLFxuICAgIGxhdmVuZGVyYmx1c2g6IFwiZmZmMGY1XCIsXG4gICAgbGF3bmdyZWVuOiBcIjdjZmMwMFwiLFxuICAgIGxlbW9uY2hpZmZvbjogXCJmZmZhY2RcIixcbiAgICBsaWdodGJsdWU6IFwiYWRkOGU2XCIsXG4gICAgbGlnaHRjb3JhbDogXCJmMDgwODBcIixcbiAgICBsaWdodGN5YW46IFwiZTBmZmZmXCIsXG4gICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiZmFmYWQyXCIsXG4gICAgbGlnaHRncmF5OiBcImQzZDNkM1wiLFxuICAgIGxpZ2h0Z3JlZW46IFwiOTBlZTkwXCIsXG4gICAgbGlnaHRncmV5OiBcImQzZDNkM1wiLFxuICAgIGxpZ2h0cGluazogXCJmZmI2YzFcIixcbiAgICBsaWdodHNhbG1vbjogXCJmZmEwN2FcIixcbiAgICBsaWdodHNlYWdyZWVuOiBcIjIwYjJhYVwiLFxuICAgIGxpZ2h0c2t5Ymx1ZTogXCI4N2NlZmFcIixcbiAgICBsaWdodHNsYXRlZ3JheTogXCI3ODlcIixcbiAgICBsaWdodHNsYXRlZ3JleTogXCI3ODlcIixcbiAgICBsaWdodHN0ZWVsYmx1ZTogXCJiMGM0ZGVcIixcbiAgICBsaWdodHllbGxvdzogXCJmZmZmZTBcIixcbiAgICBsaW1lOiBcIjBmMFwiLFxuICAgIGxpbWVncmVlbjogXCIzMmNkMzJcIixcbiAgICBsaW5lbjogXCJmYWYwZTZcIixcbiAgICBtYWdlbnRhOiBcImYwZlwiLFxuICAgIG1hcm9vbjogXCI4MDAwMDBcIixcbiAgICBtZWRpdW1hcXVhbWFyaW5lOiBcIjY2Y2RhYVwiLFxuICAgIG1lZGl1bWJsdWU6IFwiMDAwMGNkXCIsXG4gICAgbWVkaXVtb3JjaGlkOiBcImJhNTVkM1wiLFxuICAgIG1lZGl1bXB1cnBsZTogXCI5MzcwZGJcIixcbiAgICBtZWRpdW1zZWFncmVlbjogXCIzY2IzNzFcIixcbiAgICBtZWRpdW1zbGF0ZWJsdWU6IFwiN2I2OGVlXCIsXG4gICAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiMDBmYTlhXCIsXG4gICAgbWVkaXVtdHVycXVvaXNlOiBcIjQ4ZDFjY1wiLFxuICAgIG1lZGl1bXZpb2xldHJlZDogXCJjNzE1ODVcIixcbiAgICBtaWRuaWdodGJsdWU6IFwiMTkxOTcwXCIsXG4gICAgbWludGNyZWFtOiBcImY1ZmZmYVwiLFxuICAgIG1pc3R5cm9zZTogXCJmZmU0ZTFcIixcbiAgICBtb2NjYXNpbjogXCJmZmU0YjVcIixcbiAgICBuYXZham93aGl0ZTogXCJmZmRlYWRcIixcbiAgICBuYXZ5OiBcIjAwMDA4MFwiLFxuICAgIG9sZGxhY2U6IFwiZmRmNWU2XCIsXG4gICAgb2xpdmU6IFwiODA4MDAwXCIsXG4gICAgb2xpdmVkcmFiOiBcIjZiOGUyM1wiLFxuICAgIG9yYW5nZTogXCJmZmE1MDBcIixcbiAgICBvcmFuZ2VyZWQ6IFwiZmY0NTAwXCIsXG4gICAgb3JjaGlkOiBcImRhNzBkNlwiLFxuICAgIHBhbGVnb2xkZW5yb2Q6IFwiZWVlOGFhXCIsXG4gICAgcGFsZWdyZWVuOiBcIjk4ZmI5OFwiLFxuICAgIHBhbGV0dXJxdW9pc2U6IFwiYWZlZWVlXCIsXG4gICAgcGFsZXZpb2xldHJlZDogXCJkYjcwOTNcIixcbiAgICBwYXBheWF3aGlwOiBcImZmZWZkNVwiLFxuICAgIHBlYWNocHVmZjogXCJmZmRhYjlcIixcbiAgICBwZXJ1OiBcImNkODUzZlwiLFxuICAgIHBpbms6IFwiZmZjMGNiXCIsXG4gICAgcGx1bTogXCJkZGEwZGRcIixcbiAgICBwb3dkZXJibHVlOiBcImIwZTBlNlwiLFxuICAgIHB1cnBsZTogXCI4MDAwODBcIixcbiAgICByZWJlY2NhcHVycGxlOiBcIjY2MzM5OVwiLFxuICAgIHJlZDogXCJmMDBcIixcbiAgICByb3N5YnJvd246IFwiYmM4ZjhmXCIsXG4gICAgcm95YWxibHVlOiBcIjQxNjllMVwiLFxuICAgIHNhZGRsZWJyb3duOiBcIjhiNDUxM1wiLFxuICAgIHNhbG1vbjogXCJmYTgwNzJcIixcbiAgICBzYW5keWJyb3duOiBcImY0YTQ2MFwiLFxuICAgIHNlYWdyZWVuOiBcIjJlOGI1N1wiLFxuICAgIHNlYXNoZWxsOiBcImZmZjVlZVwiLFxuICAgIHNpZW5uYTogXCJhMDUyMmRcIixcbiAgICBzaWx2ZXI6IFwiYzBjMGMwXCIsXG4gICAgc2t5Ymx1ZTogXCI4N2NlZWJcIixcbiAgICBzbGF0ZWJsdWU6IFwiNmE1YWNkXCIsXG4gICAgc2xhdGVncmF5OiBcIjcwODA5MFwiLFxuICAgIHNsYXRlZ3JleTogXCI3MDgwOTBcIixcbiAgICBzbm93OiBcImZmZmFmYVwiLFxuICAgIHNwcmluZ2dyZWVuOiBcIjAwZmY3ZlwiLFxuICAgIHN0ZWVsYmx1ZTogXCI0NjgyYjRcIixcbiAgICB0YW46IFwiZDJiNDhjXCIsXG4gICAgdGVhbDogXCIwMDgwODBcIixcbiAgICB0aGlzdGxlOiBcImQ4YmZkOFwiLFxuICAgIHRvbWF0bzogXCJmZjYzNDdcIixcbiAgICB0dXJxdW9pc2U6IFwiNDBlMGQwXCIsXG4gICAgdmlvbGV0OiBcImVlODJlZVwiLFxuICAgIHdoZWF0OiBcImY1ZGViM1wiLFxuICAgIHdoaXRlOiBcImZmZlwiLFxuICAgIHdoaXRlc21va2U6IFwiZjVmNWY1XCIsXG4gICAgeWVsbG93OiBcImZmMFwiLFxuICAgIHllbGxvd2dyZWVuOiBcIjlhY2QzMlwiXG59O1xuXG4vLyBNYWtlIGl0IGVhc3kgdG8gYWNjZXNzIGNvbG9ycyB2aWEgYGhleE5hbWVzW2hleF1gXG52YXIgaGV4TmFtZXMgPSB0aW55Y29sb3IuaGV4TmFtZXMgPSBmbGlwKG5hbWVzKTtcblxuXG4vLyBVdGlsaXRpZXNcbi8vIC0tLS0tLS0tLVxuXG4vLyBgeyAnbmFtZTEnOiAndmFsMScgfWAgYmVjb21lcyBgeyAndmFsMSc6ICduYW1lMScgfWBcbmZ1bmN0aW9uIGZsaXAobykge1xuICAgIHZhciBmbGlwcGVkID0geyB9O1xuICAgIGZvciAodmFyIGkgaW4gbykge1xuICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgZmxpcHBlZFtvW2ldXSA9IGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZsaXBwZWQ7XG59XG5cbi8vIFJldHVybiBhIHZhbGlkIGFscGhhIHZhbHVlIFswLDFdIHdpdGggYWxsIGludmFsaWQgdmFsdWVzIGJlaW5nIHNldCB0byAxXG5mdW5jdGlvbiBib3VuZEFscGhhKGEpIHtcbiAgICBhID0gcGFyc2VGbG9hdChhKTtcblxuICAgIGlmIChpc05hTihhKSB8fCBhIDwgMCB8fCBhID4gMSkge1xuICAgICAgICBhID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbn1cblxuLy8gVGFrZSBpbnB1dCBmcm9tIFswLCBuXSBhbmQgcmV0dXJuIGl0IGFzIFswLCAxXVxuZnVuY3Rpb24gYm91bmQwMShuLCBtYXgpIHtcbiAgICBpZiAoaXNPbmVQb2ludFplcm8obikpIHsgbiA9IFwiMTAwJVwiOyB9XG5cbiAgICB2YXIgcHJvY2Vzc1BlcmNlbnQgPSBpc1BlcmNlbnRhZ2Uobik7XG4gICAgbiA9IG1hdGhNaW4obWF4LCBtYXRoTWF4KDAsIHBhcnNlRmxvYXQobikpKTtcblxuICAgIC8vIEF1dG9tYXRpY2FsbHkgY29udmVydCBwZXJjZW50YWdlIGludG8gbnVtYmVyXG4gICAgaWYgKHByb2Nlc3NQZXJjZW50KSB7XG4gICAgICAgIG4gPSBwYXJzZUludChuICogbWF4LCAxMCkgLyAxMDA7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9yc1xuICAgIGlmICgoTWF0aC5hYnMobiAtIG1heCkgPCAwLjAwMDAwMSkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBpbnRvIFswLCAxXSByYW5nZSBpZiBpdCBpc24ndCBhbHJlYWR5XG4gICAgcmV0dXJuIChuICUgbWF4KSAvIHBhcnNlRmxvYXQobWF4KTtcbn1cblxuLy8gRm9yY2UgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG5mdW5jdGlvbiBjbGFtcDAxKHZhbCkge1xuICAgIHJldHVybiBtYXRoTWluKDEsIG1hdGhNYXgoMCwgdmFsKSk7XG59XG5cbi8vIFBhcnNlIGEgYmFzZS0xNiBoZXggdmFsdWUgaW50byBhIGJhc2UtMTAgaW50ZWdlclxuZnVuY3Rpb24gcGFyc2VJbnRGcm9tSGV4KHZhbCkge1xuICAgIHJldHVybiBwYXJzZUludCh2YWwsIDE2KTtcbn1cblxuLy8gTmVlZCB0byBoYW5kbGUgMS4wIGFzIDEwMCUsIHNpbmNlIG9uY2UgaXQgaXMgYSBudW1iZXIsIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBpdCBhbmQgMVxuLy8gPGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzQyMjA3Mi9qYXZhc2NyaXB0LWhvdy10by1kZXRlY3QtbnVtYmVyLWFzLWEtZGVjaW1hbC1pbmNsdWRpbmctMS0wPlxuZnVuY3Rpb24gaXNPbmVQb2ludFplcm8obikge1xuICAgIHJldHVybiB0eXBlb2YgbiA9PSBcInN0cmluZ1wiICYmIG4uaW5kZXhPZignLicpICE9IC0xICYmIHBhcnNlRmxvYXQobikgPT09IDE7XG59XG5cbi8vIENoZWNrIHRvIHNlZSBpZiBzdHJpbmcgcGFzc2VkIGluIGlzIGEgcGVyY2VudGFnZVxuZnVuY3Rpb24gaXNQZXJjZW50YWdlKG4pIHtcbiAgICByZXR1cm4gdHlwZW9mIG4gPT09IFwic3RyaW5nXCIgJiYgbi5pbmRleE9mKCclJykgIT0gLTE7XG59XG5cbi8vIEZvcmNlIGEgaGV4IHZhbHVlIHRvIGhhdmUgMiBjaGFyYWN0ZXJzXG5mdW5jdGlvbiBwYWQyKGMpIHtcbiAgICByZXR1cm4gYy5sZW5ndGggPT0gMSA/ICcwJyArIGMgOiAnJyArIGM7XG59XG5cbi8vIFJlcGxhY2UgYSBkZWNpbWFsIHdpdGggaXQncyBwZXJjZW50YWdlIHZhbHVlXG5mdW5jdGlvbiBjb252ZXJ0VG9QZXJjZW50YWdlKG4pIHtcbiAgICBpZiAobiA8PSAxKSB7XG4gICAgICAgIG4gPSAobiAqIDEwMCkgKyBcIiVcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gbjtcbn1cblxuLy8gQ29udmVydHMgYSBkZWNpbWFsIHRvIGEgaGV4IHZhbHVlXG5mdW5jdGlvbiBjb252ZXJ0RGVjaW1hbFRvSGV4KGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGQpICogMjU1KS50b1N0cmluZygxNik7XG59XG4vLyBDb252ZXJ0cyBhIGhleCB2YWx1ZSB0byBhIGRlY2ltYWxcbmZ1bmN0aW9uIGNvbnZlcnRIZXhUb0RlY2ltYWwoaCkge1xuICAgIHJldHVybiAocGFyc2VJbnRGcm9tSGV4KGgpIC8gMjU1KTtcbn1cblxudmFyIG1hdGNoZXJzID0gKGZ1bmN0aW9uKCkge1xuXG4gICAgLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNpbnRlZ2Vycz5cbiAgICB2YXIgQ1NTX0lOVEVHRVIgPSBcIlstXFxcXCtdP1xcXFxkKyU/XCI7XG5cbiAgICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy12YWx1ZXMvI251bWJlci12YWx1ZT5cbiAgICB2YXIgQ1NTX05VTUJFUiA9IFwiWy1cXFxcK10/XFxcXGQqXFxcXC5cXFxcZCslP1wiO1xuXG4gICAgLy8gQWxsb3cgcG9zaXRpdmUvbmVnYXRpdmUgaW50ZWdlci9udW1iZXIuICBEb24ndCBjYXB0dXJlIHRoZSBlaXRoZXIvb3IsIGp1c3QgdGhlIGVudGlyZSBvdXRjb21lLlxuICAgIHZhciBDU1NfVU5JVCA9IFwiKD86XCIgKyBDU1NfTlVNQkVSICsgXCIpfCg/OlwiICsgQ1NTX0lOVEVHRVIgKyBcIilcIjtcblxuICAgIC8vIEFjdHVhbCBtYXRjaGluZy5cbiAgICAvLyBQYXJlbnRoZXNlcyBhbmQgY29tbWFzIGFyZSBvcHRpb25hbCwgYnV0IG5vdCByZXF1aXJlZC5cbiAgICAvLyBXaGl0ZXNwYWNlIGNhbiB0YWtlIHRoZSBwbGFjZSBvZiBjb21tYXMgb3Igb3BlbmluZyBwYXJlblxuICAgIHZhciBQRVJNSVNTSVZFX01BVENIMyA9IFwiW1xcXFxzfFxcXFwoXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVxcXFxzKlxcXFwpP1wiO1xuICAgIHZhciBQRVJNSVNTSVZFX01BVENINCA9IFwiW1xcXFxzfFxcXFwoXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVxcXFxzKlxcXFwpP1wiO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgQ1NTX1VOSVQ6IG5ldyBSZWdFeHAoQ1NTX1VOSVQpLFxuICAgICAgICByZ2I6IG5ldyBSZWdFeHAoXCJyZ2JcIiArIFBFUk1JU1NJVkVfTUFUQ0gzKSxcbiAgICAgICAgcmdiYTogbmV3IFJlZ0V4cChcInJnYmFcIiArIFBFUk1JU1NJVkVfTUFUQ0g0KSxcbiAgICAgICAgaHNsOiBuZXcgUmVnRXhwKFwiaHNsXCIgKyBQRVJNSVNTSVZFX01BVENIMyksXG4gICAgICAgIGhzbGE6IG5ldyBSZWdFeHAoXCJoc2xhXCIgKyBQRVJNSVNTSVZFX01BVENINCksXG4gICAgICAgIGhzdjogbmV3IFJlZ0V4cChcImhzdlwiICsgUEVSTUlTU0lWRV9NQVRDSDMpLFxuICAgICAgICBoc3ZhOiBuZXcgUmVnRXhwKFwiaHN2YVwiICsgUEVSTUlTU0lWRV9NQVRDSDQpLFxuICAgICAgICBoZXgzOiAvXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8sXG4gICAgICAgIGhleDY6IC9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxcbiAgICAgICAgaGV4NDogL14jPyhbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxcbiAgICAgICAgaGV4ODogL14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL1xuICAgIH07XG59KSgpO1xuXG4vLyBgaXNWYWxpZENTU1VuaXRgXG4vLyBUYWtlIGluIGEgc2luZ2xlIHN0cmluZyAvIG51bWJlciBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0IGxvb2tzIGxpa2UgYSBDU1MgdW5pdFxuLy8gKHNlZSBgbWF0Y2hlcnNgIGFib3ZlIGZvciBkZWZpbml0aW9uKS5cbmZ1bmN0aW9uIGlzVmFsaWRDU1NVbml0KGNvbG9yKSB7XG4gICAgcmV0dXJuICEhbWF0Y2hlcnMuQ1NTX1VOSVQuZXhlYyhjb2xvcik7XG59XG5cbi8vIGBzdHJpbmdJbnB1dFRvT2JqZWN0YFxuLy8gUGVybWlzc2l2ZSBzdHJpbmcgcGFyc2luZy4gIFRha2UgaW4gYSBudW1iZXIgb2YgZm9ybWF0cywgYW5kIG91dHB1dCBhbiBvYmplY3Rcbi8vIGJhc2VkIG9uIGRldGVjdGVkIGZvcm1hdC4gIFJldHVybnMgYHsgciwgZywgYiB9YCBvciBgeyBoLCBzLCBsIH1gIG9yIGB7IGgsIHMsIHZ9YFxuZnVuY3Rpb24gc3RyaW5nSW5wdXRUb09iamVjdChjb2xvcikge1xuXG4gICAgY29sb3IgPSBjb2xvci5yZXBsYWNlKHRyaW1MZWZ0LCcnKS5yZXBsYWNlKHRyaW1SaWdodCwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIG5hbWVkID0gZmFsc2U7XG4gICAgaWYgKG5hbWVzW2NvbG9yXSkge1xuICAgICAgICBjb2xvciA9IG5hbWVzW2NvbG9yXTtcbiAgICAgICAgbmFtZWQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb2xvciA9PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgICAgIHJldHVybiB7IHI6IDAsIGc6IDAsIGI6IDAsIGE6IDAsIGZvcm1hdDogXCJuYW1lXCIgfTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gbWF0Y2ggc3RyaW5nIGlucHV0IHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gICAgLy8gS2VlcCBtb3N0IG9mIHRoZSBudW1iZXIgYm91bmRpbmcgb3V0IG9mIHRoaXMgZnVuY3Rpb24gLSBkb24ndCB3b3JyeSBhYm91dCBbMCwxXSBvciBbMCwxMDBdIG9yIFswLDM2MF1cbiAgICAvLyBKdXN0IHJldHVybiBhbiBvYmplY3QgYW5kIGxldCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgaGFuZGxlIHRoYXQuXG4gICAgLy8gVGhpcyB3YXkgdGhlIHJlc3VsdCB3aWxsIGJlIHRoZSBzYW1lIHdoZXRoZXIgdGhlIHRpbnljb2xvciBpcyBpbml0aWFsaXplZCB3aXRoIHN0cmluZyBvciBvYmplY3QuXG4gICAgdmFyIG1hdGNoO1xuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5yZ2IuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGNoWzFdLCBnOiBtYXRjaFsyXSwgYjogbWF0Y2hbM10gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLnJnYmEuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IHI6IG1hdGNoWzFdLCBnOiBtYXRjaFsyXSwgYjogbWF0Y2hbM10sIGE6IG1hdGNoWzRdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oc2wuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgbDogbWF0Y2hbM10gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhzbGEuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgbDogbWF0Y2hbM10sIGE6IG1hdGNoWzRdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oc3YuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgdjogbWF0Y2hbM10gfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhzdmEuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7IGg6IG1hdGNoWzFdLCBzOiBtYXRjaFsyXSwgdjogbWF0Y2hbM10sIGE6IG1hdGNoWzRdIH07XG4gICAgfVxuICAgIGlmICgobWF0Y2ggPSBtYXRjaGVycy5oZXg4LmV4ZWMoY29sb3IpKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzFdKSxcbiAgICAgICAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSksXG4gICAgICAgICAgICBiOiBwYXJzZUludEZyb21IZXgobWF0Y2hbM10pLFxuICAgICAgICAgICAgYTogY29udmVydEhleFRvRGVjaW1hbChtYXRjaFs0XSksXG4gICAgICAgICAgICBmb3JtYXQ6IG5hbWVkID8gXCJuYW1lXCIgOiBcImhleDhcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaGV4Ni5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSksXG4gICAgICAgICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0pLFxuICAgICAgICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdKSxcbiAgICAgICAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4XCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKChtYXRjaCA9IG1hdGNoZXJzLmhleDQuZXhlYyhjb2xvcikpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMV0gKyAnJyArIG1hdGNoWzFdKSxcbiAgICAgICAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSArICcnICsgbWF0Y2hbMl0pLFxuICAgICAgICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdICsgJycgKyBtYXRjaFszXSksXG4gICAgICAgICAgICBhOiBjb252ZXJ0SGV4VG9EZWNpbWFsKG1hdGNoWzRdICsgJycgKyBtYXRjaFs0XSksXG4gICAgICAgICAgICBmb3JtYXQ6IG5hbWVkID8gXCJuYW1lXCIgOiBcImhleDhcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoKG1hdGNoID0gbWF0Y2hlcnMuaGV4My5leGVjKGNvbG9yKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSArICcnICsgbWF0Y2hbMV0pLFxuICAgICAgICAgICAgZzogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzJdICsgJycgKyBtYXRjaFsyXSksXG4gICAgICAgICAgICBiOiBwYXJzZUludEZyb21IZXgobWF0Y2hbM10gKyAnJyArIG1hdGNoWzNdKSxcbiAgICAgICAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4XCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV0NBRzJQYXJtcyhwYXJtcykge1xuICAgIC8vIHJldHVybiB2YWxpZCBXQ0FHMiBwYXJtcyBmb3IgaXNSZWFkYWJsZS5cbiAgICAvLyBJZiBpbnB1dCBwYXJtcyBhcmUgaW52YWxpZCwgcmV0dXJuIHtcImxldmVsXCI6XCJBQVwiLCBcInNpemVcIjpcInNtYWxsXCJ9XG4gICAgdmFyIGxldmVsLCBzaXplO1xuICAgIHBhcm1zID0gcGFybXMgfHwge1wibGV2ZWxcIjpcIkFBXCIsIFwic2l6ZVwiOlwic21hbGxcIn07XG4gICAgbGV2ZWwgPSAocGFybXMubGV2ZWwgfHwgXCJBQVwiKS50b1VwcGVyQ2FzZSgpO1xuICAgIHNpemUgPSAocGFybXMuc2l6ZSB8fCBcInNtYWxsXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxldmVsICE9PSBcIkFBXCIgJiYgbGV2ZWwgIT09IFwiQUFBXCIpIHtcbiAgICAgICAgbGV2ZWwgPSBcIkFBXCI7XG4gICAgfVxuICAgIGlmIChzaXplICE9PSBcInNtYWxsXCIgJiYgc2l6ZSAhPT0gXCJsYXJnZVwiKSB7XG4gICAgICAgIHNpemUgPSBcInNtYWxsXCI7XG4gICAgfVxuICAgIHJldHVybiB7XCJsZXZlbFwiOmxldmVsLCBcInNpemVcIjpzaXplfTtcbn1cblxuLy8gTm9kZTogRXhwb3J0IGZ1bmN0aW9uXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gdGlueWNvbG9yO1xufVxuLy8gQU1EL3JlcXVpcmVqczogRGVmaW5lIHRoZSBtb2R1bGVcbmVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7cmV0dXJuIHRpbnljb2xvcjt9KTtcbn1cbi8vIEJyb3dzZXI6IEV4cG9zZSB0byB3aW5kb3dcbmVsc2Uge1xuICAgIHdpbmRvdy50aW55Y29sb3IgPSB0aW55Y29sb3I7XG59XG5cbn0pKE1hdGgpO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiLyoqXG4gKiBXb3JkUHJlc3MgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCB7XG5cdFBhbmVsQm9keSxcblx0UmFuZ2VDb250cm9sLFxuXHRQYXRoLFxuXHRTVkcsXG5cdFJlY3QsXG5cdFRvb2xiYXIsXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQge2NyZWF0ZUJsb2NrfSBmcm9tICdAd29yZHByZXNzL2Jsb2Nrcyc7XG5pbXBvcnQge0luc3BlY3RvckNvbnRyb2xzLElubmVyQmxvY2tzLEJsb2NrQ29udHJvbHN9IGZyb20gJ0B3b3JkcHJlc3MvZWRpdG9yJztcbmltcG9ydCB7c2VsZWN0fSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdnZWNrby9ncmlkLWxheW91dC1iYXNpYyc7XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcblx0dGl0bGU6IF9fKCAnQmFzaWMnICksXG5cblx0cGFyZW50OiBbJ2dlY2tvL2dyaWQtbGF5b3V0J10sXG5cblx0aWNvbjogPFNWRyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxQYXRoIGQ9XCJNMCwwaDI0djI0SDBWMHogTTAsMGgyNHYyNEgwVjB6XCIgZmlsbD1cIm5vbmVcIiAvPjxQYXRoIGQ9XCJtMjAgN3YxMGgtMTZ2LTEwaDE2bTAtMmgtMTZjLTEuMSAwLTEuOTkgMC45LTEuOTkgMmwtMC4wMSAxMGMwIDEuMSAwLjkgMiAyIDJoMTZjMS4xIDAgMi0wLjkgMi0ydi0xMGMwLTEuMS0wLjktMi0yLTJ6XCIgLz48UmVjdCB4PVwiMTFcIiB5PVwiOFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCIxMVwiIHk9XCIxMVwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCI4XCIgeT1cIjhcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiOFwiIHk9XCIxMVwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCI1XCIgeT1cIjExXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjVcIiB5PVwiOFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjxSZWN0IHg9XCI4XCIgeT1cIjE0XCIgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjE0XCIgeT1cIjExXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIC8+PFJlY3QgeD1cIjE0XCIgeT1cIjhcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiMTdcIiB5PVwiMTFcIiB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgLz48UmVjdCB4PVwiMTdcIiB5PVwiOFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiAvPjwvU1ZHPixcblxuXHRkZXNjcmlwdGlvbjogX18oICdBbiBpbWFnZSBncmlkIGJsb2NrLicgKSxcblxuXHRjYXRlZ29yeTogJ2NvbW1vbicsXG5cblx0c3VwcG9ydHM6IHtcblx0XHRjbGFzc05hbWU6IHRydWUsXG5cdFx0aW5zZXJ0ZXI6IHRydWUsXG5cdFx0cmV1c2FibGU6IGZhbHNlLFxuXHRcdGh0bWw6IGZhbHNlLFxuXHR9LFxuXG5cdHN0eWxlczogW1xuXHRcdHsgbmFtZTogJ2RlZmF1bHQnLCBsYWJlbDogX18oICdEZWZhdWx0JyksIGlzRGVmYXVsdDogdHJ1ZSB9LFxuXHRdLFxuXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHRoOiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0XHR3OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAxfSxcblx0XHRhbGlnbkNvbnRlbnQ6IHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6ICd0b3AnfSxcblx0fSxcblxuXHR0cmFuc2Zvcm1zOiB7XG5cdFx0ZnJvbTogW1xuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnYmxvY2snLFxuXHRcdFx0XHRibG9ja3M6IFsnZ2Vja28vZ3JpZC1sYXlvdXQtaW1hZ2UnLCAnZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbSddLFxuXHRcdFx0XHR0cmFuc2Zvcm06IChhdHRyaWJ1dGVzLCBpbm5lckJsb2NrcykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0KCdjb3JlL2VkaXRvcicpLmdldFNlbGVjdGVkQmxvY2soKTsgLy8gYmVjYXVzZSBpbm5lckJsb2NrcyBkb2VzIG5vdCB3b3JrLlxuXHRcdFx0XHRcdC8vIEl0IGFwcGVhcnMgdGhhdCBpbm5lckJsb2NrcyB3aWxsIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuXG5cdFx0XHRcdFx0Y29uc3Qge2gsIHd9ID0gYXR0cmlidXRlcztcblx0XHRcdFx0XHRyZXR1cm4gY3JlYXRlQmxvY2soJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdFx0aDogaCxcblx0XHRcdFx0XHRcdHc6IHcsXG5cdFx0XHRcdFx0fSwgc2VsZWN0ZWQuaW5uZXJCbG9ja3MpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcdFxuXHRcdF0sXG5cdH0sXG5cblx0ZGVwcmVjYXRlZDogW3tcblx0XHRtaWdyYXRlKCkge30sXG5cdFx0c2F2ZSgpIHtcblx0XHRcdHJldHVybiA8SW5uZXJCbG9ja3MuQ29udGVudCAvID4gO1xuXHRcdH0sXG5cdH1dLFxuXG5cdGVkaXQoeyBhdHRyaWJ1dGVzLCBzZXRBdHRyaWJ1dGVzLCBjbGFzc05hbWUsIGluc2VydEJsb2Nrc0FmdGVyIH0pIHtcblx0XHRjb25zdCB7XG5cdFx0XHRoLFxuXHRcdFx0dyxcblx0XHRcdGFsaWduQ29udGVudCxcblx0XHR9ID0gYXR0cmlidXRlcztcblx0XHRcblx0XHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0XHRncmlkQ29sdW1uRW5kOiAnc3BhbiAnKyB3LFxuXHRcdFx0Z3JpZFJvd0VuZDogJ3NwYW4gJyArIGgsXG5cdFx0XHRhbGlnblNlbGY6IChhbGlnbkNvbnRlbnQgPT09ICdjZW50ZXInKT8gJ2NlbnRlcic6ICdzdGFydCcsXG5cdFx0fTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdFx0PFBhbmVsQm9keSB0aXRsZT1cIkdyaWQgSXRlbVwiPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnV2lkdGgnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IHcgfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHR3OiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnU3BhbiBSb3dzJyApIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyBoIH1cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIG5leHQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHRcdFx0XHRcdFx0aDogbmV4dCxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRtaW49eyAxIH1cblx0XHRcdFx0XHRcdFx0bWF4PXsgMTIgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1BhbmVsQm9keT5cblx0XHRcdFx0PC9JbnNwZWN0b3JDb250cm9scz5cblx0XHRcdFx0PEJsb2NrQ29udHJvbHM+XG5cdFx0XHRcdFx0PFRvb2xiYXIgY29udHJvbHM9e1tcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWNvbjogJ2Fycm93LXVwLWFsdCcsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBfXygnQWxpZ24gVG9wJyksXG5cdFx0XHRcdFx0XHRcdGlzQWN0aXZlOiBhbGlnbkNvbnRlbnQgPT09ICd0b3AnLFxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrOiAoKSA9PiBzZXRBdHRyaWJ1dGVzKHtcblx0XHRcdFx0XHRcdFx0XHRhbGlnbkNvbnRlbnQ6ICd0b3AnXG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWNvbjogJ2FsaWduLWNlbnRlcicsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBfXygnQWxpZ24gQ2VudGVyJyksXG5cdFx0XHRcdFx0XHRcdGlzQWN0aXZlOiBhbGlnbkNvbnRlbnQgPT09ICdjZW50ZXInLFxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrOiAoKSA9PiBzZXRBdHRyaWJ1dGVzKHthbGlnbkNvbnRlbnQ6ICdjZW50ZXInfSksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpY29uOiAnYXJyb3ctZG93bi1hbHQnLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogX18oJ0FsaWduIEJvdHRvbScpLFxuXHRcdFx0XHRcdFx0XHRpc0FjdGl2ZTogYWxpZ25Db250ZW50ID09PSAnYm90dG9tJyxcblx0XHRcdFx0XHRcdFx0b25DbGljazogKCkgPT4gc2V0QXR0cmlidXRlcyh7YWxpZ25Db250ZW50OiAnYm90dG9tJ30pLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRdfT5cblx0XHRcdFx0XHQ8L1Rvb2xiYXI+XG5cdFx0XHRcdDwvQmxvY2tDb250cm9scz5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9e2BnZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzYH0gc3R5bGU9e3N0eWxlc30+PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lID0ge1xuXHRcdFx0XHRcdGB3cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3JfX3dyYXAgZ2Vja28tZ3JpZC1sYXlvdXQtYmFzaWMgJHthdHRyaWJ1dGVzLmNsYXNzTmFtZX0gYWxpZ24tY29udGVudC0ke2F0dHJpYnV0ZXMuYWxpZ25Db250ZW50fWBcblx0XHRcdFx0fSA+XG5cdFx0XHRcdFx0eyB0eXBlb2YgaW5zZXJ0QmxvY2tzQWZ0ZXIgPT09ICdmdW5jdGlvbicgLy9UaGlzIGxpbmUgbWFrZXMgc3VyZSBzdHlsZXMgZG8gbm90IGJyZWFrXG5cdFx0XHRcdFx0XHQ/IDxJbm5lckJsb2NrcyB0ZW1wbGF0ZUxvY2s9eyBmYWxzZSB9Lz5cblx0XHRcdFx0XHRcdDogPHA+TG9yZW0gSXBzdW08L3A+IC8vIFRoaXMgaXMgd2hhdCBzaG93cyBhcyB0aGUgcHJldmlldyBjb250ZW50LlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdCk7XG5cdH0sXG5cblx0c2F2ZSgpIHtcblx0XHQvLyBIb25lc3RseSBJIGRvbid0IHdhbnQgdG8gZG8gdGhpcyBidXQgY29udmVudGlvbnMgYXJlIGNvbnZlbnRpb25zLlxuXHRcdHJldHVybig8ZGl2PjxJbm5lckJsb2Nrcy5Db250ZW50IC8+PC9kaXY+KTsgXG5cdH0sXG59O1xuIiwiLyoqXG4gKiBXb3JkUHJlc3MgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwibG9kYXNoL2RlYm91bmNlXCI7XG5pbXBvcnQge1xuXHRQYW5lbEJvZHksXG5cdFJhbmdlQ29udHJvbCxcblx0UGF0aCxcblx0U1ZHLFxuXHRJY29uQnV0dG9uLFxuXHRUb29sYmFyLFxuXHRSZXNpemFibGVCb3gsXG59IGZyb20gJ0B3b3JkcHJlc3MvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ0B3b3JkcHJlc3MvZWxlbWVudCc7XG5pbXBvcnQgeyBjcmVhdGVCbG9jayB9IGZyb20gJ0B3b3JkcHJlc3MvYmxvY2tzJztcbmltcG9ydCB7XG5cdEluc3BlY3RvckNvbnRyb2xzLFxuXHRJbm5lckJsb2Nrcyxcblx0TWVkaWFVcGxvYWQsXG5cdE1lZGlhUGxhY2Vob2xkZXIsXG5cdEJsb2NrQ29udHJvbHMsXG59IGZyb20gJ0B3b3JkcHJlc3MvZWRpdG9yJztcbmltcG9ydCB7XG5cdHNlbGVjdFxufSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuXG5jb25zdCBBTExPV0VEX0JMT0NLUyA9IFsnY29yZS9wYXJhZ3JhcGgnLCAnY29yZS9oZWFkaW5nJywgJ2NvcmUvYnV0dG9uJywgJ2NvcmUvbGlzdCcsICdjb3JlL3F1b3RlJ107XG5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2dlY2tvL2dyaWQtbGF5b3V0LWltYWdlJztcblxuZXhwb3J0IGNvbnN0IHNldHRpbmdzID0ge1xuXHR0aXRsZTogX18oICdJbWFnZScgKSxcblxuXHRwYXJlbnQ6IFsnZ2Vja28vZ3JpZC1sYXlvdXQnXSxcblxuXHRpY29uOiA8U1ZHIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PFBhdGggZD1cIk0wLDBoMjR2MjRIMFYwelwiIGZpbGw9XCJub25lXCIgLz48UGF0aCBkPVwibTE5IDV2MTRoLTE0di0xNGgxNG0wLTJoLTE0Yy0xLjEgMC0yIDAuOS0yIDJ2MTRjMCAxLjEgMC45IDIgMiAyaDE0YzEuMSAwIDItMC45IDItMnYtMTRjMC0xLjEtMC45LTItMi0yelwiIC8+PFBhdGggZD1cIm0xNC4xNCAxMS44NmwtMyAzLjg3LTIuMTQtMi41OS0zIDMuODZoMTJsLTMuODYtNS4xNHpcIiAvPjwvU1ZHPixcblxuXHRkZXNjcmlwdGlvbjogX18oICdBbiBpbWFnZSBHcmlkIEJsb2NrLicgKSxcblxuXHRjYXRlZ29yeTogJ2NvbW1vbicsXG5cblx0c3VwcG9ydHM6IHtcblx0XHRjbGFzc05hbWU6IHRydWUsXG5cdFx0aW5zZXJ0ZXI6IHRydWUsXG5cdFx0cmV1c2FibGU6IGZhbHNlLFxuXHRcdGh0bWw6IGZhbHNlLFxuXHR9LFxuXG5cdHN0eWxlczogW1xuXHRcdHsgbmFtZTogJ2RlZmF1bHQnLCBsYWJlbDogX18oICdEZWZhdWx0JyksIGlzRGVmYXVsdDogdHJ1ZSB9LFxuXHRcdHsgbmFtZTogJ2hvdmVyJywgbGFiZWw6IF9fKCAnSG92ZXInKSB9LFxuXHRcdHsgbmFtZTogJ25vLWNhcHRpb24nLCBsYWJlbDogX18oICdObyBDYXB0aW9uJykgfSxcblx0XSxcblxuXHRhdHRyaWJ1dGVzOiB7XG5cdFx0aDogeyB0eXBlOiAnbnVtYmVyJywgZGVmYXVsdDogMX0sXG5cdFx0dzogeyB0eXBlOiAnbnVtYmVyJywgZGVmYXVsdDogMX0sXG5cdFx0bWluSGVpZ2h0OiB7IHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAyMDAsfSxcblx0XHRpbWdJZDogeyB0eXBlOiAnbnVtYmVyJ30sXG5cdFx0aW1nVXJsOiB7IHR5cGU6ICdzdHJpbmcnfSxcblx0fSxcblxuXHR0cmFuc2Zvcm1zOiB7XG5cdFx0ZnJvbTogW1xuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiAnYmxvY2snLFxuXHRcdFx0XHRibG9ja3M6IFsnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCAnZ2Vja28vZ3JpZC1sYXlvdXQtaXRlbSddLFxuXHRcdFx0XHR0cmFuc2Zvcm06IChhdHRyaWJ1dGVzLCBpbm5lckJsb2NrcykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0KCdjb3JlL2VkaXRvcicpLmdldFNlbGVjdGVkQmxvY2soKTsgLy8gYmVjYXVzZSBpbm5lckJsb2NrcyBkb2VzIG5vdCB3b3JrLlxuXHRcdFx0XHRcdC8vIEl0IGFwcGVhcnMgdGhhdCBpbm5lckJsb2NrcyB3aWxsIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuXG5cdFx0XHRcdFx0Y29uc3Qge2gsIHcsIGJnTWVkaWEsIGJnTWVkaWFVcmwsIG1lZGlhSWQsIG1lZGlhVXJsLCBtaW5IZWlnaHR9ID0gYXR0cmlidXRlcztcblx0XHRcdFx0XHRyZXR1cm4gY3JlYXRlQmxvY2soJ2dlY2tvL2dyaWQtbGF5b3V0LWltYWdlJywge1xuXHRcdFx0XHRcdFx0aDogaCxcblx0XHRcdFx0XHRcdHc6IHcsXG5cdFx0XHRcdFx0XHRpbWdJZDogYmdNZWRpYSB8fCBtZWRpYUlkLFxuXHRcdFx0XHRcdFx0aW1nVXJsOiBiZ01lZGlhVXJsIHx8IG1lZGlhVXJsLFxuXHRcdFx0XHRcdFx0bWluSGVpZ2h0OiBtaW5IZWlnaHQsXG5cdFx0XHRcdFx0fSwgc2VsZWN0ZWQuaW5uZXJCbG9ja3MpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcdFxuXHRcdF1cblx0fSxcblxuXHRkZXByZWNhdGVkOiBbe1xuXHRcdG1pZ3JhdGUoKSB7fSxcblx0XHRzYXZlKCkge1xuXHRcdFx0cmV0dXJuKDxJbm5lckJsb2Nrcy5Db250ZW50IC8+KTtcblx0XHR9LFxuXHR9XSxcblxuXHRlZGl0KHsgYXR0cmlidXRlcywgc2V0QXR0cmlidXRlcywgY2xhc3NOYW1lLCBpbnNlcnRCbG9ja3NBZnRlciwgdG9nZ2xlU2VsZWN0aW9uIH0pIHtcblx0XHRjb25zdCB7XG5cdFx0XHRoLFxuXHRcdFx0dyxcblx0XHRcdGltZ0lkLFxuXHRcdFx0aW1nVXJsLFxuXHRcdFx0bWluSGVpZ2h0LFxuXHRcdH0gPSBhdHRyaWJ1dGVzO1xuXHRcdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRcdGdyaWRDb2x1bW5FbmQ6ICdzcGFuICcrIHcsXG5cdFx0XHRncmlkUm93RW5kOiAnc3BhbiAnICsgaCxcblx0XHRcdG1pbkhlaWdodDogbWluSGVpZ2h0ICsgJ3B4Jyxcblx0XHR9O1xuXHRcdGNvbnN0IG9uUmVzaXppbmcgPSAoZXZlbnQsIGRpcmVjdGlvbiwgZWx0LCBkZWx0YSkgPT4ge1xuXHRcdFx0aWYgKGRpcmVjdGlvbiA9PT0gJ2JvdHRvbScpe1xuXHRcdFx0XHRjb25zdCBuZXdNaW5IZWlnaHQgPSAoZWx0LmNsaWVudEhlaWdodCA+IDYwMCkgPyA2MDAgOiBlbHQuY2xpZW50SGVpZ2h0O1xuXHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHsgbWluSGVpZ2h0OiBuZXdNaW5IZWlnaHQgfSk7XG5cdFx0XHRcdGVsdC5zdHlsZS5oZWlnaHQgPSBcIjEwMCVcIjtcblx0XHRcdH07XG5cdFx0XHRpZiAoZGlyZWN0aW9uICE9PSAncmlnaHQnKSByZXR1cm47XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhlbHQpO1xuXHRcdFx0Y29uc3QgY29sdW1uV2lkdGggPSBNYXRoLmZsb29yKGVsdC5wYXJlbnROb2RlLm9mZnNldFdpZHRoIC8gdyk7XG5cdFx0XHRjb25zdCBjdXJyZW50U3BhbiA9IE1hdGguZmxvb3IoZWx0LnBhcmVudE5vZGUub2Zmc2V0V2lkdGggLyBjb2x1bW5XaWR0aCk7XG5cdFx0XHRjb25zdCBlbENvbFdpZHRoID0gTWF0aC5mbG9vcihlbHQuY2xpZW50V2lkdGggLyB3KTtcblx0XHRcdGNvbnN0IHNwYW5zID0gTWF0aC5mbG9vcihlbHQuY2xpZW50V2lkdGggLyBjb2x1bW5XaWR0aCk7XG5cdFx0XHRjb25zdCB0b1VwZGF0ZSA9IE1hdGguZmxvb3IocGFyc2VJbnQoZGVsdGEud2lkdGgsIDEwKSAvIGNvbHVtbldpZHRoKTtcblx0XHRcdGNvbnN0IG9yaWdpbmFsID0gdyAtIHRvVXBkYXRlO1xuXHRcdFx0bGV0IG5ld1dpZHRoID0gc3BhbnM7XG5cdFx0XHRpZiAobmV3V2lkdGggPiAxMikge25ld1dpZHRoID0gMTJ9XG5cdFx0XHRpZiAobmV3V2lkdGggPCAxKSB7bmV3V2lkdGggPSAxfVxuXHRcdFx0c2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHR3OiBuZXdXaWR0aCxcblx0XHRcdH0gKTtcblx0XHRcdGVsdC5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuXHRcdFx0Ly8gfVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdFx0PFBhbmVsQm9keSB0aXRsZT1cIkdyaWQgSXRlbVwiPlxuXHRcdFx0XHRcdFx0PFJhbmdlQ29udHJvbFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnTWluaW11bSBIZWlnaHQnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IG1pbkhlaWdodCB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1pbkhlaWdodDogbmV4dCxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRtaW4gPSBcIjUwXCJcblx0XHRcdFx0XHRcdFx0bWF4ID0gXCI2MDBcIlxuXHRcdFx0XHRcdFx0XHRzdGVwID0gXCIxXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdXaWR0aCcgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsgdyB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdHc6IG5leHQsXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0bWluPXsgMSB9XG5cdFx0XHRcdFx0XHRcdG1heD17IDEyIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdTcGFuIFJvd3MnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17IGggfVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggbmV4dCApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRoOiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbj17IDEgfVxuXHRcdFx0XHRcdFx0XHRtYXg9eyAxMiB9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHQ8L0luc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0XHQ8QmxvY2tDb250cm9scz5cblx0XHRcdFx0XHQ8VG9vbGJhcj5cblx0XHRcdFx0XHRcdDxNZWRpYVVwbG9hZFxuXHRcdFx0XHRcdFx0XHRvblNlbGVjdD17KHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW1nSWQ6IHZhbHVlLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1nVXJsOiB2YWx1ZS51cmwsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHR5cGU9e1snaW1hZ2UnXX1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyhpbWdJZCk/IGltZ0lkOiBudWxsIH1cblx0XHRcdFx0XHRcdFx0cmVuZGVyPXsoe29wZW59KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEljb25CdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiY29tcG9uZW50cy1pY29uLWJ1dHRvbiBjb21wb25lbnRzLXRvb2xiYXJfX2NvbnRyb2xcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnRWRpdCBpbWFnZScgKSB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9e29wZW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGljb249XCJlZGl0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9Ub29sYmFyPlxuXHRcdFx0XHQ8LyBCbG9ja0NvbnRyb2xzPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YGdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNgfSBzdHlsZT17c3R5bGVzfT48L2Rpdj5cblx0XHRcdFx0PFJlc2l6YWJsZUJveFxuXHRcdFx0XHRcdFx0c2l6ZSA9IHt7XG5cdFx0XHRcdFx0XHRcdHdpZHRoOiAnJyxcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiAnMTAwJScsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0Ly8gbWluSGVpZ2h0ID0gXCI1MFwiXG5cdFx0XHRcdFx0XHQvLyBtaW5XaWR0aCA9IFwiMTAwJVwiXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSB7XG5cdFx0XHRcdFx0XHRcdGB3cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3JfX3dyYXAgZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UgJHthdHRyaWJ1dGVzLmNsYXNzTmFtZX1gXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBtaW5IZWlnaHQ9eyBtaW5IZWlnaHQgfVxuXHRcdFx0XHRcdFx0Ly8gbWF4SGVpZ2h0PXs2MDB9XG5cdFx0XHRcdFx0XHQvLyBsb2NrQXNwZWN0UmF0aW9cblx0XHRcdFx0XHRcdGVuYWJsZT17IHtcblx0XHRcdFx0XHRcdFx0dG9wOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0cmlnaHQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGJvdHRvbTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0bGVmdDogZmFsc2UsXG5cdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdG9uUmVzaXplU3RhcnQ9eyAoZXZlbnQsIGRpcmVjdGlvbiwgZWx0LCBkZWx0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0b2dnbGVTZWxlY3Rpb24oIGZhbHNlICk7XG5cdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdG9uUmVzaXplPXsgXHRkZWJvdW5jZShvblJlc2l6aW5nLCAyNTApIH1cblx0XHRcdFx0XHRcdG9uUmVzaXplU3RvcD17ICggZXZlbnQsIGRpcmVjdGlvbiwgZWx0LCBkZWx0YSApID0+IHtcblx0XHRcdFx0XHRcdFx0ZWx0LnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG5cdFx0XHRcdFx0XHRcdGlmIChkaXJlY3Rpb24gIT09ICdib3R0b20nKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld01pbkhlaWdodCA9IChlbHQuY2xpZW50SGVpZ2h0ID4gNjAwKT8gNjAwIDogZWx0LmNsaWVudEhlaWdodDtcblx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHRcdFx0XHRcdG1pbkhlaWdodDogbmV3TWluSGVpZ2h0LFxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdHRvZ2dsZVNlbGVjdGlvbiggdHJ1ZSApO1xuXHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCFpbWdJZCAmJlxuXHRcdFx0XHRcdFx0PE1lZGlhUGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0b25TZWxlY3Q9eyh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGltZ0lkOiB2YWx1ZS5pZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW1nVXJsOiB2YWx1ZS51cmwsXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkVHlwZXM9e1snaW1hZ2UnXX1cblx0XHRcdFx0XHRcdFx0YWNjZXB0PVwiaW1hZ2UvKlwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpbWdVcmwgJiZcblx0XHRcdFx0XHRcdDxpbWcgY2xhc3NOYW1lPVwiZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2ltYWdlXCIgc3JjPXtpbWdVcmx9IC8+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGltZ0lkICYmXG5cdFx0XHRcdFx0XHQ8ZmlnY2FwdGlvbiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvblwiPlxuXHRcdFx0XHRcdFx0XHR7IHR5cGVvZiBpbnNlcnRCbG9ja3NBZnRlciA9PT0gJ2Z1bmN0aW9uJyAvL1RoaXMgbGluZSBtYWtlcyBzdXJlIHN0eWxlcyBkbyBub3QgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHQ/IDxJbm5lckJsb2NrcyB0ZW1wbGF0ZUxvY2s9eyBmYWxzZSB9IGFsbG93ZWRCbG9ja3M9e0FMTE9XRURfQkxPQ0tTfS8+XG5cdFx0XHRcdFx0XHRcdFx0OiA8cD5Mb3JlbSBJcHN1bTwvcD4gLy8gVGhpcyBpcyB3aGF0IHNob3dzIGFzIHRoZSBwcmV2aWV3IGNvbnRlbnQuXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdDwvZmlnY2FwdGlvbj5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdDwvUmVzaXphYmxlQm94PlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9LFxuXG5cdHNhdmUoKSB7XG5cdFx0Ly8gSG9uZXN0bHkgSSBkb24ndCB3YW50IHRvIGRvIHRoaXMgYnV0IGNvbnZlbnRpb25zIGFyZSBjb252ZW50aW9ucy5cblx0XHRyZXR1cm4oPGRpdj48SW5uZXJCbG9ja3MuQ29udGVudCAvPjwvZGl2Pik7IFxuXHR9LFxufTtcbiIsImltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMic7XG5cbi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQge1xuXHRQYW5lbEJvZHksXG5cdFJhbmdlQ29udHJvbCxcblx0UGF0aCxcblx0U1ZHLFxufSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHtjcmVhdGVCbG9ja30gZnJvbSAnQHdvcmRwcmVzcy9ibG9ja3MnO1xuaW1wb3J0IHtcblx0SW5zcGVjdG9yQ29udHJvbHMsXG5cdElubmVyQmxvY2tzLFxuXHRNZWRpYVVwbG9hZCxcblx0TWVkaWFQbGFjZWhvbGRlcixcblx0Q29sb3JQYWxldHRlLFxuXHRnZXRDb2xvck9iamVjdEJ5Q29sb3JWYWx1ZSxcbn0gZnJvbSAnQHdvcmRwcmVzcy9lZGl0b3InO1xuaW1wb3J0IHtcblx0c2VsZWN0XG59IGZyb20gJ0B3b3JkcHJlc3MvZGF0YSc7XG5pbXBvcnQgZGVwcmVjYXRlZCBmcm9tICdAd29yZHByZXNzL2RlcHJlY2F0ZWQnO1xuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdnZWNrby9ncmlkLWxheW91dC1pdGVtJztcblxuZXhwb3J0IGNvbnN0IHNldHRpbmdzID0ge1xuXHR0aXRsZTogX18oJ0l0ZW0gKGRlcHJlY2F0ZWQpJyksXG5cblx0cGFyZW50OiBbJ2dlY2tvL2dyaWQtbGF5b3V0J10sXG5cblx0aWNvbjogPFNWRyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxQYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiIC8+PFBhdGggZD1cIk0xMS45OSAxOC41NGwtNy4zNy01LjczTDMgMTQuMDdsOSA3IDktNy0xLjYzLTEuMjd6TTEyIDE2bDcuMzYtNS43M0wyMSA5bC05LTctOSA3IDEuNjMgMS4yN0wxMiAxNnptMC0xMS40N0wxNy43NCA5IDEyIDEzLjQ3IDYuMjYgOSAxMiA0LjUzelwiIC8+PC9TVkc+LFxuXG5cdGRlc2NyaXB0aW9uOiBfXygnVGhpcyBibG9jayBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGJhc2ljIG9yIGltYWdlIGJsb2NrIGluc3RlYWQuJyksXG5cblx0Y2F0ZWdvcnk6ICdjb21tb24nLFxuXG5cdHN1cHBvcnRzOiB7XG5cdFx0aW5zZXJ0ZXI6IGZhbHNlLFxuXHR9LFxuXG5cdHN0eWxlczogW1xuXHRcdHsgbmFtZTogJ2RlZmF1bHQnLCBsYWJlbDogX18oICdEZWZhdWx0JyksIGlzRGVmYXVsdDogdHJ1ZSB9LFxuXHRcdHsgbmFtZTogJ2hvdmVyJywgbGFiZWw6IF9fKCAnSG92ZXInKSB9LFxuXHRdLFxuXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHR0eXBlOnsgdHlwZTogJ3N0cmluZycsZGVmYXVsdDogdW5kZWZpbmVkLCB9LCAvL3NvbGlkLCBpbWFnZSwgaW1hZ2UtY29udGVudFxuXHRcdGg6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDEsfSxcblx0XHR3OiB7IHR5cGU6ICdudW1iZXInfSxcblx0XHRtaW5IZWlnaHQ6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDIwMCx9LFxuXHRcdG9wYWNpdHk6IHsgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDF9LFxuXHRcdGJnTWVkaWE6IHsgdHlwZTogJ251bWJlcid9LFxuXHRcdGJnTWVkaWFVcmw6IHsgdHlwZTogJ3N0cmluZyd9LFxuXHRcdGJnQ29sb3I6IHsgdHlwZTogJ3N0cmluZyd9LFxuXHRcdGJnQ29sb3JTbHVnOiB7IHR5cGU6ICdzdHJpbmcnfSxcblx0XHRiZ0NvbG9yQnJpZ2h0bmVzczoge3R5cGU6ICdudW1iZXInfSwvL2xpZ2h0IG9yIGRhcmtcblx0fSxcblxuXHRkZXByZWNhdGVkOiBbXG5cdFx0e1xuXHRcdFx0bWlncmF0ZShhdHRyaWJ1dGVzLCBpbm5lckJsb2Nrcykge1xuXHRcdFx0XHQvLyBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdCgnY29yZS9lZGl0b3InKS5nZXRTZWxlY3RlZEJsb2NrKCk7IC8vIGJlY2F1c2UgaW5uZXJCbG9ja3MgZG9lcyBub3Qgd29yay5cblx0XHRcdFx0Ly8gSXQgYXBwZWFycyB0aGF0IGlubmVyQmxvY2tzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cblx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdGgsXG5cdFx0XHRcdFx0dyxcblx0XHRcdFx0XHRiZ01lZGlhLFxuXHRcdFx0XHRcdGJnTWVkaWFVcmwsXG5cdFx0XHRcdFx0bWluSGVpZ2h0XG5cdFx0XHRcdH0gPSBhdHRyaWJ1dGVzO1xuXHRcdFx0XHRpZiAoYmdNZWRpYSkge1xuXHRcdFx0XHRcdHJldHVybiBjcmVhdGVCbG9jaygnZ2Vja28vZ3JpZC1sYXlvdXQtaW1hZ2UnLCB7XG5cdFx0XHRcdFx0XHRoOiBoLFxuXHRcdFx0XHRcdFx0dzogdyxcblx0XHRcdFx0XHRcdGltZ0lkOiBiZ01lZGlhLFxuXHRcdFx0XHRcdFx0aW1nVXJsOiBiZ01lZGlhVXJsLFxuXHRcdFx0XHRcdFx0bWluSGVpZ2h0OiBtaW5IZWlnaHQsXG5cdFx0XHRcdFx0fSwgaW5uZXJCbG9ja3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCbG9jaygnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0aDogaCxcblx0XHRcdFx0XHR3OiB3LFxuXHRcdFx0XHR9LCBpbm5lckJsb2Nrcyk7XG5cdFx0XHR9LFxuXHRcdFx0c2F2ZSgpIHtcblx0XHRcdFx0cmV0dXJuKDxJbm5lckJsb2Nrcy5Db250ZW50IC8+KTtcblx0XHRcdH0sXG5cdFx0fVxuXHRdLFxuXG5cdGVkaXQoeyBhdHRyaWJ1dGVzLCBzZXRBdHRyaWJ1dGVzLCBjbGFzc05hbWUsIGluc2VydEJsb2Nrc0FmdGVyIH0pIHtcblx0XHRjb25zdCB7XG5cdFx0XHRvcGFjaXR5LFxuXHRcdFx0aCxcblx0XHRcdHcsXG5cdFx0XHR0eXBlLFxuXHRcdFx0cGFkZGluZyxcblx0XHRcdGJnTWVkaWEsXG5cdFx0XHRiZ01lZGlhVXJsLFxuXHRcdFx0YmdDb2xvcixcblx0XHRcdGJnQ29sb3JCcmlnaHRuZXNzLFxuXHRcdFx0YmdDb2xvclNsdWcsXG5cdFx0XHRtaW5IZWlnaHQsXG5cdFx0fSA9IGF0dHJpYnV0ZXM7XG5cdFx0ZGVwcmVjYXRlZCgnR3JpZCBMYXlvdXQgSWRlbScsIHtcblx0XHRcdGFsdGVybmF0aXZlOiAnQmFzaWMgb3IgSW1hZ2UnLFxuXHRcdFx0cGx1Z2luOiAnR2Vja28gR3JpZCBMYXlvdXQnLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRcdCctLWJhY2tncm91bmQnOiBiZ0NvbG9yLFxuXHRcdFx0Jy0tb3BhY2l0eSc6IG9wYWNpdHksXG5cdFx0XHRncmlkQ29sdW1uRW5kOiAnc3BhbiAnKyB3LFxuXHRcdFx0Z3JpZFJvd0VuZDogJ3NwYW4gJyArIGgsXG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IGJnQ29sb3IsXG5cdFx0XHRiYWNrZ3JvdW5kSW1hZ2U6ICd1cmwoJyArIGJnTWVkaWFVcmwgKyAnKScsXG5cdFx0XHRtaW5IZWlnaHQ6IG1pbkhlaWdodCArICdweCcsXG5cdFx0fTtcblx0XHRsZXQgbGlnaHRPckRhcmsgPSAnbGlnaHQnO1xuXHRcdGlmIChiZ0NvbG9yQnJpZ2h0bmVzcyA8IDEzMCkgbGlnaHRPckRhcmsgPSAnZGFyayc7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PEluc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0XHRcdDxQYW5lbEJvZHkgIHRpdGxlPVwiU2V0dGluZ3NcIj5cblx0XHRcdFx0XHRcdDxSYW5nZUNvbnRyb2xcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ1dpZHRoJyApIH1cblx0XHRcdFx0XHRcdFx0dmFsdWU9eyB3IH1cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIG5leHQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHRcdFx0XHRcdFx0dzogbmV4dCxcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRtaW49eyAxIH1cblx0XHRcdFx0XHRcdFx0bWF4PXsgMTIgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxSYW5nZUNvbnRyb2xcblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ1NwYW4gUm93cycgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsgaCB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgKCBuZXh0ICkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHtcblx0XHRcdFx0XHRcdFx0XHRcdGg6IG5leHQsXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0bWluPXsgMSB9XG5cdFx0XHRcdFx0XHRcdG1heD17IDEyIH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9QYW5lbEJvZHk+XG5cdFx0XHRcdFx0PFBhbmVsQm9keSB0aXRsZT1cIlN0eWxlXCI+XG5cdFx0XHRcdFx0XHQ8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdNaW5pbXVtIEhlaWdodCcgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlPXsgbWluSGVpZ2h0IH1cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyAoIG5leHQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHRcdFx0XHRcdFx0bWluSGVpZ2h0OiBuZXh0LFxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fSB9XG5cdFx0XHRcdFx0XHRcdG1pbiA9IFwiNTBcIlxuXHRcdFx0XHRcdFx0XHRtYXggPSBcIjYwMFwiXG5cdFx0XHRcdFx0XHRcdHN0ZXAgPSBcIjFcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdHsgdHlwZSAhPT0gXCJzb2xpZFwiICYmXG5cdFx0XHRcdFx0XHRcdDxNZWRpYVVwbG9hZFxuXHRcdFx0XHRcdFx0XHRcdG9uU2VsZWN0PXsodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRiZ01lZGlhOiB2YWx1ZS5pZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0YmdNZWRpYVVybDogdmFsdWUudXJsLFxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHR0eXBlPXtbJ2ltYWdlJywgJ3ZpZGVvJ119XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9eyhiZ01lZGlhKT8gYmdNZWRpYTogbnVsbCB9XG5cdFx0XHRcdFx0XHRcdFx0cmVuZGVyPXsoe29wZW59KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2JnTWVkaWFVcmwgJiYgPGltZyBzcmM9e2JnTWVkaWFVcmx9IG9uQ2xpY2s9e29wZW59IHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cImF1dG9cIiBzdHlsZT17e2N1cnNvcjogXCJwb2ludGVyXCJ9fS8+fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHshYmdNZWRpYVVybCAmJiA8ZGl2IGNsYXNzTmFtZT17J2J1dHRvbiBidXR0b24tbGFyZ2UnfSBvbkNsaWNrPXtvcGVufT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdENob29zZSBCYWNrZ3JvdW5kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdDxociAvPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxDb2xvclBhbGV0dGVcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPSdCYWNrZ3JvdW5kIENvbG9yJ1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9eyhiZ0NvbG9yKSA/IGJnQ29sb3IuY29sb3IgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZSA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0KHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSBzZWxlY3QoJ2NvcmUvZWRpdG9yJykuZ2V0RWRpdG9yU2V0dGluZ3MoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBjb2xvclNsdWcgPSAodmFsdWUpID8gZ2V0Q29sb3JPYmplY3RCeUNvbG9yVmFsdWUoc2V0dGluZ3MuY29sb3JzLCB2YWx1ZSkuc2x1ZyA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHtiZ0NvbG9yU2x1ZzogY29sb3JTbHVnfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYnJpZ2h0bmVzcyA9ICh2YWx1ZSkgPyB0aW55Y29sb3IodmFsdWUpLmdldEJyaWdodG5lc3MoKTogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoe2JnQ29sb3JCcmlnaHRuZXNzOiBicmlnaHRuZXNzfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7YmdDb2xvcjogdmFsdWV9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PGhyIC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXHRcdFx0XHQ8L0luc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YGdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXNgfSBzdHlsZT17c3R5bGVzfT48L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9e2B3cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC1lZGl0b3JfX3dyYXAke3R5cGV9ICR7YXR0cmlidXRlcy5jbGFzc05hbWV9IGhhcy0ke2JnQ29sb3JTbHVnfS1iYWNrZ3JvdW5kLWNvbG9yIGlzLSR7bGlnaHRPckRhcmt9LWJhY2tncm91bmRgfT5cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQodHlwZSA9PT0gJ2ltYWdlJyB8fCB0eXBlID09PSAnaW1hZ2UtY29udGVudCcpICYmXG5cdFx0XHRcdFx0XHQhYmdNZWRpYSAmJlxuXHRcdFx0XHRcdFx0PE1lZGlhUGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0b25TZWxlY3Q9eyh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJnTWVkaWE6IHZhbHVlLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRiZ01lZGlhVXJsOiB2YWx1ZS51cmwsXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkVHlwZXM9e1snaW1hZ2UnXX1cblx0XHRcdFx0XHRcdFx0YWNjZXB0PVwiaW1hZ2UvKlwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR7IFxuXHRcdFx0XHRcdFx0KHR5cGVvZiBpbnNlcnRCbG9ja3NBZnRlciA9PT0gJ2Z1bmN0aW9uJykgJiYgLy9UaGlzIGxpbmUgbWFrZXMgc3VyZSBzdHlsZXMgZG8gbm90IGJyZWFrXG5cdFx0XHRcdFx0XHQ8SW5uZXJCbG9ja3MgdGVtcGxhdGVMb2NrPXsgZmFsc2UgfSAvPlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KTtcblx0fSxcblxuXHRzYXZlKCkge1xuXHRcdC8vIEhvbmVzdGx5IEkgZG9uJ3Qgd2FudCB0byBkbyB0aGlzIGJ1dCBjb252ZW50aW9ucyBhcmUgY29udmVudGlvbnMuXG5cdFx0cmV0dXJuKDxkaXY+PElubmVyQmxvY2tzLkNvbnRlbnQgLz48L2Rpdj4pO1xuXHR9LFxufTtcbiIsIi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBHLCBTVkcsIFBhdGggfSBmcm9tICdAd29yZHByZXNzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICdAd29yZHByZXNzL2VsZW1lbnQnO1xuaW1wb3J0IHsgSW5uZXJCbG9ja3MgfSBmcm9tICdAd29yZHByZXNzL2VkaXRvcic7XG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tICdAd29yZHByZXNzL2RhdGEnO1xuaW1wb3J0IHtjcmVhdGVCbG9ja30gZnJvbSAnQHdvcmRwcmVzcy9ibG9ja3MnO1xuaW1wb3J0IFRlbXBsYXRlUGlja2VyIGZyb20gJy4vdGVtcGxhdGUtc2VsZWN0JztcblxuLyoqXG4gKiBBbGxvd2VkIGJsb2NrcyBjb25zdGFudCBpcyBwYXNzZWQgdG8gSW5uZXJCbG9ja3MgcHJlY2lzZWx5IGFzIHNwZWNpZmllZCBoZXJlLlxuICogVGhlIGNvbnRlbnRzIG9mIHRoZSBhcnJheSBzaG91bGQgbmV2ZXIgY2hhbmdlLlxuICogVGhlIGFycmF5IHNob3VsZCBjb250YWluIHRoZSBuYW1lIG9mIGVhY2ggYmxvY2sgdGhhdCBpcyBhbGxvd2VkLlxuICpcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ1tdfVxuKi9cbmNvbnN0IEFMTE9XRURfQkxPQ0tTID0gWydnZWNrby9ncmlkLWxheW91dC1pdGVtJywgJ2dlY2tvL2dyaWQtbGF5b3V0LWltYWdlJywgJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJ107XG5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2dlY2tvL2dyaWQtbGF5b3V0JztcblxuZXhwb3J0IGNvbnN0IHNldHRpbmdzID0ge1xuXHR0aXRsZTogX18oICdHcmlkJyApLFxuXG5cdGljb246IDxTVkcgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48UGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIiAvPjxHPjxQYXRoIGQ9XCJNNCwxMyBMOCwxMyBMOCwxMCBMNCwxMCBMNCwxMyBaIE00LDE1IEw0LDE4IEw4LDE4IEw4LDE1IEw0LDE1IFogTTEwLDEzIEwxNCwxMyBMMTQsMTAgTDEwLDEwIEwxMCwxMyBaIE0xMCwxNSBMMTAsMTggTDE0LDE4IEwxNCwxNSBMMTAsMTUgWiBNMjAsMTMgTDIwLDEwIEwxNiwxMCBMMTYsMTMgTDIwLDEzIFogTTIwLDE1IEwxNiwxNSBMMTYsMTggTDIwLDE4IEwyMCwxNSBaIE00LDggTDgsOCBMOCw1IEw0LDUgTDQsOCBaIE0xMCw4IEwxNCw4IEwxNCw1IEwxMCw1IEwxMCw4IFogTTIwLDggTDIwLDUgTDE2LDUgTDE2LDggTDIwLDggWiBNNCwzIEwyMCwzIEMyMS4xMDQ1Njk1LDMgMjIsMy45NTEzOTQ5MSAyMiw1LjEyNSBMMjIsMTcuODc1IEMyMiwxOS4wNDg2MDUxIDIxLjEwNDU2OTUsMjAgMjAsMjAgTDQsMjAgQzIuODk1NDMwNSwyMCAyLDE5LjA0ODYwNTEgMiwxNy44NzUgTDIsNS4xMjUgQzIsMy45NTEzOTQ5MSAyLjg5NTQzMDUsMyA0LDMgWlwiIC8+PC9HPjwvU1ZHPixcblxuXHRjYXRlZ29yeTogJ2xheW91dCcsXG5cblx0ZGVzY3JpcHRpb246IF9fKCAnVXNlIENTUyBHcmlkIHRvIGJ1aWxkIGxheW91dHMgYW5kLCB0aGVuIGFkZCB3aGF0ZXZlciBjb250ZW50IGJsb2NrcyB5b3XigJlkIGxpa2UuJyApLFxuXG5cdHN1cHBvcnRzOiB7XG5cdFx0YWxpZ246IFsgJ3dpZGUnLCAnZnVsbCcgXSxcblx0XHRodG1sOiBmYWxzZSxcblx0fSxcblxuXHRkZXByZWNhdGVkOiBbXG5cdFx0e1xuXHRcdFx0bWlncmF0ZSgpIHt9LFxuXHRcdFx0c2F2ZSgpIHtcblx0XHRcdFx0cmV0dXJuIDxJbm5lckJsb2Nrcy5Db250ZW50IC8+O1xuXHRcdFx0fSxcblx0XHR9XG5cdF0sXG5cblx0dHJhbnNmb3Jtczoge1xuXHRcdGZyb206IFt7XG5cdFx0XHR0eXBlOiAnYmxvY2snLFxuXHRcdFx0YmxvY2tzOiBbJ2NvcmUvY29sdW1ucyddLFxuXHRcdFx0dHJhbnNmb3JtOiAoYXR0cmlidXRlcykgPT4ge1xuXHRcdFx0XHRjb25zdCBzZWxlY3RlZCA9IHNlbGVjdCgnY29yZS9lZGl0b3InKS5nZXRTZWxlY3RlZEJsb2NrKCk7IC8vIGJlY2F1c2UgaW5uZXJCbG9ja3MgZG9lcyBub3Qgd29yay5cblx0XHRcdFx0Y29uc3QgY29sdW1ucyA9IHNlbGVjdGVkLmlubmVyQmxvY2tzO1xuXHRcdFx0XHRjb25zdCBjb3VudCA9IGNvbHVtbnMubGVuZ3RoO1xuXHRcdFx0XHRjb25zdCB3ID0gTWF0aC5mbG9vcigxMi9jb3VudCk7XG5cdFx0XHRcdGNvbnN0IGlubmVyQmxvY2tzID0gW107XG5cdFx0XHRcdGNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcblx0XHRcdFx0XHRjb25zdCBibG9jayA9IGNyZWF0ZUJsb2NrKCdnZWNrby9ncmlkLWxheW91dC1iYXNpYycsIHt3Ond9LCBjb2x1bW4uaW5uZXJCbG9ja3MpO1xuXHRcdFx0XHRcdGlubmVyQmxvY2tzLnB1c2goYmxvY2spXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQmxvY2soJ2dlY2tvL2dyaWQtbGF5b3V0Jywge30sIGlubmVyQmxvY2tzKTtcblx0XHRcdH0sXG5cdFx0fSwgXVxuXHR9LFxuXG5cdHN0eWxlczogW1xuXHRcdHsgbmFtZTogJ2RlZmF1bHQnLCBsYWJlbDogX18oICdEZWZhdWx0JyksIGlzRGVmYXVsdDogdHJ1ZSB9LFxuXHRcdHsgbmFtZTogJ25vLWdhcCcsIGxhYmVsOiBfXyggJ05vIEdhcCcpIH0sXG5cdF0sXG5cblx0ZWRpdCggeyBpbnNlcnRCbG9ja3NBZnRlciwgY2xpZW50SWQgfSApIHtcblx0XHQvLyBHZXQgdGhlIGJsb2NrIHNvIHdlIGNhbiBzZWUgaWYgaXQgaGFkIGlubmVyYmxvY2tzXG5cdFx0Y29uc3QgYmxvY2sgPSBzZWxlY3QoJ2NvcmUvZWRpdG9yJykuZ2V0QmxvY2tzQnlDbGllbnRJZChjbGllbnRJZClbMF07XG5cdFx0Y29uc3QgaGFzSW5uZXJCbG9ja3MgPSAoYmxvY2sgJiYgYmxvY2suaW5uZXJCbG9ja3MpID8gYmxvY2suaW5uZXJCbG9ja3MubGVuZ3RoID4gMCA6IGZhbHNlO1xuXHRcdFxuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtZWRpdG9yXCI+XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0dHlwZW9mIGluc2VydEJsb2Nrc0FmdGVyID09PSAnZnVuY3Rpb24nID9cblx0XHRcdFx0XHRcdDxUZW1wbGF0ZVBpY2tlciBoYXNJbm5uZXJCbG9ja3M9e2hhc0lubmVyQmxvY2tzfSBhbGxvd2VkQmxvY2tzPXsgQUxMT1dFRF9CTE9DS1MgfT48L1RlbXBsYXRlUGlja2VyPiA6XG5cdFx0XHRcdFx0XHQ8cD57X18oJ1ByZXZpZXcgTm90IEF2YWlsYWJsZScpfTwvcD5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9LFxuXG5cdHNhdmUoKSB7XG5cdFx0Ly8gSG9uZXN0bHkgSSBkb24ndCB3YW50IHRvIGRvIHRoaXMgYnV0IGNvbnZlbnRpb25zIGFyZSBjb252ZW50aW9ucy5cblx0XHRyZXR1cm4oPGRpdj48SW5uZXJCbG9ja3MuQ29udGVudCAvPjwvZGl2Pik7IFxuXHR9LFxufTtcbiIsIi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQge3JlZ2lzdGVyQmxvY2tUeXBlfSBmcm9tICdAd29yZHByZXNzL2Jsb2Nrcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAqIGFzIGdyaWQgZnJvbSAnLi9ncmlkLWxheW91dCc7XG5pbXBvcnQgKiBhcyBncmlkSXRlbSBmcm9tICcuL2dyaWQtbGF5b3V0LWl0ZW0nO1xuaW1wb3J0ICogYXMgZ3JpZEl0ZW1JbWFnZSBmcm9tICcuL2dyaWQtbGF5b3V0LWltYWdlJztcbmltcG9ydCAqIGFzIGdyaWRJdGVtQmFzaWMgZnJvbSAnLi9ncmlkLWxheW91dC1iYXNpYyc7XG5cbnJlZ2lzdGVyQmxvY2tUeXBlKGdyaWQubmFtZSwgZ3JpZC5zZXR0aW5ncyk7XG5yZWdpc3RlckJsb2NrVHlwZShncmlkSXRlbUJhc2ljLm5hbWUsIGdyaWRJdGVtQmFzaWMuc2V0dGluZ3MpO1xucmVnaXN0ZXJCbG9ja1R5cGUoZ3JpZEl0ZW1JbWFnZS5uYW1lLCBncmlkSXRlbUltYWdlLnNldHRpbmdzKTtcbnJlZ2lzdGVyQmxvY2tUeXBlKGdyaWRJdGVtLm5hbWUsIGdyaWRJdGVtLnNldHRpbmdzKTtcblxuLyoqXG4gKiBUaGlzIG1ha2Ugc3VyZSB0aGUgZ3JpZCB3b3JrcyBpbiB0aGUgZWRpdG9yLlxuICovXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdC8vIENyZWF0ZSB0aGUgb2JzZXJ2ZXJcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0bXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG5cdFx0XHQvLyBPbiBzdHlsZSBtdXRhdGlvbiB1cGRhdGUgYmxvY2tzIHN0eWxlcy5cblx0XHRcdGNvbnN0IGJsb2NrID0gbXV0YXRpb24udGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXR5cGVePVwiZ2Vja28vZ3JpZC1sYXlvdXQtXCJdJyk7XG5cdFx0XHRpZighYmxvY2spIHJldHVybjtcblx0XHRcdGNvbnN0IHN0eWxlcyA9IG11dGF0aW9uLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cdFx0XHRibG9jay5zdHlsZSA9IHN0eWxlcztcblx0XHR9KTtcblx0fSk7XG5cblx0Ly8gQWRkIHN0eWxlIGVsZW1lbnRzIHRvIHRoZSBvYnNlcnZlclxuXHRjb25zdCBhZGRTdHlsZUVsZW1lbnRzVG9PYnNlcnZlciA9ICgpID0+IHtcblx0XHRjb25zdCBzdHlsZUVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdlY2tvLWdyaWQtbGF5b3V0LWVkaXRvci1zdHlsZXMnKTtcblx0XHRpZiAoIXN0eWxlRWxlbWVudHMubGVuZ3RoID4gMCkgcmV0dXJuO1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBzdHlsZUVsZW1lbnRzKSB7XG5cdFx0XHRvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHtcblx0XHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbJ3N0eWxlJ11cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8vIEFkZCB0aGUgc3R5bGVzIHRvIGdyaWQgbGF5b3V0IGl0ZW1zIGZvciBlZGl0b3IuXG5cdGZ1bmN0aW9uIGFwcGx5QWxsR3JpZEl0ZW1TdHlsZXMoKSB7XG5cdFx0Y29uc3QgYmxvY2tzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdHlwZV49XCJnZWNrby9ncmlkLWxheW91dC1cIl0nKTtcblx0XHRpZighYmxvY2tzLmxlbmd0aCA+IDApIHJldHVybjtcblx0XHRmb3IgKGNvbnN0IGJsb2NrIG9mIGJsb2Nrcykge1xuXHRcdFx0YXBwbHlHcmlkSXRlbVN0eWxlKGJsb2NrKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBseUdyaWRJdGVtU3R5bGUoYmxvY2spe1xuXHRcdC8vIGlmICh0eXBlb2YgYmxvY2sucXVlcnlTZWxlY3RvciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuXHRcdGNvbnN0IHN0eWxlcyA9IGJsb2NrLnF1ZXJ5U2VsZWN0b3IoJy5nZWNrby1ncmlkLWxheW91dC1lZGl0b3Itc3R5bGVzJykuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXHRcdGJsb2NrLnN0eWxlID0gc3R5bGVzO1xuXHR9XG5cblx0Ly8gQWRkIHRoZSBzdHlsZXMgdG8gZ3JpZCBsYXlvdXQgaXRlbXMgZm9yIGVkaXRvci5cblx0ZnVuY3Rpb24gbmV3R3JpZEluc2VydGVkKGUpIHtcblx0XHRpZiAodHlwZW9mIGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICdmdW5jdGlvbicpIHJldHVybjtcblx0XHRjb25zdCBibG9ja3MgPSBlLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS10eXBlXj1cImdlY2tvL2dyaWQtbGF5b3V0LVwiXScpO1xuXHRcdGlmICghYmxvY2tzLmxlbmd0aCA+IDApIHJldHVybjtcblx0XHQvLyBjb25zb2xlLmxvZygnbm9kZSBhZGRlZCcsIGUpO1xuXHRcdGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzKSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnc3R5bGUnLCBibG9jayk7XG5cdFx0XHRhcHBseUdyaWRJdGVtU3R5bGUoYmxvY2spO1xuXHRcdH1cblx0fVxuXHRcblx0Y29uc3QgbmV3QmxvY2tPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblx0XHRtdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcblx0XHRcdGlmICghbXV0YXRpb24uYWRkZWROb2RlcykgcmV0dXJuXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Ly8gZG8gdGhpbmdzIHRvIHlvdXIgbmV3bHkgYWRkZWQgbm9kZXMgaGVyZVxuXHRcdFx0XHR2YXIgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbaV1cblx0XHRcdFx0aWYgKHR5cGVvZiBub2RlLm1hdGNoZXMgIT09ICdmdW5jdGlvbicpIHJldHVybjtcblx0XHRcdFx0aWYgKCFub2RlLm1hdGNoZXMoJ1tkYXRhLXR5cGVePVwiZ2Vja28vZ3JpZC1sYXlvdXQtXCJdJykpIHJldHVybjtcblx0XHRcdFx0cmV0dXJuIGFwcGx5R3JpZEl0ZW1TdHlsZShub2RlKTtcblx0XHRcdH1cblx0XHR9KVxuXHR9KVxuXG5cdG5ld0Jsb2NrT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7XG5cdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0YXR0cmlidXRlczogZmFsc2UsXG5cdFx0Y2hhcmFjdGVyRGF0YTogZmFsc2Vcblx0fSk7XG5cdFxuXHRhcHBseUFsbEdyaWRJdGVtU3R5bGVzKCk7XG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Ob2RlSW5zZXJ0ZWRcIiwgbmV3R3JpZEluc2VydGVkKTtcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTU5vZGVJbnNlcnRlZFwiLCBhZGRTdHlsZUVsZW1lbnRzVG9PYnNlcnZlcik7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5cbi8vIGltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJldmlldyBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7bGF5b3V0fSA9IHRoaXMucHJvcHM7XG5cdFx0cmV0dXJuKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1wcmV2aWV3XCI+XG5cdFx0XHRcdHtsYXlvdXQubWFwKChibG9jayxrZXkpPT57XG5cdFx0XHRcdFx0Y29uc3Qgc3R5bGVzID0ge1xuXHRcdFx0XHRcdFx0Z3JpZENvbHVtbkVuZDogJ3NwYW4gJyArIGJsb2NrWzFdLncsXG5cdFx0XHRcdFx0XHRncmlkUm93RW5kOiAnc3BhbiAnICsgYmxvY2tbMV0uaCxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdHJldHVybig8ZGl2IGtleT17a2V5fSBjbGFzc05hbWU9XCJnZWNrby1ncmlkLWxheW91dC10ZW1wbGF0ZS1wcmV2aWV3X19pdGVtXCIgc3R5bGU9e3N0eWxlc30+PC9kaXY+KTtcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgX18gfSBmcm9tICdAd29yZHByZXNzL2kxOG4nO1xuaW1wb3J0IHsgSW5uZXJCbG9ja3MgfSBmcm9tICdAd29yZHByZXNzL2VkaXRvcic7XG5pbXBvcnQgdGVtcGxhdGVzIGZyb20gJy4vdGVtcGxhdGVzJzsgLy8gQ3VzdG9tIFRlbXBsYXRlcyB0byBjaG9vc2UgZnJvbS5cbmltcG9ydCBQcmV2aWV3IGZyb20gJy4vdGVtcGxhdGUtcHJldmlldyc7IC8vIEN1c3RvbSBUZW1wbGF0ZXMgdG8gY2hvb3NlIGZyb20uXG5cbi8vIGltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnQHdvcmRwcmVzcy9lbGVtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVTZWxlY3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXHRjb25zdHJ1Y3Rvcihwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0c2VsZWN0ZWQ6IG51bGwsXG5cdFx0fVxuXHR9XG5cdHNldFRlbXBsYXRlID0gKHRlbXBsYXRlKSA9PiB7XG5cdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRzZWxlY3RlZDogdGVtcGxhdGUsXG5cdFx0fSlcblx0fVxuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7aGFzSW5ubmVyQmxvY2tzLCBhbGxvd2VkQmxvY2tzfSA9IHRoaXMucHJvcHM7XG5cdFx0Y29uc3Qge3NlbGVjdGVkfSA9IHRoaXMuc3RhdGU7XG5cdFx0Y29uc3QgYmxhbmtUZW1wbGF0ZSA9IFtbJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdHc6IDZcblx0XHRcdFx0fV1dO1xuXHRcdGlmICghaGFzSW5ubmVyQmxvY2tzICYmICFzZWxlY3RlZCkge1xuXHRcdFx0cmV0dXJuKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdFwiPlxuXHRcdFx0XHRcdDxoMj57X18oJ0Nob29zZSBhIFRlbXBsYXRlJyl9PC9oMj5cblx0XHRcdFx0XHQ8cD57X18oJ1RoaXMgaXMgYSBzdGFydGluZyBwb2ludC4gVGVtcGxhdGVzIG1ha2UgaXQgZWFzeSB0byBjaG9vc2UgYSBsYXlvdXQuIEJsb2NrcyBjYW4gYmUgY2hhbmdlZCBvbmNlIHRoZXkgYXJlIHNlbGVjdGVkLicpfTwvcD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGVzXCI+XG5cdFx0XHRcdFx0XHR7dGVtcGxhdGVzKCkubWFwKCh0ZW1wbGF0ZSwga2V5KT0+e1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4oXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBrZXk9e2tleX0gY2xhc3NOYW1lPVwiZ2Vja28tZ3JpZC1sYXlvdXQtdGVtcGxhdGUtc2VsZWN0X190ZW1wbGF0ZVwiIG9uQ2xpY2s9eygpPT50aGlzLnNldFRlbXBsYXRlKHRlbXBsYXRlLmxheW91dCl9PlxuXHRcdFx0XHRcdFx0XHRcdFx0PFByZXZpZXcgbGF5b3V0PXt0ZW1wbGF0ZS5sYXlvdXR9IC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8cD57dGVtcGxhdGUubGFiZWx9PC9wPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdlY2tvLWdyaWQtbGF5b3V0LXRlbXBsYXRlLXNlbGVjdF9fdGVtcGxhdGVcIiBvbkNsaWNrPXsoKT0+dGhpcy5zZXRUZW1wbGF0ZShibGFua1RlbXBsYXRlKX0+PFByZXZpZXcgbGF5b3V0PXtibGFua1RlbXBsYXRlfSAvPjxwPntfXygnQ3JlYXRlIE5ldycpfTwvcD48L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpXG5cdFx0fVxuXHRcdHJldHVybihcblx0XHRcdDxJbm5lckJsb2Nrc1xuXHRcdFx0XHR0ZW1wbGF0ZT17c2VsZWN0ZWR9XG5cdFx0XHRcdHRlbXBsYXRlTG9jaz17ZmFsc2V9XG5cdFx0XHRcdGFsbG93ZWRCbG9ja3M9e2FsbG93ZWRCbG9ja3N9XG5cdFx0XHQvPlxuXHRcdClcblx0fVxufSIsIi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQge2FwcGx5RmlsdGVyc30gZnJvbSAnQHdvcmRwcmVzcy9ob29rcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUZW1wbGF0ZXMoKSB7XG5cdGNvbnN0IHRlbXBsYXRlcyA9IFt7XG5cdFx0XHRsYWJlbDogX18oJzIgQ29sdW1ucycpLFxuXHRcdFx0bGF5b3V0OiBbXG5cdFx0XHRcdFsnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0dzogNlxuXHRcdFx0XHR9XSxcblx0XHRcdFx0WydnZWNrby9ncmlkLWxheW91dC1iYXNpYycsIHtcblx0XHRcdFx0XHR3OiA2XG5cdFx0XHRcdH1dLFxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IF9fKCczIENvbHVtbnMnKSxcblx0XHRcdGxheW91dDogW1xuXHRcdFx0XHRbJ2dlY2tvL2dyaWQtbGF5b3V0LWJhc2ljJywge1xuXHRcdFx0XHRcdHc6IDRcblx0XHRcdFx0fV0sXG5cdFx0XHRcdFsnZ2Vja28vZ3JpZC1sYXlvdXQtYmFzaWMnLCB7XG5cdFx0XHRcdFx0dzogNFxuXHRcdFx0XHR9XSxcblx0XHRcdFx0WydnZWNrby9ncmlkLWxheW91dC1iYXNpYycsIHtcblx0XHRcdFx0XHR3OiA0XG5cdFx0XHRcdH1dLFxuXHRcdFx0XVxuXHRcdH0sXG5cdF07XG5cdHJldHVybiBhcHBseUZpbHRlcnMoJ2dlY2tvLmdyaWQtbGF5b3V0LnRlbXBsYXRlcycsIHRlbXBsYXRlcyk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy53cC5ibG9ja3M7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuY29tcG9uZW50czsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy53cC5kYXRhOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LndwLmRlcHJlY2F0ZWQ7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuZWRpdG9yOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LndwLmVsZW1lbnQ7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuaG9va3M7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cud3AuaTE4bjsiLCJtb2R1bGUuZXhwb3J0cyA9IFJlYWN0OyJdLCJzb3VyY2VSb290IjoiIn0=
     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=39)}([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.blocks},function(e,t){e.exports=window.wp.element},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(22),a=n(13);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(23);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){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){var r=n(25),a="object"==typeof self&&self&&self.Object===Object&&self,o=r||a||Function("return this")();e.exports=o},function(e,t,n){var r=n(15).Symbol;e.exports=r},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(U,q,D){var G;!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(S[e])e=S[e],n=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};if(t=F.rgb.exec(e))return{r:t[1],g:t[2],b:t[3]};if(t=F.rgba.exec(e))return{r:t[1],g:t[2],b:t[3],a:t[4]};if(t=F.hsl.exec(e))return{h:t[1],s:t[2],l:t[3]};if(t=F.hsla.exec(e))return{h:t[1],s:t[2],l:t[3],a:t[4]};if(t=F.hsv.exec(e))return{h:t[1],s:t[2],v:t[3]};if(t=F.hsva.exec(e))return{h:t[1],s:t[2],v:t[3],a:t[4]};if(t=F.hex8.exec(e))return{r:L(t[1]),g:L(t[2]),b:L(t[3]),a:N(t[4]),format:n?"name":"hex8"};if(t=F.hex6.exec(e))return{r:L(t[1]),g:L(t[2]),b:L(t[3]),format:n?"name":"hex"};if(t=F.hex4.exec(e))return{r:L(t[1]+""+t[1]),g:L(t[2]+""+t[2]),b:L(t[3]+""+t[3]),a:N(t[4]+""+t[4]),format:n?"name":"hex8"};if(t=F.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&&(z(e.r)&&z(e.g)&&z(e.b)?(c=e.r,s=e.g,u=e.b,t={r:255*A(c,255),g:255*A(s,255),b:255*A(u,255)},i=!0,l="%"===String(e.r).substr(-1)?"prgb":"rgb"):z(e.h)&&z(e.s)&&z(e.v)?(r=R(e.s),a=R(e.v),t=function(e,t,n){e=6*A(e,360),t=A(t,100),n=A(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"):z(e.h)&&z(e.s)&&z(e.l)&&(r=R(e.s),o=R(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=A(e,360),t=A(t,100),n=A(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=j(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=A(e,255),t=A(t,255),n=A(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=A(e,255),t=A(t,255),n=A(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=[M(i(e).toString(16)),M(i(t).toString(16)),M(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[M(H(r)),M(i(e).toString(16)),M(i(t).toString(16)),M(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 x(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 E(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=j(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=[M(i(e).toString(16)),M(i(t).toString(16)),M(i(n).toString(16)),M(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*A(this._r,255))+"%",g:i(100*A(this._g,255))+"%",b:i(100*A(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+i(100*A(this._r,255))+"%, "+i(100*A(this._g,255))+"%, "+i(100*A(this._b,255))+"%)":"rgba("+i(100*A(this._r,255))+"%, "+i(100*A(this._g,255))+"%, "+i(100*A(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(E,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(C,arguments)},splitcomplement:function(){return this._applyCombination(x,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]:R(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 S=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}(S);function j(e){return e=parseFloat(e),(isNaN(e)||e<0||1<e)&&(e=1),e}function A(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 M(e){return 1==e.length?"0"+e:""+e}function R(e){return e<=1&&(e=100*e+"%"),e}function H(e){return f.round(255*parseFloat(e)).toString(16)}function N(e){return L(e)/255}var I,P,T,F=(P="[\\s|\\(]+("+(I="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+I+")[,|\\s]+("+I+")\\s*\\)?",T="[\\s|\\(]+("+I+")[,|\\s]+("+I+")[,|\\s]+("+I+")[,|\\s]+("+I+")\\s*\\)?",{CSS_UNIT:new RegExp(I),rgb:new RegExp("rgb"+P),rgba:new RegExp("rgba"+T),hsl:new RegExp("hsl"+P),hsla:new RegExp("hsla"+T),hsv:new RegExp("hsv"+P),hsva:new RegExp("hsva"+T),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 z(e){return!!F.CSS_UNIT.exec(e)}U.exports?U.exports=u:void 0===(G=function(){return u}.call(q,D,q,U))||(U.exports=G)}(Math)},function(e,t){e.exports=window.wp.deprecated},function(e,t,n){var y=n(14),v=n(24),_=n(27),k=Math.max,w=Math.min;e.exports=function(r,a,e){var o,i,l,c,s,u,f=0,g=!1,d=!1,t=!0;if("function"!=typeof r)throw new TypeError("Expected a function");function h(e){var t=o,n=i;return o=i=void 0,f=e,c=r.apply(n,t)}function m(e){var t=e-u;return void 0===u||a<=t||t<0||d&&l<=e-f}function b(){var e,t,n=v();if(m(n))return p(n);s=setTimeout(b,(t=a-((e=n)-u),d?w(t,l-(e-f)):t))}function p(e){return s=void 0,t&&o?h(e):(o=i=void 0,c)}function n(){var e,t=v(),n=m(t);if(o=arguments,i=this,u=t,n){if(void 0===s)return f=e=u,s=setTimeout(b,a),g?h(e):c;if(d)return s=setTimeout(b,a),h(u)}return void 0===s&&(s=setTimeout(b,a)),c}return a=_(a)||0,y(e)&&(g=!!e.leading,l=(d="maxWait"in e)?k(_(e.maxWait)||0,a):l,t="trailing"in e?!!e.trailing:t),n.cancel=function(){void 0!==s&&clearTimeout(s),o=u=i=s=void(f=0)},n.flush=function(){return void 0===s?c:p(v())},n}},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){var r=n(15);e.exports=function(){return r.Date.now()}},function(n,e,t){(function(e){var t="object"==typeof e&&e&&e.Object===Object&&e;n.exports=t}).call(this,t(26))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var r=n(14),a=n(28),o=/^\s+|\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,c=/^0o[0-7]+$/i,s=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var n=l.test(e);return n||c.test(e)?s(e.slice(2),n?2:8):i.test(e)?NaN:+e}},function(e,t,n){var r=n(29),a=n(32);e.exports=function(e){return"symbol"==typeof e||a(e)&&"[object Symbol]"==r(e)}},function(e,t,n){var r=n(16),a=n(30),o=n(31),i=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?a(e):o(e)}},function(e,t,n){var r=n(16),a=Object.prototype,o=a.hasOwnProperty,i=a.toString,l=r?r.toStringTag:void 0;e.exports=function(e){var t=o.call(e,l),n=e[l];try{var r=!(e[l]=void 0)}catch(e){}var a=i.call(e);return r&&(t?e[l]=n:delete e[l]),a}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},,,,,,,function(e,t,n){"use strict";n.r(t);var u=n(4),b=n(5),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(13),h=n.n(d),m=n(11),w=n.n(m),x=n(17),E=n.n(x),C=n(18);var S=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)),E()(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(S,{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(S,{layout:i}),p.a.createElement("p",null,Object(y.__)("Create New")))))}}]),n}(p.a.Component),j=["gecko/grid-layout-item","gecko/grid-layout-image","gecko/grid-layout-basic"],A={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:j}):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(19),L=n.n(B),M=n(20),R=n.n(M),H={title:Object(y.__)("Item (deprecated)"),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.__)("This block is deprecated. Please use basic or image block instead."),category:"common",supports:{inserter:!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"}},deprecated:[{migrate:function(e,t){var n=e.h,r=e.w,a=e.bgMedia,o=e.bgMediaUrl,i=e.minHeight;return a?Object(u.createBlock)("gecko/grid-layout-image",{h:n,w:r,imgId:a,imgUrl:o,minHeight:i},t):Object(u.createBlock)("gecko/grid-layout-basic",{h:n,w:r},t)},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;R()("Grid Layout Idem",{alternative:"Basic or Image",plugin:"Gecko Grid Layout"});var 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))}},N=n(21),I=n.n(N),P=["core/paragraph","core/heading","core/button","core/list","core/quote"],T={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,c=e.setAttributes,n=(e.className,e.insertBlocksAfter),o=e.toggleSelection,r=t.h,s=t.w,a=t.imgId,i=t.imgUrl,l=t.minHeight,u={gridColumnEnd:"span "+s,gridRowEnd:"span "+r,minHeight:l+"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:l,onChange:function(e){c({minHeight:e})},min:"50",max:"600",step:"1"}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Width"),value:s,onChange:function(e){c({w:e})},min:1,max:12}),p.a.createElement(v.RangeControl,{label:Object(y.__)("Span Rows"),value:r,onChange:function(e){c({h:e})},min:1,max:12}))),p.a.createElement(_.BlockControls,null,p.a.createElement(v.Toolbar,null,p.a.createElement(_.MediaUpload,{onSelect:function(e){c({imgId:e.id,imgUrl:e.url})},type:["image"],value:a||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:u}),p.a.createElement(v.ResizableBox,{size:{width:"",height:"100%"},className:"wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-image ".concat(t.className),enable:{top:!1,right:!0,bottom:!0,left:!1},onResizeStart:function(e,t,n,r){o(!1)},onResize:I()(function(e,t,n,r){if("bottom"===t){var a=600<n.clientHeight?600:n.clientHeight;c({minHeight:a}),n.style.height="100%"}if("right"===t){var o=Math.floor(n.parentNode.offsetWidth/s),i=(Math.floor(n.parentNode.offsetWidth/o),Math.floor(n.clientWidth/s),Math.floor(n.clientWidth/o)),l=(Math.floor(parseInt(r.width,10)/o),i);12<l&&(l=12),l<1&&(l=1),c({w:l}),n.style.width="100%"}},250),onResizeStop:function(e,t,n,r){if(n.style.width="100%","bottom"===t){var a=600<n.clientHeight?600:n.clientHeight;c({minHeight:a}),o(!0)}}},!a&&p.a.createElement(_.MediaPlaceholder,{onSelect:function(e){c({imgId:e.id,imgUrl:e.url})},allowedTypes:["image"],accept:"image/*"}),i&&p.a.createElement("img",{className:"gecko-grid-layout-image__image",src:i}),a&&p.a.createElement("figcaption",{className:"gecko-grid-layout-image__caption"},"function"==typeof n?p.a.createElement(_.InnerBlocks,{templateLock:!1,allowedBlocks:P}):p.a.createElement("p",null,"Lorem Ipsum"))))},save:function(){return p.a.createElement("div",null,p.a.createElement(_.InnerBlocks.Content,null))}},F={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},alignContent:{type:"string",default:"top"}},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=t.alignContent,l={gridColumnEnd:"span "+o,gridRowEnd:"span "+a,alignSelf:"center"===i?"center":"start"};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(_.BlockControls,null,p.a.createElement(v.Toolbar,{controls:[{icon:"arrow-up-alt",title:Object(y.__)("Align Top"),isActive:"top"===i,onClick:function(){return n({alignContent:"top"})}},{icon:"align-center",title:Object(y.__)("Align Center"),isActive:"center"===i,onClick:function(){return n({alignContent:"center"})}},{icon:"arrow-down-alt",title:Object(y.__)("Align Bottom"),isActive:"bottom"===i,onClick:function(){return n({alignContent:"bottom"})}}]})),p.a.createElement("div",{className:"gecko-grid-layout-editor-styles",style:l}),p.a.createElement("div",{className:"wp-block-gecko-grid-layout-editor__wrap gecko-grid-layout-basic ".concat(t.className," align-content-").concat(t.alignContent)},"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",A),Object(u.registerBlockType)("gecko/grid-layout-basic",F),Object(u.registerBlockType)("gecko/grid-layout-image",T),Object(u.registerBlockType)("gecko/grid-layout-item",H),document.addEventListener("DOMContentLoaded",function(){var l=new MutationObserver(function(e){e.forEach(function(e){var t=e.target.closest('[data-type^="gecko/grid-layout-"]');if(t){var n=e.target.getAttribute("style");t.style=n}})});function c(e){var t=e.querySelector(".gecko-grid-layout-editor-styles").getAttribute("style");e.style=t}new MutationObserver(function(e){e.forEach(function(e){if(e.addedNodes)for(var t=0;t<e.addedNodes.length;t++){var n=e.addedNodes[t];if("function"!=typeof n.matches)return;if(!n.matches('[data-type^="gecko/grid-layout-"]'))return;return c(n)}})}).observe(document.body,{childList:!0,subtree:!0,attributes:!1,characterData:!1}),function(){var e=document.querySelectorAll('[data-type^="gecko/grid-layout-"]');if(!(0<!e.length)){var t=!0,n=!1,r=void 0;try{for(var a,o=e[Symbol.iterator]();!(t=(a=o.next()).done);t=!0)c(a.value)}catch(e){n=!0,r=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw r}}}}(),document.addEventListener("DOMNodeInserted",function(e){if("function"==typeof e.target.querySelectorAll){var t=e.target.querySelectorAll('[data-type^="gecko/grid-layout-"]');if(!(0<!t.length)){var n=!0,r=!1,a=void 0;try{for(var o,i=t[Symbol.iterator]();!(n=(o=i.next()).done);n=!0)c(o.value)}catch(e){r=!0,a=e}finally{try{n||null==i.return||i.return()}finally{if(r)throw a}}}}}),document.addEventListener("DOMNodeInserted",function(){var e=document.querySelectorAll(".gecko-grid-layout-editor-styles");if(!(0<!e.length)){var t=!0,n=!1,r=void 0;try{for(var a,o=e[Symbol.iterator]();!(t=(a=o.next()).done);t=!0){var i=a.value;l.observe(i,{attributes:!0,attributeFilter:["style"]})}}catch(e){n=!0,r=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw r}}}})})}]);
  • gecko-grid-layout/trunk/dist/public.bundle.js

    r2085474 r2085543  
    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 /***/ "./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js":
    90 /*!******************************************************************!*\
    91   !*** ./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***!
    92   \******************************************************************/
    93 /*! no static exports found */
    94 /***/ (function(module, exports) {
    95 
    96 function _arrayWithoutHoles(arr) {
    97   if (Array.isArray(arr)) {
    98     for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
    99       arr2[i] = arr[i];
    100     }
    101 
    102     return arr2;
    103   }
    104 }
    105 
    106 module.exports = _arrayWithoutHoles;
    107 
    108 /***/ }),
    109 
    110 /***/ "./node_modules/@babel/runtime/helpers/iterableToArray.js":
    111 /*!****************************************************************!*\
    112   !*** ./node_modules/@babel/runtime/helpers/iterableToArray.js ***!
    113   \****************************************************************/
    114 /*! no static exports found */
    115 /***/ (function(module, exports) {
    116 
    117 function _iterableToArray(iter) {
    118   if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
    119 }
    120 
    121 module.exports = _iterableToArray;
    122 
    123 /***/ }),
    124 
    125 /***/ "./node_modules/@babel/runtime/helpers/nonIterableSpread.js":
    126 /*!******************************************************************!*\
    127   !*** ./node_modules/@babel/runtime/helpers/nonIterableSpread.js ***!
    128   \******************************************************************/
    129 /*! no static exports found */
    130 /***/ (function(module, exports) {
    131 
    132 function _nonIterableSpread() {
    133   throw new TypeError("Invalid attempt to spread non-iterable instance");
    134 }
    135 
    136 module.exports = _nonIterableSpread;
    137 
    138 /***/ }),
    139 
    140 /***/ "./node_modules/@babel/runtime/helpers/toConsumableArray.js":
    141 /*!******************************************************************!*\
    142   !*** ./node_modules/@babel/runtime/helpers/toConsumableArray.js ***!
    143   \******************************************************************/
    144 /*! no static exports found */
    145 /***/ (function(module, exports, __webpack_require__) {
    146 
    147 var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles */ "./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js");
    148 
    149 var iterableToArray = __webpack_require__(/*! ./iterableToArray */ "./node_modules/@babel/runtime/helpers/iterableToArray.js");
    150 
    151 var nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread */ "./node_modules/@babel/runtime/helpers/nonIterableSpread.js");
    152 
    153 function _toConsumableArray(arr) {
    154   return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();
    155 }
    156 
    157 module.exports = _toConsumableArray;
    158 
    159 /***/ }),
    160 
    161 /***/ "./src/public.js":
    162 /*!***********************!*\
    163   !*** ./src/public.js ***!
    164   \***********************/
    165 /*! no exports provided */
    166 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    167 
    168 "use strict";
    169 __webpack_require__.r(__webpack_exports__);
    170 /* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "./node_modules/@babel/runtime/helpers/toConsumableArray.js");
    171 /* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);
    172 
    173 
    174 /**
    175  * If object fit is not supported then use as background image
    176  */
    177 document.addEventListener("DOMContentLoaded", function () {
    178   var ua = window.navigator.userAgent;
    179   var msie = ua.indexOf("MSIE ");
    180 
    181   if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
    182     var layouts = document.querySelectorAll('.wp-block-gecko-grid-layout');
    183 
    184     _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(layouts).forEach(function (layout) {
    185       layout.className += " wp-block-gecko-grid-layout--ie";
    186       var items = layout.querySelectorAll('.wp-block-gecko-grid-layout__item');
    187       var column = 1;
    188       var row = 1;
    189 
    190       _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(items).forEach(function (item) {
    191         var styles = window.getComputedStyle(item);
    192         item.style['-ms-grid-column'] = column;
    193         item.style['-ms-grid-row'] = row;
    194         column = column + parseInt(styles.getPropertyValue('-ms-grid-column-span'));
    195 
    196         if (column > 12) {
    197           column = 1;
    198           row = row + 1;
    199         }
    200       });
    201     });
    202 
    203     var images = document.querySelectorAll('.gecko-grid-layout-image__image');
    204 
    205     _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(images).forEach(function (image) {
    206       var src = image.getAttribute('data-src');
    207       image.offsetParent.style.backgroundImage = "url(".concat(src, ")");
    208       image.offsetParent.style.backgroundPosition = 'center';
    209       image.offsetParent.style.backgroundSize = 'cover';
    210       image.style.display = 'none';
    211     });
    212   }
    213 
    214   ;
    215 });
    216 /**
    217  * Lazy load images.
    218  */
    219 
    220 document.addEventListener("DOMContentLoaded", function () {
    221   var lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));
    222   var active = false;
    223 
    224   var lazyLoad = function lazyLoad() {
    225     if (active === false) {
    226       active = true;
    227       setTimeout(function () {
    228         lazyImages.forEach(function (lazyImage) {
    229           if (lazyImage.getBoundingClientRect().top <= window.innerHeight && lazyImage.getBoundingClientRect().bottom >= 0 && getComputedStyle(lazyImage).display !== "none") {
    230             lazyImage.src = lazyImage.dataset.src;
    231             lazyImage.srcset = lazyImage.dataset.srcset;
    232             lazyImage.classList.remove("lazy");
    233             lazyImages = lazyImages.filter(function (image) {
    234               return image !== lazyImage;
    235             });
    236 
    237             if (lazyImages.length === 0) {
    238               document.removeEventListener("scroll", lazyLoad);
    239               window.removeEventListener("resize", lazyLoad);
    240               window.removeEventListener("orientationchange", lazyLoad);
    241             }
    242           }
    243         });
    244         active = false;
    245       }, 200);
    246     }
    247   };
    248 
    249   document.addEventListener("scroll", lazyLoad);
    250   window.addEventListener("DOMContentLoaded", lazyLoad);
    251   window.addEventListener("resize", lazyLoad);
    252   window.addEventListener("orientationchange", lazyLoad);
    253 });
    254 
    255 /***/ })
    256 
    257 /******/ });
    258 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovLy8uL3NyYy9wdWJsaWMuanMiXSwibmFtZXMiOlsiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwidWEiLCJ3aW5kb3ciLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJtc2llIiwiaW5kZXhPZiIsIm1hdGNoIiwibGF5b3V0cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwibGF5b3V0IiwiY2xhc3NOYW1lIiwiaXRlbXMiLCJjb2x1bW4iLCJyb3ciLCJpdGVtIiwic3R5bGVzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlIiwicGFyc2VJbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiaW1hZ2VzIiwiaW1hZ2UiLCJzcmMiLCJnZXRBdHRyaWJ1dGUiLCJvZmZzZXRQYXJlbnQiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImRpc3BsYXkiLCJsYXp5SW1hZ2VzIiwic2xpY2UiLCJjYWxsIiwiYWN0aXZlIiwibGF6eUxvYWQiLCJzZXRUaW1lb3V0IiwibGF6eUltYWdlIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidG9wIiwiaW5uZXJIZWlnaHQiLCJib3R0b20iLCJkYXRhc2V0Iiwic3Jjc2V0IiwiY2xhc3NM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Q0FBQ2IsR0FBVixHQUFnQmEsU0FBUyxDQUFDSyxPQUFWLENBQWtCbEIsR0FBbEM7QUFDQWEscUJBQVMsQ0FBQ00sTUFBVixHQUFtQk4sU0FBUyxDQUFDSyxPQUFWLENBQWtCQyxNQUFyQztBQUNBTixxQkFBUyxDQUFDTyxTQUFWLENBQW9CQyxNQUFwQixDQUEyQixNQUEzQjtBQUVBZCxzQkFBVSxHQUFHQSxVQUFVLENBQUNlLE1BQVgsQ0FBa0IsVUFBVXZCLEtBQVYsRUFBaUI7QUFDL0MscUJBQU9BLEtBQUssS0FBS2MsU0FBakI7QUFDQSxhQUZZLENBQWI7O0FBSUEsZ0JBQUlOLFVBQVUsQ0FBQ2dCLE1BQVgsS0FBc0IsQ0FBMUIsRUFBNkI7QUFDNUJoRCxzQkFBUSxDQUFDaUQsbUJBQVQsQ0FBNkIsUUFBN0IsRUFBdUNiLFFBQXZDO0FBQ0FqQyxvQkFBTSxDQUFDOEMsbUJBQVAsQ0FBMkIsUUFBM0IsRUFBcUNiLFFBQXJDO0FBQ0FqQyxvQkFBTSxDQUFDOEMsbUJBQVAsQ0FBMkIsbUJBQTNCLEVBQWdEYixRQUFoRDtBQUNBO0FBQ0Q7QUFDRCxTQWhCRDtBQWtCQUQsY0FBTSxHQUFHLEtBQVQ7QUFDQSxPQXBCUyxFQW9CUCxHQXBCTyxDQUFWO0FBcUJBO0FBQ0QsR0ExQkQ7O0FBNEJBbkMsVUFBUSxDQUFDQyxnQkFBVCxDQUEwQixRQUExQixFQUFvQ21DLFFBQXBDO0FBQ0FqQyxRQUFNLENBQUNGLGdCQUFQLENBQXdCLGtCQUF4QixFQUE0Q21DLFFBQTVDO0FBQ0FqQyxRQUFNLENBQUNGLGdCQUFQLENBQXdCLFFBQXhCLEVBQWtDbUMsUUFBbEM7QUFDQWpDLFFBQU0sQ0FBQ0YsZ0JBQVAsQ0FBd0IsbUJBQXhCLEVBQTZDbUMsUUFBN0M7QUFDQSxDQXBDRCxFIiwiZmlsZSI6InB1YmxpYy5idW5kbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi93cC1jb250ZW50L3BsdWdpbnMvZ2Vja28tZ3JpZC1sYXlvdXQvZGlzdC9cIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvcHVibGljLmpzXCIpO1xuIiwiZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycjJbaV0gPSBhcnJbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQ7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkXCIpO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5OyIsIi8qKlxuICogSWYgb2JqZWN0IGZpdCBpcyBub3Qgc3VwcG9ydGVkIHRoZW4gdXNlIGFzIGJhY2tncm91bmQgaW1hZ2VcbiAqL1xuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuXHRjb25zdCB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuXHRjb25zdCBtc2llID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuXHRpZiAobXNpZSA+IDAgfHwgISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50LipydlxcOjExXFwuLykpIHtcblx0XHRjb25zdCBsYXlvdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0Jyk7XG5cdFx0Wy4uLmxheW91dHNdLmZvckVhY2gobGF5b3V0ID0+IHtcblx0XHRcdGxheW91dC5jbGFzc05hbWUgKz0gXCIgd3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQtLWllXCI7XG5cdFx0XHRjb25zdCBpdGVtcyA9IGxheW91dC5xdWVyeVNlbGVjdG9yQWxsKCcud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXRfX2l0ZW0nKTtcblx0XHRcdGxldCBjb2x1bW4gPSAxO1xuXHRcdFx0bGV0IHJvdyA9IDE7XG5cdFx0XHRbLi4uaXRlbXNdLmZvckVhY2goaXRlbSA9PiB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGl0ZW0pO1xuXHRcdFx0XHRpdGVtLnN0eWxlWyctbXMtZ3JpZC1jb2x1bW4nXSA9IGNvbHVtbjtcblx0XHRcdFx0aXRlbS5zdHlsZVsnLW1zLWdyaWQtcm93J10gPSByb3c7XG5cdFx0XHRcdGNvbHVtbiA9IGNvbHVtbiArIHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCctbXMtZ3JpZC1jb2x1bW4tc3BhbicpKTtcblx0XHRcdFx0aWYoY29sdW1uID4gMTIpe1xuXHRcdFx0XHRcdGNvbHVtbiA9IDE7XG5cdFx0XHRcdFx0cm93ID0gcm93ICsgMTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgaW1hZ2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdlY2tvLWdyaWQtbGF5b3V0LWltYWdlX19pbWFnZScpO1xuXHRcdFsuLi5pbWFnZXNdLmZvckVhY2goaW1hZ2UgPT4ge1xuXHRcdFx0Y29uc3Qgc3JjID0gaW1hZ2UuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpO1xuXHRcdFx0aW1hZ2Uub2Zmc2V0UGFyZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHtzcmN9KWA7XG5cdFx0XHRpbWFnZS5vZmZzZXRQYXJlbnQuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0gJ2NlbnRlcic7XG5cdFx0XHRpbWFnZS5vZmZzZXRQYXJlbnQuc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnY292ZXInO1xuXHRcdFx0aW1hZ2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHR9KTtcblx0fTtcbn0pO1xuLyoqXG4gKiBMYXp5IGxvYWQgaW1hZ2VzLlxuICovXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG5cdGxldCBsYXp5SW1hZ2VzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nLmxhenlcIikpO1xuXHRsZXQgYWN0aXZlID0gZmFsc2U7XG5cblx0Y29uc3QgbGF6eUxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKGFjdGl2ZSA9PT0gZmFsc2UpIHtcblx0XHRcdGFjdGl2ZSA9IHRydWU7XG5cblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRsYXp5SW1hZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxhenlJbWFnZSkge1xuXHRcdFx0XHRcdGlmICgobGF6eUltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA8PSB3aW5kb3cuaW5uZXJIZWlnaHQgJiYgbGF6eUltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSA+PSAwKSAmJiBnZXRDb21wdXRlZFN0eWxlKGxhenlJbWFnZSkuZGlzcGxheSAhPT0gXCJub25lXCIpIHtcblx0XHRcdFx0XHRcdGxhenlJbWFnZS5zcmMgPSBsYXp5SW1hZ2UuZGF0YXNldC5zcmM7XG5cdFx0XHRcdFx0XHRsYXp5SW1hZ2Uuc3Jjc2V0ID0gbGF6eUltYWdlLmRhdGFzZXQuc3Jjc2V0O1xuXHRcdFx0XHRcdFx0bGF6eUltYWdlLmNsYXNzTGlzdC5yZW1vdmUoXCJsYXp5XCIpO1xuXG5cdFx0XHRcdFx0XHRsYXp5SW1hZ2VzID0gbGF6eUltYWdlcy5maWx0ZXIoZnVuY3Rpb24gKGltYWdlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbWFnZSAhPT0gbGF6eUltYWdlO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChsYXp5SW1hZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGxhenlMb2FkKTtcblx0XHRcdFx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgbGF6eUxvYWQpO1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGxhenlMb2FkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9XG5cdH07XG5cblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBsYXp5TG9hZCk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBsYXp5TG9hZCk7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGxhenlMb2FkKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBsYXp5TG9hZCk7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
     1!function(n){var r={};function o(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,o),t.l=!0,t.exports}o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(n,r,function(e){return t[e]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="/wp-content/plugins/gecko-grid-layout/dist/",o(o.s=33)}({12:function(e,t,n){var r=n(34),o=n(35),i=n(36);e.exports=function(e){return r(e)||o(e)||i()}},33:function(e,t,n){"use strict";n.r(t);var r=n(12),o=n.n(r);document.addEventListener("DOMContentLoaded",function(){if(0<window.navigator.userAgent.indexOf("MSIE ")||navigator.userAgent.match(/Trident.*rv\:11\./)){var e=document.querySelectorAll(".wp-block-gecko-grid-layout");o()(e).forEach(function(e){e.className+=" wp-block-gecko-grid-layout--ie";var t=e.querySelectorAll(".wp-block-gecko-grid-layout__item"),n=1,r=1;o()(t).forEach(function(e){var t=window.getComputedStyle(e);e.style["-ms-grid-column"]=n,e.style["-ms-grid-row"]=r,12<(n+=parseInt(t.getPropertyValue("-ms-grid-column-span")))&&(r+=n=1)})});var t=document.querySelectorAll(".gecko-grid-layout-image__image");o()(t).forEach(function(e){var t=e.getAttribute("data-src");e.offsetParent.style.backgroundImage="url(".concat(t,")"),e.offsetParent.style.backgroundPosition="center",e.offsetParent.style.backgroundSize="cover",e.style.display="none"})}}),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)})},34:function(e,t){e.exports=function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}},35:function(e,t){e.exports=function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}},36:function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}}});
  • gecko-grid-layout/trunk/dist/style.css

    r2085474 r2085543  
    104104  opacity: 1;
    105105}
    106 
    107 /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3R5bGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGFBQWE7RUFDYixvREFBb0Q7RUFDcEQsY0FBYztFQUNkLDRDQUE0QztFQUM1QyxxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLGlCQUFpQjtFQUNqQiw4T0FBOE87RUFDOU8sbUJBQW1CO0FBQ3JCO0FBQ0E7RUFDRSx1QkFBdUI7RUFDdkIsZUFBZTtBQUNqQjtBQUNBO0VBQ0UsV0FBVztBQUNiO0FBQ0E7RUFDRTtJQUNFLGtEQUFrRDtJQUNsRCw0Q0FBNEM7RUFDOUM7QUFDRjtBQUNBO0VBQ0UsMkJBQWtCO01BQWxCLGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0UsMEJBQWlCO01BQWpCLGlCQUFpQjtBQUNuQjtBQUNBO0VBQ0Usd0JBQWU7TUFBZixlQUFlO0FBQ2pCO0FBQ0E7RUFDRSx1QkFBdUI7RUFDdkIsdUNBQXVDO0VBQ3ZDLG9CQUFvQjtFQUNwQixpQ0FBaUM7QUFDbkM7QUFDQTtFQUNFO0lBQ0UsNEJBQTRCO0lBQzVCLCtCQUErQjtJQUMvQiw4QkFBOEI7RUFDaEM7QUFDRjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsVUFBVTtBQUNaOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLFVBQVU7RUFDVixpQkFBaUI7QUFDbkI7QUFDQTtFQUNFLGtCQUFrQjtFQUNsQix1QkFBdUI7RUFDdkIsc0JBQXNCO0VBQ3RCLG9CQUFpQjtLQUFqQixpQkFBaUI7RUFDakIsMEJBQXVCO0tBQXZCLHVCQUF1QjtFQUN2QixXQUFXO0FBQ2I7QUFDQTtFQUNFLGFBQWE7RUFDYixrQkFBa0I7RUFDbEIsb0JBQWE7RUFBYixvQkFBYTtFQUFiLGFBQWE7RUFDYiw0QkFBc0I7RUFBdEIsNkJBQXNCO01BQXRCLDBCQUFzQjtVQUF0QixzQkFBc0I7RUFDdEIsd0JBQXVCO01BQXZCLHFCQUF1QjtVQUF2Qix1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLFlBQVk7RUFDWixXQUFXO0VBQ1gsMkNBQTJDO0FBQzdDO0FBQ0E7RUFDRSxVQUFVO0FBQ1o7QUFDQTtFQUNFLFVBQVU7RUFDVix5Q0FBaUM7RUFBakMsaUNBQWlDO0FBQ25DO0FBQ0E7RUFDRSxVQUFVO0FBQ1osQyIsImZpbGUiOiJzdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxMiwgbWlubWF4KDFyZW0sIDFmcikpO1xuICBncmlkLWdhcDogMXJlbTtcbiAgZ3JpZC1hdXRvLXJvd3M6IG1pbm1heChjYWxjKDEwMHZ3LzEyKSwgYXV0byk7XG4gIGdyaWQtYXV0by1mbG93OiBkZW5zZTtcbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC0taWUge1xuICBkaXNwbGF5OiAtbXMtZ3JpZDtcbiAgLW1zLWdyaWQtY29sdW1uczogMTBweCBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKSBtaW5tYXgoMXJlbSwgMWZyKTtcbiAgLW1zLWdyaWQtcm93czogYXV0bztcbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC0taWUgLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0X19pdGVtIHtcbiAgLW1zLWdyaWQtY29sdW1uLXNwYW46IDQ7XG4gIHBhZGRpbmc6IDAuNXJlbTtcbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dC5pcy1zdHlsZS1uby1nYXAge1xuICBncmlkLWdhcDogMDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3MjBweCkge1xuICAud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDBweCwgMWZyKSAhaW1wb3J0YW50O1xuICAgIGdyaWQtYXV0by1yb3dzOiBtaW5tYXgoMXB4LCBhdXRvKSAhaW1wb3J0YW50O1xuICB9XG59XG4ud3AtYmxvY2stZ2Vja28tZ3JpZC1sYXlvdXQgLmFsaWduLWNvbnRlbnQtY2VudGVyIHtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0IC5hbGlnbi1jb250ZW50LXRvcCB7XG4gIGFsaWduLXNlbGY6IHN0YXJ0O1xufVxuLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0IC5hbGlnbi1jb250ZW50LWJvdHRvbSB7XG4gIGFsaWduLXNlbGY6IGVuZDtcbn1cbi53cC1ibG9jay1nZWNrby1ncmlkLWxheW91dF9faXRlbSB7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xuICBncmlkLWNvbHVtbi1lbmQ6IHZhcigtLWdyaWQtY29sdW1uLWVuZCk7XG4gIGdyaWQtcm93LWVuZDogc3BhbiAxO1xuICBncmlkLXJvdy1lbmQ6IHZhcigtLWdyaWQtcm93LWVuZCk7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzIwcHgpIHtcbiAgLndwLWJsb2NrLWdlY2tvLWdyaWQtbGF5b3V0X19pdGVtIHtcbiAgICBncmlkLWNvbHVtbjogMS8tMSAhaW1wb3J0YW50O1xuICAgIGdyaWQtY29sdW1uLXN0YXJ0OiAxICFpbXBvcnRhbnQ7XG4gICAgZ3JpZC1jb2x1bW4tZW5kOiAtMSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xufVxuXG4uZ2Vja28tZ3JpZC1sYXlvdXQtYmFzaWMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG59XG5cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWluLWhlaWdodDogMjAwcHg7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2ltYWdlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIG9iamVjdC1wb3NpdGlvbjogY2VudGVyO1xuICB6LWluZGV4OiAtMTtcbn1cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvbiB7XG4gIHBhZGRpbmc6IDFyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XG59XG4uZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2UuaXMtc3R5bGUtbm8tY2FwdGlvbiAuZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb24ge1xuICBvcGFjaXR5OiAwO1xufVxuLmdlY2tvLWdyaWQtbGF5b3V0LWltYWdlLmlzLXN0eWxlLWhvdmVyIC5nZWNrby1ncmlkLWxheW91dC1pbWFnZV9fY2FwdGlvbiB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IGFsbCAyNTBtcyBlYXNlLWluLW91dDtcbn1cbi5nZWNrby1ncmlkLWxheW91dC1pbWFnZS5pcy1zdHlsZS1ob3Zlcjpob3ZlciAuZ2Vja28tZ3JpZC1sYXlvdXQtaW1hZ2VfX2NhcHRpb24ge1xuICBvcGFjaXR5OiAxO1xufSJdLCJzb3VyY2VSb290IjoiIn0=*/
  • gecko-grid-layout/trunk/gecko-grid-layout.php

    r2085474 r2085543  
    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.1.8
     6 * Version: 1.1.9
    77 * Author: Gecko Designs
    88 * Author URI: https://geckodesigns.com
  • gecko-grid-layout/trunk/readme.txt

    r2085474 r2085543  
    55Requires at least: 5.0
    66Tested up to: 5.1
    7 Stable tag: 1.1.8
     7Stable tag: 1.1.9
    88Requires PHP: 5.6
    99License: GPLv2 or later
     
    3636
    3737== Changelog ==
     38= 1.1.9 =
     39* Better ie Support
    3840= 1.1.8 =
    3941* Better ie Support
     
    9193
    9294== Upgrade Notice ==
     95= 1.1.9 =
     96* Better ie Support
    9397= 1.1.8 =
    9498* Better ie Support
Note: See TracChangeset for help on using the changeset viewer.